diff --git a/src/lang/db/mod.rs b/src/lang/db/mod.rs index 94726cba..2662f7a4 100644 --- a/src/lang/db/mod.rs +++ b/src/lang/db/mod.rs @@ -17,6 +17,7 @@ use cairo_lang_starknet::starknet_plugin_suite; use cairo_lang_syntax::node::db::{SyntaxDatabase, SyntaxGroup}; use cairo_lang_test_plugin::test_plugin_suite; use cairo_lang_utils::Upcast; +use salsa::{Database, Durability}; pub use self::semantic::*; pub use self::swapper::*; @@ -90,6 +91,11 @@ impl AnalysisDatabase { CfgSet::from_iter([Cfg::kv("target", "test")]) } + /// Trigger cancellation in any background tasks that might still be running. + pub fn cancel_all(&mut self) { + self.salsa_runtime_mut().synthetic_write(Durability::LOW); + } + /// Shortcut for settings compiler plugins from a [`PluginSuite`]. fn apply_plugin_suite(&mut self, plugin_suite: PluginSuite) { self.set_macro_plugins(plugin_suite.plugins); diff --git a/src/lib.rs b/src/lib.rs index 9bfc0985..5e19d416 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -51,7 +51,6 @@ use cairo_lang_semantic::plugin::PluginSuite; use crossbeam::channel::{Receiver, select_biased}; use lsp_server::Message; use lsp_types::RegistrationParams; -use salsa::{Database, Durability}; use tracing::{debug, error, info}; use crate::lang::lsp::LsProtoGroup; @@ -294,8 +293,7 @@ impl Backend { scheduler, ); - // Trigger cancellation in any background tasks that might still be running. - state.db.salsa_runtime_mut().synthetic_write(Durability::LOW); + state.db.cancel_all(); if let Err(err) = connection.close() { error!("failed to close connection to the language server: {err:?}");