summaryrefslogtreecommitdiff
path: root/support/texlab/src/diagnostics/debouncer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src/diagnostics/debouncer.rs')
-rw-r--r--support/texlab/src/diagnostics/debouncer.rs26
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 {