summaryrefslogtreecommitdiff
path: root/support/texlab/crates/diagnostics/src/util.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/crates/diagnostics/src/util.rs')
-rw-r--r--support/texlab/crates/diagnostics/src/util.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/support/texlab/crates/diagnostics/src/util.rs b/support/texlab/crates/diagnostics/src/util.rs
new file mode 100644
index 0000000000..fd34125dbe
--- /dev/null
+++ b/support/texlab/crates/diagnostics/src/util.rs
@@ -0,0 +1,28 @@
+use std::borrow::Cow;
+
+use base_db::Workspace;
+use rustc_hash::FxHashMap;
+use url::Url;
+
+use crate::{Diagnostic, DiagnosticBuilder, DiagnosticSource};
+
+#[derive(Default)]
+pub struct SimpleDiagnosticSource {
+ pub errors: FxHashMap<Url, Vec<Diagnostic>>,
+}
+
+impl DiagnosticSource for SimpleDiagnosticSource {
+ fn publish<'db>(
+ &'db mut self,
+ workspace: &'db Workspace,
+ builder: &mut DiagnosticBuilder<'db>,
+ ) {
+ self.errors.retain(|uri, _| workspace.lookup(uri).is_some());
+
+ for document in workspace.iter() {
+ if let Some(diagnostics) = self.errors.get(&document.uri) {
+ builder.push_many(&document.uri, diagnostics.iter().map(Cow::Borrowed));
+ }
+ }
+ }
+}