diff options
author | Nayeem Rahman <nayeemrmn99@gmail.com> | 2024-04-14 22:42:58 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-14 22:42:58 +0100 |
commit | 8f1a92f3c39a4db7582824944d2c9319a11efcc0 (patch) | |
tree | ee0e1f861adda0be3b966c9541267eaa7c800a57 /cli/lsp/documents.rs | |
parent | e277490c821d20280137ca54eede8502caf62bbd (diff) |
refactor(lsp): use fallback resolution in op_resolve() (#23329)
Diffstat (limited to 'cli/lsp/documents.rs')
-rw-r--r-- | cli/lsp/documents.rs | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs index 9ca2db316..8100b0732 100644 --- a/cli/lsp/documents.rs +++ b/cli/lsp/documents.rs @@ -1173,15 +1173,11 @@ impl Documents { /// tsc when type checking. pub fn resolve( &self, - specifiers: Vec<String>, - referrer_doc: &AssetOrDocument, + specifiers: &[String], + referrer: &ModuleSpecifier, maybe_npm: Option<&StateNpmSnapshot>, ) -> Vec<Option<(ModuleSpecifier, MediaType)>> { - let referrer = referrer_doc.specifier(); - let dependencies = match referrer_doc { - AssetOrDocument::Asset(_) => None, - AssetOrDocument::Document(doc) => Some(doc.dependencies.clone()), - }; + let dependencies = self.get(referrer).map(|d| d.dependencies.clone()); let mut results = Vec::new(); for specifier in specifiers { if let Some(npm) = maybe_npm { @@ -1191,7 +1187,7 @@ impl Documents { npm .node_resolver .resolve( - &specifier, + specifier, referrer, NodeResolutionMode::Types, &PermissionsContainer::allow_all(), @@ -1203,14 +1199,14 @@ impl Documents { } } if specifier.starts_with("asset:") { - if let Ok(specifier) = ModuleSpecifier::parse(&specifier) { + if let Ok(specifier) = ModuleSpecifier::parse(specifier) { let media_type = MediaType::from_specifier(&specifier); results.push(Some((specifier, media_type))); } else { results.push(None); } } else if let Some(dep) = - dependencies.as_ref().and_then(|d| d.deps.get(&specifier)) + dependencies.as_ref().and_then(|d| d.deps.get(specifier)) { if let Some(specifier) = dep.maybe_type.maybe_specifier() { results.push(self.resolve_dependency(specifier, maybe_npm, referrer)); @@ -1220,18 +1216,28 @@ impl Documents { results.push(None); } } else if let Some(specifier) = self - .resolve_imports_dependency(&specifier) + .resolve_imports_dependency(specifier) .and_then(|r| r.maybe_specifier()) { results.push(self.resolve_dependency(specifier, maybe_npm, referrer)); } else if let Ok(npm_req_ref) = - NpmPackageReqReference::from_str(&specifier) + NpmPackageReqReference::from_str(specifier) { results.push(node_resolve_npm_req_ref( &npm_req_ref, maybe_npm, referrer, )); + } else if let Ok(specifier) = self.get_resolver().resolve( + specifier, + &deno_graph::Range { + specifier: referrer.clone(), + start: deno_graph::Position::zeroed(), + end: deno_graph::Position::zeroed(), + }, + ResolutionMode::Types, + ) { + results.push(self.resolve_dependency(&specifier, maybe_npm, referrer)); } else { results.push(None); } @@ -1495,7 +1501,9 @@ impl Documents { if let Ok(npm_ref) = NpmPackageReqReference::from_specifier(specifier) { return node_resolve_npm_req_ref(&npm_ref, maybe_npm, referrer); } - let doc = self.get(specifier)?; + let Some(doc) = self.get(specifier) else { + return Some((specifier.clone(), MediaType::from_specifier(specifier))); + }; let maybe_module = doc.maybe_js_module().and_then(|r| r.as_ref().ok()); let maybe_types_dependency = maybe_module .and_then(|m| m.maybe_types_dependency.as_ref().map(|d| &d.dependency)); |