@@ -16,7 +16,7 @@ use serde::de::{self, Deserialize, Deserializer};
1616use serde::Serialize;
1717use std::borrow::Cow;
1818use std::cell::Cell;
19−use std::collections::{HashMap, HashSet};
19+use std::collections::HashMap;
2020use std::fmt::Display;
2121use std::future::Future;
2222use std::path::{Path, PathBuf};
@@ -1581,13 +1581,16 @@ impl Document {
15811581 }
15821582
15831583 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
1589− .iter()
1590− .filter(move |d| ls_ids.contains(&d.language_server_id))
1584+ self.diagnostics.iter().filter(|d| {
1585+ self.language_servers()
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+ })
15911594 }
15921595
15931596 pub fn replace_diagnostics(