diff --git a/crates/oxc_language_server/src/backend.rs b/crates/oxc_language_server/src/backend.rs index c7ae3fe55cc0f..83ab80f564e1d 100644 --- a/crates/oxc_language_server/src/backend.rs +++ b/crates/oxc_language_server/src/backend.rs @@ -258,8 +258,8 @@ impl LanguageServer for Backend { if !clearing_diagnostics.is_empty() { self.clear_diagnostics(clearing_diagnostics).await; } - - if !removed_registrations.is_empty() + if self.capabilities.get().unwrap().dynamic_watchers + && !removed_registrations.is_empty() && let Err(err) = self.client.unregister_capability(removed_registrations).await { warn!("sending unregisterCapability.didChangeWatchedFiles failed: {err}"); @@ -402,16 +402,19 @@ impl LanguageServer for Backend { if !new_diagnostics.is_empty() { self.publish_all_diagnostics(&new_diagnostics).await; } - if !removing_registrations.is_empty() - && let Err(err) = self.client.unregister_capability(removing_registrations).await - { - warn!("sending unregisterCapability.didChangeWatchedFiles failed: {err}"); - } - if !adding_registrations.is_empty() - && let Err(err) = self.client.register_capability(adding_registrations).await - { - warn!("sending registerCapability.didChangeWatchedFiles failed: {err}"); + if self.capabilities.get().is_some_and(|capabilities| capabilities.dynamic_watchers) { + if !removing_registrations.is_empty() + && let Err(err) = self.client.unregister_capability(removing_registrations).await + { + warn!("sending unregisterCapability.didChangeWatchedFiles failed: {err}"); + } + + if !adding_registrations.is_empty() + && let Err(err) = self.client.register_capability(adding_registrations).await + { + warn!("sending registerCapability.didChangeWatchedFiles failed: {err}"); + } } } diff --git a/crates/oxc_language_server/src/tests.rs b/crates/oxc_language_server/src/tests.rs index ef4c90d7444d5..66af9032f3b8f 100644 --- a/crates/oxc_language_server/src/tests.rs +++ b/crates/oxc_language_server/src/tests.rs @@ -640,7 +640,7 @@ mod test_suite { assert_eq!(execute_command_response.result().unwrap(), &json!(null)); // shutdown request - server.shutdown_with_watchers(4).await; + server.shutdown(4).await; } #[tokio::test] @@ -662,7 +662,7 @@ mod test_suite { assert_eq!(execute_command_response.result().unwrap(), &json!(null)); // shutdown request - server.shutdown_with_watchers(4).await; + server.shutdown(4).await; } #[tokio::test] @@ -683,7 +683,7 @@ mod test_suite { assert_eq!(execute_command_response.id(), &Id::Number(3)); assert_eq!(execute_command_response.result().unwrap(), &json!(null)); - server.shutdown_with_watchers(4).await; + server.shutdown(4).await; } #[tokio::test] @@ -705,7 +705,7 @@ mod test_suite { server.send_request(folders_changed_notification).await; // No direct response expected for notifications, client does not support workspace configuration or watchers - server.shutdown_with_watchers(3).await; + server.shutdown(3).await; } #[tokio::test] @@ -756,7 +756,7 @@ mod test_suite { // workspace configuration request expected, one for new folder response_to_configuration(&mut server, vec![json!(null)]).await; - server.shutdown_with_watchers(4).await; + server.shutdown(4).await; } #[tokio::test] @@ -930,7 +930,7 @@ mod test_suite { server.send_request(did_open(&file, "some text")).await; server.send_request(did_change(&file, "changed text")).await; server.send_request(did_close(&file)).await; - server.shutdown_with_watchers(3).await; + server.shutdown(3).await; } #[tokio::test] @@ -952,7 +952,7 @@ mod test_suite { assert!(response.id() == &Id::Number(3)); assert!(response.result().is_some_and(|result| *result == Value::Null)); - server.shutdown_with_watchers(4).await; + server.shutdown(4).await; } #[tokio::test] @@ -977,6 +977,6 @@ mod test_suite { assert_eq!(actions.len(), 1); assert_eq!(actions[0]["title"], "Code Action title"); - server.shutdown_with_watchers(4).await; + server.shutdown(4).await; } }