def Request(self, force=False): if self._request and not self.Ready(): return True # Check to see if the buffer ranges would actually change anything visible. # This avoids a round-trip for every single line scroll event if (not force and self.tick == vimsupport.GetBufferChangedTick(self._bufnr) and vimsupport.VisibleRangeOfBufferOverlaps( self._bufnr, self._last_requested_range)): return False # don't poll # We're requesting changes, so the existing results are now invalid self._latest_inlay_hints = [] # FIXME: This call is duplicated in the call to VisibleRangeOfBufferOverlaps # - remove the expansion param # - look up the actual visible range, then call this function # - if not overlapping, do the factor expansion and request self._last_requested_range = vimsupport.RangeVisibleInBuffer( self._bufnr) self.tick = vimsupport.GetBufferChangedTick(self._bufnr) request_data = BuildRequestData(self._bufnr) request_data.update({'range': self._last_requested_range}) self._request = InlayHintsRequest(request_data) self._request.Start() return True
def Update(self): if not self.IsResponseReady(): # Not ready - poll return False if self.tick != vimsupport.GetBufferChangedTick(self._bufnr): # Buffer has changed, we should ignore the data and retry # self.SendRequest() return False # We requested a snapshot response = self._request.Response() self._request = None tokens = response.get('tokens', []) prev_prop_id = self._prop_id self._prop_id = NextPropID() for token in tokens: if token['type'] not in HIGHLIGHT_GROUP: continue prop_type = f"YCM_HL_{ token[ 'type' ] }" vimsupport.AddTextProperty(self._bufnr, self._prop_id, prop_type, token['range']) vimsupport.ClearTextProperties(self._bufnr, prev_prop_id) # No need to re-poll return False
def SendRequest(self): if self._request and not self.IsResponseReady(): return self.tick = vimsupport.GetBufferChangedTick(self._bufnr) self._request = SemanticTokensRequest(BuildRequestData()) self._request.Start()
def Refresh(self): if self.tick != vimsupport.GetBufferChangedTick(self._bufnr): # stale data return if self._request is not None: # request in progress; we''l handle refreshing when it's done. return self._Draw()
def SendRequest( self ): if self._request and not self.IsResponseReady(): return self.tick = vimsupport.GetBufferChangedTick( self._bufnr ) request: dict = BuildRequestData( self._bufnr ) request.update( { 'range': vimsupport.RangeVisibleInBuffer( self._bufnr ) } ) self._request = SemanticTokensRequest( request ) self._request.Start()
def Update(self): if not self._request: # Nothing to update return True assert self.Ready() # We're ready to use this response. Clear it (to avoid repeatedly # re-polling). self._latest_inlay_hints = self._request.Response() self._request = None if self.tick != vimsupport.GetBufferChangedTick(self._bufnr): # Buffer has changed, we should ignore the data and retry self.Request(force=True) return False # poll again self._Draw() # No need to re-poll return True
def Update( self ): if not self._request: # Nothing to update return True assert self.IsResponseReady() # We're ready to use this response. Clear it (to avoid repeatedly # re-polling). response = self._request.Response() self._request = None if self.tick != vimsupport.GetBufferChangedTick( self._bufnr ): # Buffer has changed, we should ignore the data and retry self.SendRequest() return False # poll again # We requested a snapshot tokens = response.get( 'tokens', [] ) prev_prop_id = self._prop_id self._prop_id = NextPropID() for token in tokens: if token[ 'type' ] not in HIGHLIGHT_GROUP: if token[ 'type' ] not in REPORTED_MISSING_TYPES: REPORTED_MISSING_TYPES.add( token[ 'type' ] ) vimsupport.PostVimMessage( f"Missing property type for { token[ 'type' ] }" ) continue prop_type = f"YCM_HL_{ token[ 'type' ] }" tp.AddTextProperty( self._bufnr, self._prop_id, prop_type, token[ 'range' ] ) tp.ClearTextProperties( self._bufnr, prop_id = prev_prop_id ) # No need to re-poll return True
def _ChangedTick(self): return vimsupport.GetBufferChangedTick(self._number)