summaryrefslogtreecommitdiff
path: root/cli/lsp/diagnostics.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2021-11-12 11:42:04 -0500
committerGitHub <noreply@github.com>2021-11-12 11:42:04 -0500
commit28dbb4a95e569772600ae28ae4fe8b6fa2a4d2af (patch)
tree328904cc938b6c3bb3ce9b63d325115284cb5aed /cli/lsp/diagnostics.rs
parentfdf890a68d3d54d40c766fd78faeccb20bd2e2c6 (diff)
refactor(lsp): prefer using document instead of documents collection (#12720)
Diffstat (limited to 'cli/lsp/diagnostics.rs')
-rw-r--r--cli/lsp/diagnostics.rs85
1 files changed, 52 insertions, 33 deletions
diff --git a/cli/lsp/diagnostics.rs b/cli/lsp/diagnostics.rs
index fdbf8b27b..f14d80cd8 100644
--- a/cli/lsp/diagnostics.rs
+++ b/cli/lsp/diagnostics.rs
@@ -303,20 +303,20 @@ async fn generate_lint_diagnostics(
snapshot: &language_server::StateSnapshot,
collection: Arc<Mutex<DiagnosticCollection>>,
) -> Result<DiagnosticVec, AnyError> {
- let documents = snapshot.documents.clone();
+ let documents = snapshot.documents.documents(true, true);
let workspace_settings = snapshot.config.settings.workspace.clone();
let maybe_lint_config = snapshot.maybe_lint_config.clone();
tokio::task::spawn(async move {
let mut diagnostics_vec = Vec::new();
if workspace_settings.lint {
- for specifier in documents.specifiers(true, true) {
- let version = documents.lsp_version(&specifier);
+ for document in documents {
+ let version = document.maybe_lsp_version();
let current_version = collection
.lock()
.await
- .get_version(&specifier, &DiagnosticSource::DenoLint);
+ .get_version(document.specifier(), &DiagnosticSource::DenoLint);
if version != current_version {
- let diagnostics = match documents.parsed_source(&specifier) {
+ let diagnostics = match document.maybe_parsed_source() {
Some(Ok(parsed_source)) => {
if let Ok(references) = analysis::get_lint_references(
&parsed_source,
@@ -332,11 +332,15 @@ async fn generate_lint_diagnostics(
}
Some(Err(_)) => Vec::new(),
None => {
- error!("Missing file contents for: {}", specifier);
+ error!("Missing file contents for: {}", document.specifier());
Vec::new()
}
};
- diagnostics_vec.push((specifier.clone(), version, diagnostics));
+ diagnostics_vec.push((
+ document.specifier().clone(),
+ version,
+ diagnostics,
+ ));
}
}
}
@@ -356,14 +360,14 @@ async fn generate_ts_diagnostics(
let collection = collection.lock().await;
snapshot
.documents
- .specifiers(true, true)
+ .documents(true, true)
.iter()
- .filter_map(|s| {
- let version = snapshot.documents.lsp_version(s);
+ .filter_map(|d| {
+ let version = d.maybe_lsp_version();
let current_version =
- collection.get_version(s, &DiagnosticSource::TypeScript);
+ collection.get_version(d.specifier(), &DiagnosticSource::TypeScript);
if version != current_version {
- Some(s.clone())
+ Some(d.specifier().clone())
} else {
None
}
@@ -376,7 +380,11 @@ async fn generate_ts_diagnostics(
ts_server.request(snapshot.clone(), req).await?;
for (specifier_str, ts_diagnostics) in ts_diagnostics_map {
let specifier = resolve_url(&specifier_str)?;
- let version = snapshot.documents.lsp_version(&specifier);
+ let version = snapshot
+ .documents
+ .get(&specifier)
+ .map(|d| d.maybe_lsp_version())
+ .flatten();
diagnostics_vec.push((
specifier,
version,
@@ -421,7 +429,18 @@ fn diagnose_dependency(
) {
match resolved {
Some(Ok((specifier, range))) => {
- if !documents.contains_specifier(specifier) {
+ if let Some(doc) = documents.get(specifier) {
+ if let Some(message) = doc.maybe_warning() {
+ diagnostics.push(lsp::Diagnostic {
+ range: documents::to_lsp_range(range),
+ severity: Some(lsp::DiagnosticSeverity::Warning),
+ code: Some(lsp::NumberOrString::String("deno-warn".to_string())),
+ source: Some("deno".to_string()),
+ message,
+ ..Default::default()
+ })
+ }
+ } else {
let (code, message) = match specifier.scheme() {
"file" => (Some(lsp::NumberOrString::String("no-local".to_string())), format!("Unable to load a local module: \"{}\".\n Please check the file path.", specifier)),
"data" => (Some(lsp::NumberOrString::String("no-cache-data".to_string())), "Uncached data URL.".to_string()),
@@ -437,15 +456,6 @@ fn diagnose_dependency(
data: Some(json!({ "specifier": specifier })),
..Default::default()
});
- } else if let Some(message) = documents.maybe_warning(specifier) {
- diagnostics.push(lsp::Diagnostic {
- range: documents::to_lsp_range(range),
- severity: Some(lsp::DiagnosticSeverity::Warning),
- code: Some(lsp::NumberOrString::String("deno-warn".to_string())),
- source: Some("deno".to_string()),
- message,
- ..Default::default()
- })
}
}
Some(Err(err)) => diagnostics.push(lsp::Diagnostic {
@@ -471,18 +481,18 @@ async fn generate_deps_diagnostics(
tokio::task::spawn(async move {
let mut diagnostics_vec = Vec::new();
- for specifier in documents.specifiers(true, true) {
- if !config.specifier_enabled(&specifier) {
+ for document in documents.documents(true, true) {
+ if !config.specifier_enabled(document.specifier()) {
continue;
}
- let version = documents.lsp_version(&specifier);
+ let version = document.maybe_lsp_version();
let current_version = collection
.lock()
.await
- .get_version(&specifier, &DiagnosticSource::Deno);
+ .get_version(document.specifier(), &DiagnosticSource::Deno);
if version != current_version {
let mut diagnostics = Vec::new();
- if let Some(dependencies) = documents.dependencies(&specifier) {
+ if let Some(dependencies) = document.dependencies() {
for (_, dependency) in dependencies {
diagnose_dependency(
&mut diagnostics,
@@ -496,7 +506,11 @@ async fn generate_deps_diagnostics(
);
}
}
- diagnostics_vec.push((specifier.clone(), version, diagnostics));
+ diagnostics_vec.push((
+ document.specifier().clone(),
+ version,
+ diagnostics,
+ ));
}
}
@@ -533,9 +547,14 @@ async fn publish_diagnostics(
diagnostics
.extend(collection.get(&specifier, DiagnosticSource::Deno).cloned());
}
- let uri = specifier.clone();
- let version = snapshot.documents.lsp_version(&specifier);
- client.publish_diagnostics(uri, diagnostics, version).await;
+ let version = snapshot
+ .documents
+ .get(&specifier)
+ .map(|d| d.maybe_lsp_version())
+ .flatten();
+ client
+ .publish_diagnostics(specifier.clone(), diagnostics, version)
+ .await;
}
}
}
@@ -678,7 +697,7 @@ mod tests {
let (snapshot, collection, _) = setup(&[(
"file:///a.ts",
r#"import * as b from "./b.ts";
-
+
let a = "a";
console.log(a);
"#,