Skip to content

Commit

Permalink
Handle multiple documents in pull diagnostics event
Browse files Browse the repository at this point in the history
  • Loading branch information
SofusA committed Sep 1, 2024
1 parent 1315749 commit 131f0b3
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 23 deletions.
1 change: 0 additions & 1 deletion helix-term/src/application.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1036,7 +1036,6 @@ impl Application {
}

Ok(MethodCall::WorkspaceDiagnosticRefresh) => {
log::warn!("Sofus refresh");
for document in self.editor.documents() {
let language_server = language_server!();
handlers::diagnostics::pull_diagnostics_for_document(
Expand Down
43 changes: 21 additions & 22 deletions helix-term/src/handlers/diagnostics.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use std::collections::HashMap;
use std::collections::{HashMap, HashSet};
use std::time::Duration;

use helix_core::syntax::LanguageServerFeature;
Expand Down Expand Up @@ -71,12 +71,14 @@ pub(super) fn register_hooks(handlers: &Handlers) {

#[derive(Debug)]
pub(super) struct PullDiagnosticsHandler {
document_id: Option<DocumentId>,
document_ids: HashSet<DocumentId>,
}

impl PullDiagnosticsHandler {
pub fn new() -> PullDiagnosticsHandler {
PullDiagnosticsHandler { document_id: None }
PullDiagnosticsHandler {
document_ids: [].into(),
}
}
}

Expand All @@ -88,29 +90,26 @@ impl helix_event::AsyncHook for PullDiagnosticsHandler {
event: Self::Event,
_: Option<tokio::time::Instant>,
) -> Option<tokio::time::Instant> {
self.document_id = Some(event.document_id);
self.document_ids.insert(event.document_id);
Some(Instant::now() + Duration::from_millis(120))
}

fn finish_debounce(&mut self) {
let document_id = self.document_id;
job::dispatch_blocking(move |editor, _| {
let Some(document_id) = document_id else {
return;
};

let doc = editor.document(document_id);
let Some(doc) = doc else {
return;
};

let language_servers =
doc.language_servers_with_feature(LanguageServerFeature::PullDiagnostics);

for language_server in language_servers {
pull_diagnostics_for_document(doc, language_server);
}
})
for document_id in self.document_ids.clone() {
job::dispatch_blocking(move |editor, _| {
let doc = editor.document(document_id);
let Some(doc) = doc else {
return;
};

let language_servers =
doc.language_servers_with_feature(LanguageServerFeature::PullDiagnostics);

for language_server in language_servers {
pull_diagnostics_for_document(doc, language_server);
}
})
}
}
}

Expand Down

0 comments on commit 131f0b3

Please sign in to comment.