diff options
| author | David Sherret <dsherret@users.noreply.github.com> | 2024-02-27 13:30:21 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-27 18:30:21 +0000 |
| commit | e9fe71acb53c8856754ef892c463253cb96087ce (patch) | |
| tree | dedffed4cbee198a064bd3ff81058f951bf0b401 /cli/lsp | |
| parent | 8d5c2313495014a6af842e21da802e01e11b8e08 (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.rs | 3 | ||||
| -rw-r--r-- | cli/lsp/documents.rs | 72 |
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 + } + }) + }, + ) } } |
