From 70daf02dac2e02098645d0afd0fd9beaacbd08a1 Mon Sep 17 00:00:00 2001 From: Sofus Addington Date: Sat, 17 Aug 2024 19:32:37 +0200 Subject: [PATCH] Diagnostics for open document as blocking event --- helix-term/src/handlers.rs | 4 -- helix-term/src/handlers/diagnostics.rs | 74 ++++++-------------------- helix-view/src/handlers.rs | 1 - 3 files changed, 16 insertions(+), 63 deletions(-) diff --git a/helix-term/src/handlers.rs b/helix-term/src/handlers.rs index b3fd7601f78eb..e77f8ea35e135 100644 --- a/helix-term/src/handlers.rs +++ b/helix-term/src/handlers.rs @@ -14,8 +14,6 @@ use crate::handlers::signature_help::SignatureHelpHandler; pub use completion::trigger_auto_completion; pub use helix_view::handlers::Handlers; -use self::diagnostics::PullDiagnosticsForDocumentsHandler; - mod auto_save; pub mod completion; mod diagnostics; @@ -29,14 +27,12 @@ pub fn setup(config: Arc>) -> Handlers { let auto_save = AutoSaveHandler::new().spawn(); let pull_diagnostics_for_language_servers = PullDiagnosticsForLanguageServersHandler::new().spawn(); - let pull_diagnostics_for_documents = PullDiagnosticsForDocumentsHandler::new().spawn(); let handlers = Handlers { completions, signature_hints, auto_save, pull_diagnostics_for_language_servers, - pull_diagnostics_for_documents, }; completion::register_hooks(&handlers); diff --git a/helix-term/src/handlers/diagnostics.rs b/helix-term/src/handlers/diagnostics.rs index 49ab83da2763e..211dc119f85d5 100644 --- a/helix-term/src/handlers/diagnostics.rs +++ b/helix-term/src/handlers/diagnostics.rs @@ -9,9 +9,7 @@ use helix_lsp::LanguageServerId; use helix_view::document::Mode; use helix_view::events::{DiagnosticsDidChange, DocumentDidChange, DocumentDidOpen}; use helix_view::handlers::diagnostics::DiagnosticEvent; -use helix_view::handlers::lsp::{ - PullDiagnosticsForDocumentsEvent, PullDiagnosticsForLanguageServersEvent, -}; +use helix_view::handlers::lsp::PullDiagnosticsForLanguageServersEvent; use helix_view::handlers::Handlers; use helix_view::{DocumentId, Editor}; use tokio::time::Instant; @@ -54,18 +52,24 @@ pub(super) fn register_hooks(handlers: &Handlers) { Ok(()) }); - let tx = handlers.pull_diagnostics_for_documents.clone(); register_hook!(move |event: &mut DocumentDidOpen<'_>| { if event .doc .has_language_server_with_feature(LanguageServerFeature::PullDiagnostics) { - send_blocking( - &tx, - PullDiagnosticsForDocumentsEvent { - document_id: event.doc.id(), - }, - ); + let document_id = event.doc.id(); + job::dispatch_blocking(move |editor, _| { + let Some(doc) = editor.document_mut(document_id) 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); + } + }) } Ok(()) @@ -84,17 +88,6 @@ impl PullDiagnosticsForLanguageServersHandler { } } } -pub(super) struct PullDiagnosticsForDocumentsHandler { - document_ids: HashSet, -} - -impl PullDiagnosticsForDocumentsHandler { - pub fn new() -> PullDiagnosticsForDocumentsHandler { - PullDiagnosticsForDocumentsHandler { - document_ids: [].into(), - } - } -} impl helix_event::AsyncHook for PullDiagnosticsForLanguageServersHandler { type Event = PullDiagnosticsForLanguageServersEvent; @@ -116,41 +109,6 @@ impl helix_event::AsyncHook for PullDiagnosticsForLanguageServersHandler { } } -impl helix_event::AsyncHook for PullDiagnosticsForDocumentsHandler { - type Event = PullDiagnosticsForDocumentsEvent; - - fn handle_event( - &mut self, - event: Self::Event, - _: Option, - ) -> Option { - self.document_ids.insert(event.document_id); - Some(Instant::now() + Duration::from_millis(50)) - } - - fn finish_debounce(&mut self) { - let document_ids = self.document_ids.clone(); - job::dispatch_blocking(move |editor, _| { - pull_diagnostics_for_documents(editor, document_ids) - }) - } -} - -fn pull_diagnostics_for_documents(editor: &mut Editor, document_ids: HashSet) { - for document_id in document_ids { - let Some(doc) = editor.document_mut(document_id) 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); - } - } -} - fn pull_diagnostic_for_language_servers( editor: &mut Editor, language_server_ids: HashSet, @@ -209,7 +167,7 @@ fn handle_pull_diagnostics_response( response: lsp::DocumentDiagnosticReport, server_id: LanguageServerId, uri: Uri, - document_id: helix_view::DocumentId, + document_id: DocumentId, ) { let Some(doc) = editor.document_mut(document_id) else { return; @@ -263,7 +221,7 @@ fn add_diagnostics_to_editor( fn handle_document_diagnostic_report_kind( editor: &mut Editor, - document_id: helix_view::DocumentId, + document_id: DocumentId, report: Option>, server_id: LanguageServerId, ) { diff --git a/helix-view/src/handlers.rs b/helix-view/src/handlers.rs index 8f1ef4088e164..9ce6abb500f1c 100644 --- a/helix-view/src/handlers.rs +++ b/helix-view/src/handlers.rs @@ -20,7 +20,6 @@ pub struct Handlers { pub signature_hints: Sender, pub auto_save: Sender, pub pull_diagnostics_for_language_servers: Sender, - pub pull_diagnostics_for_documents: Sender, } impl Handlers {