Refactor doc.shown_diagnostics to avoid an extra HashSet

Co-authored-by: Pascal Kuthe <pascal.kuthe@semimod.de>
This commit is contained in:
Philipp Mildenberger 2023-03-18 21:10:10 +01:00
parent 1122928c2a
commit 9639f42766

View File

@ -16,7 +16,7 @@
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 @@ pub fn diagnostics(&self) -> &[Diagnostic] {
}
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(