diff options
author | HasanAlrimawi <141642411+HasanAlrimawi@users.noreply.github.com> | 2024-07-24 18:12:42 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-24 16:12:42 +0100 |
commit | fcd9bbe8eeec7d418b47544b6699e405c4d83826 (patch) | |
tree | 83ca484d97598cc2f427444fac4a85da801d2aa2 /cli/lsp/diagnostics.rs | |
parent | 199a8ca4c5a8c5b2a060ef6a8912766a6a98d0b7 (diff) |
fix: update lsp error message of 'relative import path' to 'use deno add' for npm/jsr packages (#24524)
Diffstat (limited to 'cli/lsp/diagnostics.rs')
-rw-r--r-- | cli/lsp/diagnostics.rs | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/cli/lsp/diagnostics.rs b/cli/lsp/diagnostics.rs index 53a6fd7d3..899dc9681 100644 --- a/cli/lsp/diagnostics.rs +++ b/cli/lsp/diagnostics.rs @@ -36,6 +36,7 @@ use deno_core::unsync::spawn_blocking; use deno_core::unsync::JoinHandle; use deno_core::ModuleSpecifier; use deno_graph::source::ResolutionMode; +use deno_graph::source::ResolveError; use deno_graph::Resolution; use deno_graph::ResolutionError; use deno_graph::SpecifierError; @@ -48,6 +49,7 @@ use deno_semver::jsr::JsrPackageReqReference; use deno_semver::npm::NpmPackageReqReference; use deno_semver::package::PackageReq; use import_map::ImportMap; +use import_map::ImportMapError; use log::error; use std::collections::HashMap; use std::collections::HashSet; @@ -1272,12 +1274,25 @@ impl DenoDiagnostic { (lsp::DiagnosticSeverity::ERROR, no_local_message(specifier, sloppy_resolution), data) }, Self::Redirect { from, to} => (lsp::DiagnosticSeverity::INFORMATION, format!("The import of \"{from}\" was redirected to \"{to}\"."), Some(json!({ "specifier": from, "redirect": to }))), - Self::ResolutionError(err) => ( + Self::ResolutionError(err) => { + let mut message; + message = enhanced_resolution_error_message(err); + if let deno_graph::ResolutionError::ResolverError {error, ..} = err{ + if let ResolveError::Other(resolve_error, ..) = (*error).as_ref() { + if let Some(ImportMapError::UnmappedBareSpecifier(specifier, _)) = resolve_error.downcast_ref::<ImportMapError>() { + if specifier.chars().next().unwrap_or('\0') == '@'{ + let hint = format!("\nHint: Use [deno add {}] to add the dependency.", specifier); + message.push_str(hint.as_str()); + } + } + } + } + ( lsp::DiagnosticSeverity::ERROR, - enhanced_resolution_error_message(err), + message, graph_util::get_resolution_error_bare_node_specifier(err) .map(|specifier| json!({ "specifier": specifier })) - ), + )}, Self::InvalidNodeSpecifier(specifier) => (lsp::DiagnosticSeverity::ERROR, format!("Unknown Node built-in module: {}", specifier.path()), None), Self::BareNodeSpecifier(specifier) => (lsp::DiagnosticSeverity::WARNING, format!("\"{}\" is resolved to \"node:{}\". If you want to use a built-in Node module, add a \"node:\" prefix.", specifier, specifier), Some(json!({ "specifier": specifier }))), }; |