diff options
Diffstat (limited to 'support/texlab/src/diagnostics/debouncer.rs')
-rw-r--r-- | support/texlab/src/diagnostics/debouncer.rs | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/support/texlab/src/diagnostics/debouncer.rs b/support/texlab/src/diagnostics/debouncer.rs index 8c1cb63253..5117cf2fe0 100644 --- a/support/texlab/src/diagnostics/debouncer.rs +++ b/support/texlab/src/diagnostics/debouncer.rs @@ -6,13 +6,14 @@ use std::{ use crossbeam_channel::Sender; use dashmap::DashMap; +use lsp_types::Url; -use crate::{Document, ServerContext, Uri, Workspace}; +use crate::{Document, Workspace}; pub enum DiagnosticsMessage { Analyze { - workspace: Arc<dyn Workspace>, - document: Arc<Document>, + workspace: Workspace, + document: Document, }, Shutdown, } @@ -23,28 +24,25 @@ pub struct DiagnosticsDebouncer { } impl DiagnosticsDebouncer { - pub fn launch<A>(context: Arc<ServerContext>, action: A) -> Self + pub fn launch<A>(action: A) -> Self where - A: Fn(Arc<dyn Workspace>, Arc<Document>) + Send + Clone + 'static, + A: Fn(Workspace, Document) + Send + Clone + 'static, { let (sender, receiver) = crossbeam_channel::unbounded(); let handle = thread::spawn(move || { let pool = threadpool::Builder::new().build(); - let last_task_time_by_uri: Arc<DashMap<Arc<Uri>, Instant>> = Arc::default(); + let last_task_time_by_uri: Arc<DashMap<Arc<Url>, Instant>> = Arc::default(); while let Ok(DiagnosticsMessage::Analyze { workspace, document, }) = receiver.recv() { - let delay = { - context - .options - .read() - .unwrap() - .diagnostics_delay - .unwrap_or(300) - }; + let delay = workspace + .environment + .options + .diagnostics_delay + .unwrap_or(300); if let Some(time) = last_task_time_by_uri.get(&document.uri) { if time.elapsed().as_millis() < delay as u128 { |