diff options
Diffstat (limited to 'cli/lsp')
-rw-r--r-- | cli/lsp/documents.rs | 36 | ||||
-rw-r--r-- | cli/lsp/language_server.rs | 17 |
2 files changed, 27 insertions, 26 deletions
diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs index 1ac5934ff..d987279de 100644 --- a/cli/lsp/documents.rs +++ b/cli/lsp/documents.rs @@ -1104,18 +1104,6 @@ impl Documents { continue; } } - if let Some(module_name) = specifier.strip_prefix("node:") { - if deno_node::is_builtin_node_module(module_name) { - // return itself for node: specifiers because during type checking - // we resolve to the ambient modules in the @types/node package - // rather than deno_std/node - results.push(Some(( - ModuleSpecifier::parse(&specifier).unwrap(), - MediaType::Dts, - ))); - continue; - } - } if specifier.starts_with("asset:") { if let Ok(specifier) = ModuleSpecifier::parse(&specifier) { let media_type = MediaType::from_specifier(&specifier); @@ -1221,6 +1209,7 @@ impl Documents { } } } + hasher.finish() } @@ -1290,9 +1279,10 @@ impl Documents { options.document_preload_limit, ); self.resolver_config_hash = new_resolver_config_hash; - } - self.dirty = true; + self.dirty = true; + self.calculate_dependents_if_dirty(); + } } fn refresh_dependencies( @@ -1416,12 +1406,11 @@ impl Documents { fn analyze_doc(&mut self, specifier: &ModuleSpecifier, doc: &Document) { self.analyzed_specifiers.insert(specifier.clone()); - for (name, dependency) in doc.dependencies() { - if !self.has_node_builtin_specifier && name.starts_with("node:") { - self.has_node_builtin_specifier = true; - } - + for dependency in doc.dependencies().values() { if let Some(dep) = dependency.get_code() { + if !self.has_node_builtin_specifier && dep.scheme() == "node" { + self.has_node_builtin_specifier = true; + } self.add(dep, specifier); } if let Some(dep) = dependency.get_type() { @@ -1484,6 +1473,15 @@ impl Documents { specifier: &ModuleSpecifier, maybe_node_resolver: Option<&Arc<NodeResolver>>, ) -> Option<(ModuleSpecifier, MediaType)> { + if let Some(module_name) = specifier.as_str().strip_prefix("node:") { + if deno_node::is_builtin_node_module(module_name) { + // return itself for node: specifiers because during type checking + // we resolve to the ambient modules in the @types/node package + // rather than deno_std/node + return Some((specifier.clone(), MediaType::Dts)); + } + } + if let Ok(npm_ref) = NpmPackageReqReference::from_specifier(specifier) { return node_resolve_npm_req_ref(npm_ref, maybe_node_resolver); } diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index 3ac9610b3..2fef8cfa0 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -1290,7 +1290,7 @@ impl Inner { }) } - fn refresh_documents_config(&mut self) { + async fn refresh_documents_config(&mut self) { self.documents.update_config(UpdateDocumentConfigOptions { enabled_urls: self.config.enabled_urls(), document_preload_limit: self @@ -1303,6 +1303,10 @@ impl Inner { npm_registry_api: self.npm.api.clone(), npm_resolution: self.npm.resolution.clone(), }); + + // refresh the npm specifiers because it might have discovered + // a @types/node package and now's a good time to do that anyway + self.refresh_npm_specifiers().await; } async fn shutdown(&self) -> LspResult<()> { @@ -1447,7 +1451,7 @@ impl Inner { } self.recreate_npm_services_if_necessary().await; - self.refresh_documents_config(); + self.refresh_documents_config().await; self.diagnostics_server.invalidate_all(); self.send_diagnostics_update(); @@ -1566,8 +1570,7 @@ impl Inner { if touched { self.recreate_npm_services_if_necessary().await; - self.refresh_documents_config(); - self.refresh_npm_specifiers().await; + self.refresh_documents_config().await; self.diagnostics_server.invalidate_all(); self.ts_server.restart(self.snapshot()).await; self.send_diagnostics_update(); @@ -3007,7 +3010,7 @@ impl tower_lsp::LanguageServer for LanguageServer { { let mut ls = self.0.write().await; - ls.refresh_documents_config(); + ls.refresh_documents_config().await; ls.diagnostics_server.invalidate_all(); ls.send_diagnostics_update(); } @@ -3075,7 +3078,7 @@ impl tower_lsp::LanguageServer for LanguageServer { .map(|d| d.is_diagnosable()) .unwrap_or(false) { - ls.refresh_documents_config(); + ls.refresh_documents_config().await; ls.send_diagnostics_update(); ls.send_testing_update(); } @@ -3165,7 +3168,7 @@ impl tower_lsp::LanguageServer for LanguageServer { if self.refresh_specifiers_from_client().await { let mut ls = self.0.write().await; - ls.refresh_documents_config(); + ls.refresh_documents_config().await; ls.diagnostics_server.invalidate_all(); ls.send_diagnostics_update(); } |