diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2024-03-04 12:34:31 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-04 17:34:31 +0000 |
commit | 902a1137ea6021af8c56b82fa38b8084a89a4bb1 (patch) | |
tree | da83a61ba60f6ebd15e6474197c7016853704a20 /cli/lsp/diagnostics.rs | |
parent | 5a28d70e05d9854102e983a4c4fd1cf4238361dc (diff) |
fix(lsp): do not warn about local file "redirects" from .js to .d.ts files (#22670)
The diagnostic was incorrect when importing a `.js` file with a
corresponding `.d.ts` file with sloppy imports because it would say to
change the `.js` extension to `.d.ts`, which is incorrect. We might as
well just hide this diagnostic.
Diffstat (limited to 'cli/lsp/diagnostics.rs')
-rw-r--r-- | cli/lsp/diagnostics.rs | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/cli/lsp/diagnostics.rs b/cli/lsp/diagnostics.rs index 6deafde4c..fe6904830 100644 --- a/cli/lsp/diagnostics.rs +++ b/cli/lsp/diagnostics.rs @@ -1305,6 +1305,33 @@ fn diagnose_resolution( is_dynamic: bool, maybe_assert_type: Option<&str>, ) -> Vec<DenoDiagnostic> { + fn check_redirect_diagnostic( + specifier: &ModuleSpecifier, + doc: &Document, + ) -> Option<DenoDiagnostic> { + let doc_specifier = doc.specifier(); + // If the module was redirected, we want to issue an informational + // diagnostic that indicates this. This then allows us to issue a code + // action to replace the specifier with the final redirected one. + if specifier.scheme() == "jsr" || doc_specifier == specifier { + return None; + } + // don't bother warning about sloppy import redirects from .js to .d.ts + // because explaining how to fix this via a diagnostic involves using + // @deno-types and that's a bit complicated to explain + let is_sloppy_import_dts_redirect = doc_specifier.scheme() == "file" + && doc.media_type().is_declaration() + && !MediaType::from_specifier(specifier).is_declaration(); + if is_sloppy_import_dts_redirect { + return None; + } + + Some(DenoDiagnostic::Redirect { + from: specifier.clone(), + to: doc_specifier.clone(), + }) + } + let mut diagnostics = vec![]; match resolution { Resolution::Ok(resolved) => { @@ -1319,15 +1346,8 @@ fn diagnose_resolution( } } if let Some(doc) = snapshot.documents.get(specifier) { - let doc_specifier = doc.specifier(); - // If the module was redirected, we want to issue an informational - // diagnostic that indicates this. This then allows us to issue a code - // action to replace the specifier with the final redirected one. - if specifier.scheme() != "jsr" && doc_specifier != specifier { - diagnostics.push(DenoDiagnostic::Redirect { - from: specifier.clone(), - to: doc_specifier.clone(), - }); + if let Some(diagnostic) = check_redirect_diagnostic(specifier, &doc) { + diagnostics.push(diagnostic); } if doc.media_type() == MediaType::Json { match maybe_assert_type { |