mirror of
https://github.com/denoland/deno.git
synced 2025-09-26 20:29:11 +00:00
fix(lsp): remove redirect diagnostic (#28988)
This commit is contained in:
parent
104514b06d
commit
d26be98377
2 changed files with 0 additions and 204 deletions
|
@ -1191,12 +1191,6 @@ pub enum DenoDiagnostic {
|
||||||
NotInstalledNpm(PackageReq, ModuleSpecifier),
|
NotInstalledNpm(PackageReq, ModuleSpecifier),
|
||||||
/// A local module was not found on the local file system.
|
/// A local module was not found on the local file system.
|
||||||
NoLocal(ModuleSpecifier),
|
NoLocal(ModuleSpecifier),
|
||||||
/// The specifier resolved to a remote specifier that was redirected to
|
|
||||||
/// another specifier.
|
|
||||||
Redirect {
|
|
||||||
from: ModuleSpecifier,
|
|
||||||
to: ModuleSpecifier,
|
|
||||||
},
|
|
||||||
/// An error occurred when resolving the specifier string.
|
/// An error occurred when resolving the specifier string.
|
||||||
ResolutionError(deno_graph::ResolutionError),
|
ResolutionError(deno_graph::ResolutionError),
|
||||||
/// Invalid `node:` specifier.
|
/// Invalid `node:` specifier.
|
||||||
|
@ -1216,7 +1210,6 @@ impl DenoDiagnostic {
|
||||||
Self::NotInstalledJsr(_, _) => "not-installed-jsr",
|
Self::NotInstalledJsr(_, _) => "not-installed-jsr",
|
||||||
Self::NotInstalledNpm(_, _) => "not-installed-npm",
|
Self::NotInstalledNpm(_, _) => "not-installed-npm",
|
||||||
Self::NoLocal(_) => "no-local",
|
Self::NoLocal(_) => "no-local",
|
||||||
Self::Redirect { .. } => "redirect",
|
|
||||||
Self::ResolutionError(err) => {
|
Self::ResolutionError(err) => {
|
||||||
if graph_util::get_resolution_error_bare_node_specifier(err).is_some() {
|
if graph_util::get_resolution_error_bare_node_specifier(err).is_some() {
|
||||||
"import-node-prefix-missing"
|
"import-node-prefix-missing"
|
||||||
|
@ -1469,7 +1462,6 @@ impl DenoDiagnostic {
|
||||||
});
|
});
|
||||||
(lsp::DiagnosticSeverity::ERROR, no_local_message(specifier, sloppy_resolution.as_ref().map(|(resolved, sloppy_reason)| sloppy_reason.suggestion_message_for_specifier(resolved))), data)
|
(lsp::DiagnosticSeverity::ERROR, no_local_message(specifier, sloppy_resolution.as_ref().map(|(resolved, sloppy_reason)| sloppy_reason.suggestion_message_for_specifier(resolved))), 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;
|
let mut message;
|
||||||
message = enhanced_resolution_error_message(err);
|
message = enhanced_resolution_error_message(err);
|
||||||
|
@ -1589,32 +1581,6 @@ fn diagnose_resolution(
|
||||||
referrer_module: &DocumentModule,
|
referrer_module: &DocumentModule,
|
||||||
import_map: Option<&ImportMap>,
|
import_map: Option<&ImportMap>,
|
||||||
) -> (Vec<DenoDiagnostic>, Vec<DenoDiagnostic>) {
|
) -> (Vec<DenoDiagnostic>, Vec<DenoDiagnostic>) {
|
||||||
fn check_redirect_diagnostic(
|
|
||||||
specifier: &ModuleSpecifier,
|
|
||||||
module: &DocumentModule,
|
|
||||||
) -> Option<DenoDiagnostic> {
|
|
||||||
// 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" || specifier == module.specifier.as_ref() {
|
|
||||||
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
|
|
||||||
// @ts-types and that's a bit complicated to explain
|
|
||||||
let is_sloppy_import_dts_redirect = module.specifier.scheme() == "file"
|
|
||||||
&& module.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: module.specifier.as_ref().clone(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut diagnostics = vec![];
|
let mut diagnostics = vec![];
|
||||||
let mut deferred_diagnostics = vec![];
|
let mut deferred_diagnostics = vec![];
|
||||||
match resolution {
|
match resolution {
|
||||||
|
@ -1639,10 +1605,6 @@ fn diagnose_resolution(
|
||||||
diagnostics.push(DenoDiagnostic::DenoWarn(message.clone()));
|
diagnostics.push(DenoDiagnostic::DenoWarn(message.clone()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if let Some(diagnostic) = check_redirect_diagnostic(specifier, &module)
|
|
||||||
{
|
|
||||||
diagnostics.push(diagnostic);
|
|
||||||
}
|
|
||||||
if module.media_type == MediaType::Json {
|
if module.media_type == MediaType::Json {
|
||||||
match maybe_assert_type {
|
match maybe_assert_type {
|
||||||
// The module has the correct assertion type, no diagnostic
|
// The module has the correct assertion type, no diagnostic
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
// Copyright 2018-2025 the Deno authors. MIT license.
|
// Copyright 2018-2025 the Deno authors. MIT license.
|
||||||
|
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::str::FromStr;
|
|
||||||
|
|
||||||
use ntest_timeout::timeout;
|
use ntest_timeout::timeout;
|
||||||
use pretty_assertions::assert_eq;
|
use pretty_assertions::assert_eq;
|
||||||
|
@ -10875,171 +10874,6 @@ fn lsp_npmrc() {
|
||||||
client.shutdown();
|
client.shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
#[timeout(300_000)]
|
|
||||||
fn lsp_diagnostics_warn_redirect() {
|
|
||||||
let context = TestContextBuilder::new()
|
|
||||||
.use_http_server()
|
|
||||||
.use_temp_cwd()
|
|
||||||
.build();
|
|
||||||
let mut client = context.new_lsp_command().build();
|
|
||||||
client.initialize_default();
|
|
||||||
client.did_open(
|
|
||||||
json!({
|
|
||||||
"textDocument": {
|
|
||||||
"uri": "file:///a/file.ts",
|
|
||||||
"languageId": "typescript",
|
|
||||||
"version": 1,
|
|
||||||
"text": "import * as a from \"http://127.0.0.1:4545/x_deno_warning.js\";\n\nconsole.log(a)\n",
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
client.write_request(
|
|
||||||
"workspace/executeCommand",
|
|
||||||
json!({
|
|
||||||
"command": "deno.cache",
|
|
||||||
"arguments": [
|
|
||||||
["http://127.0.0.1:4545/x_deno_warning.js"],
|
|
||||||
"file:///a/file.ts",
|
|
||||||
],
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
let diagnostics = client.read_diagnostics();
|
|
||||||
assert_eq!(
|
|
||||||
diagnostics.messages_with_source("deno"),
|
|
||||||
lsp::PublishDiagnosticsParams {
|
|
||||||
uri: lsp::Uri::from_str("file:///a/file.ts").unwrap(),
|
|
||||||
diagnostics: vec![
|
|
||||||
lsp::Diagnostic {
|
|
||||||
range: lsp::Range {
|
|
||||||
start: lsp::Position {
|
|
||||||
line: 0,
|
|
||||||
character: 19
|
|
||||||
},
|
|
||||||
end: lsp::Position {
|
|
||||||
line: 0,
|
|
||||||
character: 60
|
|
||||||
}
|
|
||||||
},
|
|
||||||
severity: Some(lsp::DiagnosticSeverity::WARNING),
|
|
||||||
code: Some(lsp::NumberOrString::String("deno-warn".to_string())),
|
|
||||||
source: Some("deno".to_string()),
|
|
||||||
message: "foobar".to_string(),
|
|
||||||
..Default::default()
|
|
||||||
},
|
|
||||||
lsp::Diagnostic {
|
|
||||||
range: lsp::Range {
|
|
||||||
start: lsp::Position {
|
|
||||||
line: 0,
|
|
||||||
character: 19
|
|
||||||
},
|
|
||||||
end: lsp::Position {
|
|
||||||
line: 0,
|
|
||||||
character: 60
|
|
||||||
}
|
|
||||||
},
|
|
||||||
severity: Some(lsp::DiagnosticSeverity::INFORMATION),
|
|
||||||
code: Some(lsp::NumberOrString::String("redirect".to_string())),
|
|
||||||
source: Some("deno".to_string()),
|
|
||||||
message: "The import of \"http://127.0.0.1:4545/x_deno_warning.js\" was redirected to \"http://127.0.0.1:4545/lsp/x_deno_warning_redirect.js\".".to_string(),
|
|
||||||
data: Some(json!({"specifier": "http://127.0.0.1:4545/x_deno_warning.js", "redirect": "http://127.0.0.1:4545/lsp/x_deno_warning_redirect.js"})),
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
],
|
|
||||||
version: Some(1),
|
|
||||||
}
|
|
||||||
);
|
|
||||||
client.shutdown();
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
#[timeout(300_000)]
|
|
||||||
fn lsp_redirect_quick_fix() {
|
|
||||||
let context = TestContextBuilder::new()
|
|
||||||
.use_http_server()
|
|
||||||
.use_temp_cwd()
|
|
||||||
.build();
|
|
||||||
let mut client = context.new_lsp_command().build();
|
|
||||||
client.initialize_default();
|
|
||||||
client.did_open(
|
|
||||||
json!({
|
|
||||||
"textDocument": {
|
|
||||||
"uri": "file:///a/file.ts",
|
|
||||||
"languageId": "typescript",
|
|
||||||
"version": 1,
|
|
||||||
"text": "import * as a from \"http://127.0.0.1:4545/x_deno_warning.js\";\n\nconsole.log(a)\n",
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
client.write_request(
|
|
||||||
"workspace/executeCommand",
|
|
||||||
json!({
|
|
||||||
"command": "deno.cache",
|
|
||||||
"arguments": [
|
|
||||||
["http://127.0.0.1:4545/x_deno_warning.js"],
|
|
||||||
"file:///a/file.ts",
|
|
||||||
],
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
let diagnostics = client
|
|
||||||
.read_diagnostics()
|
|
||||||
.messages_with_source("deno")
|
|
||||||
.diagnostics;
|
|
||||||
let res = client.write_request(
|
|
||||||
"textDocument/codeAction",
|
|
||||||
json!(json!({
|
|
||||||
"textDocument": {
|
|
||||||
"uri": "file:///a/file.ts"
|
|
||||||
},
|
|
||||||
"range": {
|
|
||||||
"start": { "line": 0, "character": 19 },
|
|
||||||
"end": { "line": 0, "character": 60 }
|
|
||||||
},
|
|
||||||
"context": {
|
|
||||||
"diagnostics": diagnostics,
|
|
||||||
"only": ["quickfix"]
|
|
||||||
}
|
|
||||||
})),
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
res,
|
|
||||||
json!([{
|
|
||||||
"title": "Update specifier to its redirected specifier.",
|
|
||||||
"kind": "quickfix",
|
|
||||||
"diagnostics": [
|
|
||||||
{
|
|
||||||
"range": {
|
|
||||||
"start": { "line": 0, "character": 19 },
|
|
||||||
"end": { "line": 0, "character": 60 }
|
|
||||||
},
|
|
||||||
"severity": 3,
|
|
||||||
"code": "redirect",
|
|
||||||
"source": "deno",
|
|
||||||
"message": "The import of \"http://127.0.0.1:4545/x_deno_warning.js\" was redirected to \"http://127.0.0.1:4545/lsp/x_deno_warning_redirect.js\".",
|
|
||||||
"data": {
|
|
||||||
"specifier": "http://127.0.0.1:4545/x_deno_warning.js",
|
|
||||||
"redirect": "http://127.0.0.1:4545/lsp/x_deno_warning_redirect.js"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"edit": {
|
|
||||||
"changes": {
|
|
||||||
"file:///a/file.ts": [
|
|
||||||
{
|
|
||||||
"range": {
|
|
||||||
"start": { "line": 0, "character": 19 },
|
|
||||||
"end": { "line": 0, "character": 60 }
|
|
||||||
},
|
|
||||||
"newText": "\"http://127.0.0.1:4545/lsp/x_deno_warning_redirect.js\""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}])
|
|
||||||
);
|
|
||||||
client.shutdown();
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[timeout(300_000)]
|
#[timeout(300_000)]
|
||||||
fn lsp_lockfile_redirect_resolution() {
|
fn lsp_lockfile_redirect_resolution() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue