From 7b2f02e51583ace0700e3245808513e5f4228a55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20F=C3=B6rster?= Date: Sat, 18 Mar 2023 11:14:36 +0100 Subject: [PATCH] Support full semantic tokens request --- src/server.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/server.rs b/src/server.rs index ad2d6148..e1106676 100644 --- a/src/server.rs +++ b/src/server.rs @@ -13,7 +13,7 @@ use log::{error, info}; use lsp_server::{Connection, ErrorCode, Message, RequestId}; use lsp_types::{notification::*, request::*, *}; use once_cell::sync::Lazy; -use rowan::{ast::AstNode, TextSize}; +use rowan::{ast::AstNode, TextLen, TextRange, TextSize}; use rustc_hash::FxHashSet; use serde::{Deserialize, Serialize}; use serde_repr::{Deserialize_repr, Serialize_repr}; @@ -184,7 +184,7 @@ impl Server { work_done_progress_options: Default::default(), legend: semantic_tokens::legend(), range: Some(true), - full: Some(SemanticTokensFullOptions::Bool(false)), + full: Some(SemanticTokensFullOptions::Bool(true)), }), ), ..ServerCapabilities::default() @@ -814,6 +814,16 @@ impl Server { Ok(()) } + fn semantic_tokens_full(&mut self, id: RequestId, params: SemanticTokensParams) -> Result<()> { + self.run_with_db(id, move |db| { + let Some(document) = Workspace::get(db).lookup_uri(db, ¶ms.text_document.uri) else { return None }; + let range = document.line_index(db).line_col_lsp_range(TextRange::new(0.into(), document.text(db).text_len())); + semantic_tokens::find_all(db, ¶ms.text_document.uri, range) + }); + + Ok((())) + } + fn semantic_tokens_range( &mut self, id: RequestId, @@ -917,6 +927,9 @@ impl Server { .on::(|id, params| { self.semantic_tokens_range(id, params) })? + .on::(|id, params| { + self.semantic_tokens_full(id, params) + })? .on::(|id,params| { self.inlay_hints(id, params) })?