summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2021-11-23 20:04:27 -0500
committerGitHub <noreply@github.com>2021-11-23 20:04:27 -0500
commit0f90b4665a691e1c7393e5bd116c7f6a0819692e (patch)
treee54819826d383136a1e2aff0ad56f683b6cc0b65 /cli
parentfd6d0e309ca42f4b98ab75039eefb8a8a923fafb (diff)
chore(lsp): fix possible race condition with tests expecting 3 publishDiagnostics messages (#12868)
The tests expect 3 publish notifications. It was possible for less than 3 to occur if two or more tasks set the diagnostics in the collection, exited the lock at the same time, then called `publish_diagnostics`
Diffstat (limited to 'cli')
-rw-r--r--cli/lsp/diagnostics.rs34
1 files changed, 14 insertions, 20 deletions
diff --git a/cli/lsp/diagnostics.rs b/cli/lsp/diagnostics.rs
index 9bf45c5ae..8a0d50ef1 100644
--- a/cli/lsp/diagnostics.rs
+++ b/cli/lsp/diagnostics.rs
@@ -568,10 +568,9 @@ async fn generate_deps_diagnostics(
/// Publishes diagnostics to the client.
async fn publish_diagnostics(
client: &lspower::Client,
- collection: Arc<Mutex<DiagnosticCollection>>,
+ collection: &mut DiagnosticCollection,
snapshot: &language_server::StateSnapshot,
) {
- let mut collection = collection.lock().await;
if let Some(changes) = collection.take_changes() {
for specifier in changes {
let mut diagnostics: Vec<lsp::Diagnostic> =
@@ -625,13 +624,12 @@ async fn update_diagnostics(
error!("Error generating lint diagnostics: {}", err);
})
.unwrap_or_default();
- {
- let mut collection = collection.lock().await;
- for diagnostic_record in diagnostics {
- collection.set(DiagnosticSource::DenoLint, diagnostic_record);
- }
+
+ let mut collection = collection.lock().await;
+ for diagnostic_record in diagnostics {
+ collection.set(DiagnosticSource::DenoLint, diagnostic_record);
}
- publish_diagnostics(client, collection, &snapshot).await;
+ publish_diagnostics(client, &mut collection, &snapshot).await;
snapshot.performance.measure(mark);
};
@@ -647,13 +645,11 @@ async fn update_diagnostics(
error!("Error generating TypeScript diagnostics: {}", err);
})
.unwrap_or_default();
- {
- let mut collection = collection.lock().await;
- for diagnostic_record in diagnostics {
- collection.set(DiagnosticSource::TypeScript, diagnostic_record);
- }
+ let mut collection = collection.lock().await;
+ for diagnostic_record in diagnostics {
+ collection.set(DiagnosticSource::TypeScript, diagnostic_record);
}
- publish_diagnostics(client, collection, &snapshot).await;
+ publish_diagnostics(client, &mut collection, &snapshot).await;
snapshot.performance.measure(mark);
};
@@ -669,13 +665,11 @@ async fn update_diagnostics(
error!("Error generating Deno diagnostics: {}", err);
})
.unwrap_or_default();
- {
- let mut collection = collection.lock().await;
- for diagnostic_record in diagnostics {
- collection.set(DiagnosticSource::Deno, diagnostic_record);
- }
+ let mut collection = collection.lock().await;
+ for diagnostic_record in diagnostics {
+ collection.set(DiagnosticSource::Deno, diagnostic_record);
}
- publish_diagnostics(client, collection, &snapshot).await;
+ publish_diagnostics(client, &mut collection, &snapshot).await;
snapshot.performance.measure(mark);
};