summaryrefslogtreecommitdiff
path: root/cli/lsp/diagnostics.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/lsp/diagnostics.rs')
-rw-r--r--cli/lsp/diagnostics.rs53
1 files changed, 44 insertions, 9 deletions
diff --git a/cli/lsp/diagnostics.rs b/cli/lsp/diagnostics.rs
index 4f7e50725..65e170be2 100644
--- a/cli/lsp/diagnostics.rs
+++ b/cli/lsp/diagnostics.rs
@@ -218,6 +218,7 @@ impl DiagnosticsServer {
snapshot.clone(),
&config,
&ts_server,
+ token.clone(),
)
.await
.map_err(|err| {
@@ -495,6 +496,7 @@ async fn generate_ts_diagnostics(
snapshot: Arc<language_server::StateSnapshot>,
config: &ConfigSnapshot,
ts_server: &tsc::TsServer,
+ token: CancellationToken,
) -> Result<DiagnosticVec, AnyError> {
let mut diagnostics_vec = Vec::new();
let specifiers = snapshot
@@ -509,7 +511,9 @@ async fn generate_ts_diagnostics(
.partition::<Vec<_>, _>(|s| config.specifier_enabled(s));
let ts_diagnostics_map: TsDiagnosticsMap = if !enabled_specifiers.is_empty() {
let req = tsc::RequestMethod::GetDiagnostics(enabled_specifiers);
- ts_server.request(snapshot.clone(), req).await?
+ ts_server
+ .request_with_cancellation(snapshot.clone(), req, token)
+ .await?
} else {
Default::default()
};
@@ -781,10 +785,14 @@ let c: number = "a";
)
.await;
assert_eq!(get_diagnostics_for_single(diagnostics).len(), 6);
- let diagnostics =
- generate_ts_diagnostics(snapshot.clone(), &enabled_config, &ts_server)
- .await
- .unwrap();
+ let diagnostics = generate_ts_diagnostics(
+ snapshot.clone(),
+ &enabled_config,
+ &ts_server,
+ Default::default(),
+ )
+ .await
+ .unwrap();
assert_eq!(get_diagnostics_for_single(diagnostics).len(), 4);
let diagnostics = generate_deps_diagnostics(
&snapshot,
@@ -817,10 +825,14 @@ let c: number = "a";
)
.await;
assert_eq!(get_diagnostics_for_single(diagnostics).len(), 0);
- let diagnostics =
- generate_ts_diagnostics(snapshot.clone(), &disabled_config, &ts_server)
- .await
- .unwrap();
+ let diagnostics = generate_ts_diagnostics(
+ snapshot.clone(),
+ &disabled_config,
+ &ts_server,
+ Default::default(),
+ )
+ .await
+ .unwrap();
assert_eq!(get_diagnostics_for_single(diagnostics).len(), 0);
let diagnostics = generate_deps_diagnostics(
&snapshot,
@@ -839,4 +851,27 @@ let c: number = "a";
let (_, _, diagnostics) = diagnostic_vec.into_iter().next().unwrap();
diagnostics
}
+
+ #[tokio::test]
+ async fn test_cancelled_ts_diagnostics_request() {
+ let specifier = ModuleSpecifier::parse("file:///a.ts").unwrap();
+ let (snapshot, _) = setup(&[(
+ "file:///a.ts",
+ r#"export let a: string = 5;"#,
+ 1,
+ LanguageId::TypeScript,
+ )]);
+ let snapshot = Arc::new(snapshot);
+ let ts_server = TsServer::new(Default::default());
+
+ let config = mock_config();
+ let token = CancellationToken::new();
+ token.cancel();
+ let diagnostics =
+ generate_ts_diagnostics(snapshot.clone(), &config, &ts_server, token)
+ .await
+ .unwrap();
+ // should be none because it's cancelled
+ assert_eq!(diagnostics.len(), 0);
+ }
}