Exemplo n.º 1
0
    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()
Exemplo n.º 4
0
    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()
Exemplo n.º 6
0
    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
Exemplo n.º 8
0
 def _ChangedTick(self):
     return vimsupport.GetBufferChangedTick(self._number)