diff options
Diffstat (limited to 'cli/lsp/documents.rs')
-rw-r--r-- | cli/lsp/documents.rs | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs index 208492800..bff56a6b8 100644 --- a/cli/lsp/documents.rs +++ b/cli/lsp/documents.rs @@ -896,6 +896,7 @@ pub struct Documents { redirect_resolver: Arc<RedirectResolver>, /// If --unstable-sloppy-imports is enabled. unstable_sloppy_imports: bool, + project_version: usize, } impl Documents { @@ -924,6 +925,7 @@ impl Documents { has_injected_types_node_package: false, redirect_resolver: Arc::new(RedirectResolver::new(cache)), unstable_sloppy_imports: false, + project_version: 0, } } @@ -935,6 +937,14 @@ impl Documents { .flat_map(|value| value.get_type().or_else(|| value.get_code())) } + pub fn project_version(&self) -> String { + self.project_version.to_string() + } + + pub fn increment_project_version(&mut self) { + self.project_version += 1; + } + /// "Open" a document from the perspective of the editor, meaning that /// requests for information from the document will come from the in-memory /// representation received from the language server client, versus reading @@ -957,10 +967,13 @@ impl Documents { resolver, npm_resolver, ); - let mut file_system_docs = self.file_system_docs.lock(); - file_system_docs.docs.remove(&specifier); - file_system_docs.dirty = true; + { + let mut file_system_docs = self.file_system_docs.lock(); + file_system_docs.docs.remove(&specifier); + file_system_docs.dirty = true; + } self.open_docs.insert(specifier, document.clone()); + self.increment_project_version(); self.dirty = true; document } @@ -995,6 +1008,7 @@ impl Documents { self.get_npm_resolver(), )?; self.open_docs.insert(doc.specifier().clone(), doc.clone()); + self.increment_project_version(); Ok(doc) } @@ -1016,8 +1030,11 @@ impl Documents { /// information about the document is required. pub fn close(&mut self, specifier: &ModuleSpecifier) -> Result<(), AnyError> { if let Some(document) = self.open_docs.remove(specifier) { - let mut file_system_docs = self.file_system_docs.lock(); - file_system_docs.docs.insert(specifier.clone(), document); + { + let mut file_system_docs = self.file_system_docs.lock(); + file_system_docs.docs.insert(specifier.clone(), document); + } + self.increment_project_version(); self.dirty = true; } Ok(()) @@ -1422,6 +1439,7 @@ impl Documents { ); self.resolver_config_hash = new_resolver_config_hash; + self.increment_project_version(); self.dirty = true; self.calculate_dependents_if_dirty(); } |