summaryrefslogtreecommitdiff
path: root/cli/lsp
diff options
context:
space:
mode:
Diffstat (limited to 'cli/lsp')
-rw-r--r--cli/lsp/documents.rs36
-rw-r--r--cli/lsp/language_server.rs17
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();
}