From 9639f42766a18983dc2298e60bf47a748845bde7 Mon Sep 17 00:00:00 2001
From: Philipp Mildenberger <philipp@mildenberger.me>
Date: Sat, 18 Mar 2023 21:10:10 +0100
Subject: [PATCH] Refactor doc.shown_diagnostics to avoid an extra HashSet

Co-authored-by: Pascal Kuthe <pascal.kuthe@semimod.de>
---
 helix-view/src/document.rs | 19 +++++++++++--------
 1 file 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(