summaryrefslogtreecommitdiff
path: root/cli/lsp/documents.rs
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2024-04-14 22:42:58 +0100
committerGitHub <noreply@github.com>2024-04-14 22:42:58 +0100
commit8f1a92f3c39a4db7582824944d2c9319a11efcc0 (patch)
treeee0e1f861adda0be3b966c9541267eaa7c800a57 /cli/lsp/documents.rs
parente277490c821d20280137ca54eede8502caf62bbd (diff)
refactor(lsp): use fallback resolution in op_resolve() (#23329)
Diffstat (limited to 'cli/lsp/documents.rs')
-rw-r--r--cli/lsp/documents.rs34
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));