on master help sign in
Refactor doc.shown_diagnostics to avoid an extra HashSet
9639f42Philipp Mildenberger
helix-view/src/document.rs+11−8
@@ -16,7 +16,7 @@ use serde::de::{self, Deserialize, Deserializer};
16use serde::Serialize;
16use serde::Serialize;
17use std::borrow::Cow;
17use std::borrow::Cow;
18use std::cell::Cell;
18use std::cell::Cell;
19−use std::collections::{HashMap, HashSet};
19+use std::collections::HashMap;
20use std::fmt::Display;
20use std::fmt::Display;
21use std::future::Future;
21use std::future::Future;
22use std::path::{Path, PathBuf};
22use std::path::{Path, PathBuf};
@@ -1581,13 +1581,16 @@ impl Document {
1581 }
1581 }
1582
1582
1583 pub fn shown_diagnostics(&self) -> impl Iterator<Item = &Diagnostic> + DoubleEndedIterator {
1583 pub fn shown_diagnostics(&self) -> impl Iterator<Item = &Diagnostic> + DoubleEndedIterator {
1584− let ls_ids: HashSet<_> = self
1585− .language_servers_with_feature(LanguageServerFeature::Diagnostics)
1586− .map(|ls| ls.id())
1587− .collect();
1588− self.diagnostics
1584+ self.diagnostics.iter().filter(|d| {
1589− .iter()
1585+ self.language_servers()
1590− .filter(move |d| ls_ids.contains(&d.language_server_id))
1586+ .find(|ls| ls.id() == d.language_server_id)
1587+ .and_then(|ls| {
1588+ let config = self.language_config()?;
1589+ let features = config.language_servers.get(ls.name())?;
1590+ Some(features.has_feature(LanguageServerFeature::Diagnostics))
1591+ })
1592+ == Some(true)
1593+ })
1591 }
1594 }
1592
1595
1593 pub fn replace_diagnostics(
1596 pub fn replace_diagnostics(