summaryrefslogtreecommitdiff
path: root/cli/lsp/documents.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/lsp/documents.rs')
-rw-r--r--cli/lsp/documents.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs
index 5ae15b362..8c553b03d 100644
--- a/cli/lsp/documents.rs
+++ b/cli/lsp/documents.rs
@@ -143,6 +143,16 @@ impl AssetOrDocument {
}
}
+ pub fn maybe_semantic_tokens(&self) -> Option<lsp::SemanticTokens> {
+ match self {
+ AssetOrDocument::Asset(_) => None,
+ AssetOrDocument::Document(d) => d
+ .open_data
+ .as_ref()
+ .and_then(|d| d.maybe_semantic_tokens.lock().clone()),
+ }
+ }
+
pub fn text(&self) -> Arc<str> {
match self {
AssetOrDocument::Asset(a) => a.text(),
@@ -249,6 +259,7 @@ fn get_maybe_test_module_fut(
pub struct DocumentOpenData {
lsp_version: i32,
maybe_parsed_source: Option<ParsedSourceResult>,
+ maybe_semantic_tokens: Arc<Mutex<Option<lsp::SemanticTokens>>>,
}
#[derive(Debug)]
@@ -330,6 +341,7 @@ impl Document {
open_data: maybe_lsp_version.map(|v| DocumentOpenData {
lsp_version: v,
maybe_parsed_source,
+ maybe_semantic_tokens: Default::default(),
}),
resolver,
specifier,
@@ -421,6 +433,8 @@ impl Document {
open_data: self.open_data.as_ref().map(|d| DocumentOpenData {
lsp_version: d.lsp_version,
maybe_parsed_source,
+ // reset semantic tokens
+ maybe_semantic_tokens: Default::default(),
}),
resolver,
specifier: self.specifier.clone(),
@@ -499,6 +513,7 @@ impl Document {
open_data: self.open_data.is_some().then_some(DocumentOpenData {
lsp_version: version,
maybe_parsed_source,
+ maybe_semantic_tokens: Default::default(),
}),
resolver: self.resolver.clone(),
}))
@@ -652,6 +667,15 @@ impl Document {
) {
*self.maybe_navigation_tree.lock() = Some(navigation_tree);
}
+
+ pub fn cache_semantic_tokens_full(
+ &self,
+ semantic_tokens: lsp::SemanticTokens,
+ ) {
+ if let Some(open_data) = self.open_data.as_ref() {
+ *open_data.maybe_semantic_tokens.lock() = Some(semantic_tokens);
+ }
+ }
}
fn resolve_media_type(