aboutsummaryrefslogtreecommitdiff
path: root/src/server/requests.odin
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/requests.odin')
-rw-r--r--src/server/requests.odin14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/server/requests.odin b/src/server/requests.odin
index 355cf1b..c013ffc 100644
--- a/src/server/requests.odin
+++ b/src/server/requests.odin
@@ -699,6 +699,8 @@ request_initialize :: proc(
signatureTriggerCharacters := []string{"(", ","}
signatureRetriggerCharacters := []string{","}
+ semantic_range_support := initialize_params.capabilities.textDocument.semanticTokens.requests.range
+
response := make_response_message(
params = ResponseInitializeParams {
capabilities = ServerCapabilities {
@@ -718,8 +720,8 @@ request_initialize :: proc(
retriggerCharacters = signatureRetriggerCharacters,
},
semanticTokensProvider = SemanticTokensOptions {
- range = config.enable_semantic_tokens,
- full = config.enable_semantic_tokens,
+ range = config.enable_semantic_tokens && semantic_range_support,
+ full = config.enable_semantic_tokens && !semantic_range_support,
legend = SemanticTokensLegend {
tokenTypes = semantic_token_type_names,
tokenModifiers = semantic_token_modifier_names,
@@ -1207,12 +1209,10 @@ request_semantic_token_range :: proc(
tokens_params: SemanticTokensResponseParams
if config.enable_semantic_tokens {
- resolve_entire_file_cached(document)
+ symbols := resolve_ranged_file(document, semantic_params.range, context.temp_allocator)
- if file, ok := file_resolve_cache.files[document.uri.uri]; ok {
- tokens := get_semantic_tokens(document, semantic_params.range, file.symbols)
- tokens_params = semantic_tokens_to_response_params(tokens)
- }
+ tokens := get_semantic_tokens(document, semantic_params.range, symbols)
+ tokens_params = semantic_tokens_to_response_params(tokens)
}
response := make_response_message(params = tokens_params, id = id)