summaryrefslogtreecommitdiff
path: root/cli/lsp/diagnostics.rs
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2024-05-23 17:31:56 +0100
committerGitHub <noreply@github.com>2024-05-23 17:31:56 +0100
commit0a30897925fd8940884231b97474f4ea76e5ed28 (patch)
treeca0081c4eb455e6ac1ebe71b24853b2262f4c63a /cli/lsp/diagnostics.rs
parent143ea4759fa32bcd32ff983caeaec08929a52e80 (diff)
refactor(lsp): determine file referrer for each document (#23867)
Diffstat (limited to 'cli/lsp/diagnostics.rs')
-rw-r--r--cli/lsp/diagnostics.rs25
1 files changed, 19 insertions, 6 deletions
diff --git a/cli/lsp/diagnostics.rs b/cli/lsp/diagnostics.rs
index 8472ad185..5c982b0f3 100644
--- a/cli/lsp/diagnostics.rs
+++ b/cli/lsp/diagnostics.rs
@@ -1294,6 +1294,7 @@ fn diagnose_resolution(
resolution: &Resolution,
is_dynamic: bool,
maybe_assert_type: Option<&str>,
+ referrer_doc: &Document,
import_map: Option<&ImportMap>,
) -> Vec<DenoDiagnostic> {
fn check_redirect_diagnostic(
@@ -1327,13 +1328,21 @@ fn diagnose_resolution(
match resolution {
Resolution::Ok(resolved) => {
let specifier = &resolved.specifier;
- let managed_npm_resolver = snapshot.resolver.maybe_managed_npm_resolver();
- for (_, headers) in snapshot.resolver.redirect_chain_headers(specifier) {
+ let managed_npm_resolver = snapshot
+ .resolver
+ .maybe_managed_npm_resolver(referrer_doc.file_referrer());
+ for (_, headers) in snapshot
+ .resolver
+ .redirect_chain_headers(specifier, referrer_doc.file_referrer())
+ {
if let Some(message) = headers.get("x-deno-warning") {
diagnostics.push(DenoDiagnostic::DenoWarn(message.clone()));
}
}
- if let Some(doc) = snapshot.documents.get(specifier) {
+ if let Some(doc) = snapshot
+ .documents
+ .get_or_load(specifier, referrer_doc.specifier())
+ {
if let Some(headers) = doc.maybe_headers() {
if let Some(message) = headers.get("x-deno-warning") {
diagnostics.push(DenoDiagnostic::DenoWarn(message.clone()));
@@ -1430,10 +1439,11 @@ fn diagnose_resolution(
fn diagnose_dependency(
diagnostics: &mut Vec<lsp::Diagnostic>,
snapshot: &language_server::StateSnapshot,
- referrer: &ModuleSpecifier,
+ referrer_doc: &Document,
dependency_key: &str,
dependency: &deno_graph::Dependency,
) {
+ let referrer = referrer_doc.specifier();
if snapshot.resolver.in_node_modules(referrer) {
return; // ignore, surface typescript errors instead
}
@@ -1488,6 +1498,7 @@ fn diagnose_dependency(
},
dependency.is_dynamic,
dependency.maybe_attribute_type.as_deref(),
+ referrer_doc,
import_map.map(|i| i.as_ref()),
)
.iter()
@@ -1511,6 +1522,7 @@ fn diagnose_dependency(
&dependency.maybe_type,
dependency.is_dynamic,
dependency.maybe_attribute_type.as_deref(),
+ referrer_doc,
import_map.map(|i| i.as_ref()),
)
.iter()
@@ -1543,7 +1555,7 @@ fn generate_deno_diagnostics(
diagnose_dependency(
&mut diagnostics,
snapshot,
- specifier,
+ &document,
dependency_key,
dependency,
);
@@ -1630,11 +1642,12 @@ mod tests {
*version,
*language_id,
(*source).into(),
+ None,
);
}
StateSnapshot {
project_version: 0,
- documents,
+ documents: Arc::new(documents),
assets: Default::default(),
config: Arc::new(config),
resolver,