getSemanticTokensRange method

Future<List<LspSemanticToken>> getSemanticTokensRange(
  1. String filePath, {
  2. required int startLine,
  3. required int startCharacter,
  4. required int endLine,
  5. required int endCharacter,
})

Gets semantic tokens for a specific visible range in the document.

Implementation

Future<List<LspSemanticToken>> getSemanticTokensRange(
  String filePath, {
  required int startLine,
  required int startCharacter,
  required int endLine,
  required int endCharacter,
}) async {
  if (!capabilities.semanticHighlighting) return [];

  if (!_serverSupportsSemanticTokensRange) {
    if (!_serverSupportsSemanticTokensFull) return [];
    return getSemanticTokensFull(filePath);
  }

  final response = await sendRequest(
    method: 'textDocument/semanticTokens/range',
    params: {
      'textDocument': {'uri': Uri.file(filePath).toString()},
      'range': {
        'start': {'line': startLine, 'character': startCharacter},
        'end': {'line': endLine, 'character': endCharacter},
      },
    },
  );

  final tokens = response['result']?['data'];
  if (tokens is! List) return [];
  return _decodeSemanticTokens(tokens);
}