summaryrefslogtreecommitdiff
path: root/cli/lsp
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2024-02-27 13:30:21 -0500
committerGitHub <noreply@github.com>2024-02-27 18:30:21 +0000
commite9fe71acb53c8856754ef892c463253cb96087ce (patch)
treededffed4cbee198a064bd3ff81058f951bf0b401 /cli/lsp
parent8d5c2313495014a6af842e21da802e01e11b8e08 (diff)
fix(unstable): sloppy imports should resolve .d.ts files during types resolution (#22602)
Diffstat (limited to 'cli/lsp')
-rw-r--r--cli/lsp/diagnostics.rs3
-rw-r--r--cli/lsp/documents.rs72
2 files changed, 42 insertions, 33 deletions
diff --git a/cli/lsp/diagnostics.rs b/cli/lsp/diagnostics.rs
index e3e206a52..25cfd94e2 100644
--- a/cli/lsp/diagnostics.rs
+++ b/cli/lsp/diagnostics.rs
@@ -35,6 +35,7 @@ use deno_core::unsync::spawn;
use deno_core::unsync::spawn_blocking;
use deno_core::unsync::JoinHandle;
use deno_core::ModuleSpecifier;
+use deno_graph::source::ResolutionMode;
use deno_graph::Resolution;
use deno_graph::ResolutionError;
use deno_graph::SpecifierError;
@@ -1240,7 +1241,7 @@ impl DenoDiagnostic {
Self::NoCacheJsr(pkg_req, specifier) => (lsp::DiagnosticSeverity::ERROR, format!("Uncached or missing jsr package: {}", pkg_req), Some(json!({ "specifier": specifier }))),
Self::NoCacheNpm(pkg_req, specifier) => (lsp::DiagnosticSeverity::ERROR, format!("Uncached or missing npm package: {}", pkg_req), Some(json!({ "specifier": specifier }))),
Self::NoLocal(specifier) => {
- let sloppy_resolution = SloppyImportsResolver::resolve_with_fs(&deno_fs::RealFs, specifier);
+ let sloppy_resolution = SloppyImportsResolver::resolve_with_fs(&deno_fs::RealFs, specifier, ResolutionMode::Execution);
let data = sloppy_resolution.as_lsp_quick_fix_message().map(|message| {
json!({
"specifier": specifier,
diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs
index 66ebe5115..419d08d50 100644
--- a/cli/lsp/documents.rs
+++ b/cli/lsp/documents.rs
@@ -1101,24 +1101,28 @@ impl Documents {
&self,
specifier: &'a ModuleSpecifier,
) -> SloppyImportsResolution<'a> {
- SloppyImportsResolver::resolve_with_stat_sync(specifier, |path| {
- if let Ok(specifier) = ModuleSpecifier::from_file_path(path) {
- if self.open_docs.contains_key(&specifier)
- || self.cache.contains(&specifier)
- {
- return Some(SloppyImportsFsEntry::File);
- }
- }
- path.metadata().ok().and_then(|m| {
- if m.is_file() {
- Some(SloppyImportsFsEntry::File)
- } else if m.is_dir() {
- Some(SloppyImportsFsEntry::Dir)
- } else {
- None
+ SloppyImportsResolver::resolve_with_stat_sync(
+ specifier,
+ ResolutionMode::Types,
+ |path| {
+ if let Ok(specifier) = ModuleSpecifier::from_file_path(path) {
+ if self.open_docs.contains_key(&specifier)
+ || self.cache.contains(&specifier)
+ {
+ return Some(SloppyImportsFsEntry::File);
+ }
}
- })
- })
+ path.metadata().ok().and_then(|m| {
+ if m.is_file() {
+ Some(SloppyImportsFsEntry::File)
+ } else if m.is_dir() {
+ Some(SloppyImportsFsEntry::Dir)
+ } else {
+ None
+ }
+ })
+ },
+ )
}
/// Return `true` if the specifier can be resolved to a document.
@@ -1800,22 +1804,26 @@ impl<'a> OpenDocumentsGraphLoader<'a> {
&self,
specifier: &'b ModuleSpecifier,
) -> SloppyImportsResolution<'b> {
- SloppyImportsResolver::resolve_with_stat_sync(specifier, |path| {
- if let Ok(specifier) = ModuleSpecifier::from_file_path(path) {
- if self.open_docs.contains_key(&specifier) {
- return Some(SloppyImportsFsEntry::File);
- }
- }
- path.metadata().ok().and_then(|m| {
- if m.is_file() {
- Some(SloppyImportsFsEntry::File)
- } else if m.is_dir() {
- Some(SloppyImportsFsEntry::Dir)
- } else {
- None
+ SloppyImportsResolver::resolve_with_stat_sync(
+ specifier,
+ ResolutionMode::Types,
+ |path| {
+ if let Ok(specifier) = ModuleSpecifier::from_file_path(path) {
+ if self.open_docs.contains_key(&specifier) {
+ return Some(SloppyImportsFsEntry::File);
+ }
}
- })
- })
+ path.metadata().ok().and_then(|m| {
+ if m.is_file() {
+ Some(SloppyImportsFsEntry::File)
+ } else if m.is_dir() {
+ Some(SloppyImportsFsEntry::Dir)
+ } else {
+ None
+ }
+ })
+ },
+ )
}
}