summaryrefslogtreecommitdiff
path: root/cli/lsp/diagnostics.rs
diff options
context:
space:
mode:
authorHasanAlrimawi <141642411+HasanAlrimawi@users.noreply.github.com>2024-07-24 18:12:42 +0300
committerGitHub <noreply@github.com>2024-07-24 16:12:42 +0100
commitfcd9bbe8eeec7d418b47544b6699e405c4d83826 (patch)
tree83ca484d97598cc2f427444fac4a85da801d2aa2 /cli/lsp/diagnostics.rs
parent199a8ca4c5a8c5b2a060ef6a8912766a6a98d0b7 (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.rs21
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 }))),
};