Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-view/src/handlers/lsp.rs')
| -rw-r--r-- | helix-view/src/handlers/lsp.rs | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/helix-view/src/handlers/lsp.rs b/helix-view/src/handlers/lsp.rs index bf541929..14e37c15 100644 --- a/helix-view/src/handlers/lsp.rs +++ b/helix-view/src/handlers/lsp.rs @@ -4,6 +4,7 @@ use std::fmt::Display; use crate::editor::Action; use crate::events::DiagnosticsDidChange; use crate::Editor; +use helix_core::diagnostic::DiagnosticProvider; use helix_core::Uri; use helix_lsp::util::generate_transaction_from_edits; use helix_lsp::{lsp, LanguageServerId, OffsetEncoding}; @@ -276,7 +277,7 @@ impl Editor { pub fn handle_lsp_diagnostics( &mut self, - server_id: LanguageServerId, + provider: &DiagnosticProvider, uri: Uri, version: Option<i32>, mut diagnostics: Vec<lsp::Diagnostic>, @@ -309,8 +310,8 @@ impl Editor { .filter(|d| d.source.as_ref() == Some(source)); let old_diagnostics = old_diagnostics .iter() - .filter(|(d, d_server)| { - *d_server == server_id && d.source.as_ref() == Some(source) + .filter(|(d, d_provider)| { + d_provider == provider && d.source.as_ref() == Some(source) }) .map(|(d, _)| d); if new_diagnostics.eq(old_diagnostics) { @@ -319,7 +320,7 @@ impl Editor { } } - let diagnostics = diagnostics.into_iter().map(|d| (d, server_id)); + let diagnostics = diagnostics.into_iter().map(|d| (d, provider.clone())); // Insert the original lsp::Diagnostics here because we may have no open document // for diagnostic message and so we can't calculate the exact position. @@ -328,7 +329,7 @@ impl Editor { Entry::Occupied(o) => { let current_diagnostics = o.into_mut(); // there may entries of other language servers, which is why we can't overwrite the whole entry - current_diagnostics.retain(|(_, lsp_id)| *lsp_id != server_id); + current_diagnostics.retain(|(_, d_provider)| d_provider != provider); current_diagnostics.extend(diagnostics); current_diagnostics // Sort diagnostics first by severity and then by line numbers. @@ -338,12 +339,12 @@ impl Editor { // Sort diagnostics first by severity and then by line numbers. // Note: The `lsp::DiagnosticSeverity` enum is already defined in decreasing order - diagnostics.sort_by_key(|(d, server_id)| (d.severity, d.range.start, *server_id)); + diagnostics.sort_by_key(|(d, provider)| (d.severity, d.range.start, provider.clone())); if let Some(doc) = doc { let diagnostic_of_language_server_and_not_in_unchanged_sources = - |diagnostic: &lsp::Diagnostic, ls_id| { - ls_id == server_id + |diagnostic: &lsp::Diagnostic, d_provider: &DiagnosticProvider| { + d_provider == provider && diagnostic .source .as_ref() @@ -355,7 +356,7 @@ impl Editor { doc, diagnostic_of_language_server_and_not_in_unchanged_sources, ); - doc.replace_diagnostics(diagnostics, &unchanged_diag_sources, Some(server_id)); + doc.replace_diagnostics(diagnostics, &unchanged_diag_sources, Some(provider)); let doc = doc.id(); helix_event::dispatch(DiagnosticsDidChange { editor: self, doc }); |