summaryrefslogtreecommitdiff
path: root/cli/lsp/documents.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-07-26 18:52:31 -0400
committerGitHub <noreply@github.com>2023-07-26 22:52:31 +0000
commit56e3daa19b1a0718bbcea2beae737ce8845ceac2 (patch)
tree408138bea1dc2641b6f2ce75a6497322d27222b8 /cli/lsp/documents.rs
parent0e4d6d41ad64b89ab72d87a778d1bf3e516efabc (diff)
fix(lsp): handle import mapped `node:` specifier (#19956)
Closes https://github.com/denoland/vscode_deno/issues/805
Diffstat (limited to 'cli/lsp/documents.rs')
-rw-r--r--cli/lsp/documents.rs36
1 files changed, 17 insertions, 19 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);
}