diff options
author | Philipp Mildenberger | 2023-03-18 20:10:10 +0000 |
---|---|---|
committer | Philipp Mildenberger | 2023-05-18 19:48:32 +0000 |
commit | 9639f42766a18983dc2298e60bf47a748845bde7 (patch) | |
tree | a7e12b9660dce79fe780b1d90c76caaa517bf5e2 | |
parent | 1122928c2adef0a1c34e90d140c61f84beeb7418 (diff) |
Refactor doc.shown_diagnostics to avoid an extra HashSet
Co-authored-by: Pascal Kuthe <pascal.kuthe@semimod.de>
-rw-r--r-- | helix-view/src/document.rs | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs index 5fec3361..0f800209 100644 --- a/helix-view/src/document.rs +++ b/helix-view/src/document.rs @@ -16,7 +16,7 @@ use serde::de::{self, Deserialize, Deserializer}; use serde::Serialize; use std::borrow::Cow; use std::cell::Cell; -use std::collections::{HashMap, HashSet}; +use std::collections::HashMap; use std::fmt::Display; use std::future::Future; use std::path::{Path, PathBuf}; @@ -1581,13 +1581,16 @@ impl Document { } pub fn shown_diagnostics(&self) -> impl Iterator<Item = &Diagnostic> + DoubleEndedIterator { - let ls_ids: HashSet<_> = self - .language_servers_with_feature(LanguageServerFeature::Diagnostics) - .map(|ls| ls.id()) - .collect(); - self.diagnostics - .iter() - .filter(move |d| ls_ids.contains(&d.language_server_id)) + self.diagnostics.iter().filter(|d| { + self.language_servers() + .find(|ls| ls.id() == d.language_server_id) + .and_then(|ls| { + let config = self.language_config()?; + let features = config.language_servers.get(ls.name())?; + Some(features.has_feature(LanguageServerFeature::Diagnostics)) + }) + == Some(true) + }) } pub fn replace_diagnostics( |