diff options
Diffstat (limited to 'support/texlab/crates/diagnostics/src/util.rs')
-rw-r--r-- | support/texlab/crates/diagnostics/src/util.rs | 28 |
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)); + } + } + } +} |