diff options
Diffstat (limited to 'support/texlab/crates/diagnostics/src/lib.rs')
-rw-r--r-- | support/texlab/crates/diagnostics/src/lib.rs | 85 |
1 files changed, 5 insertions, 80 deletions
diff --git a/support/texlab/crates/diagnostics/src/lib.rs b/support/texlab/crates/diagnostics/src/lib.rs index d0be31a0ba..e5baf9ebdb 100644 --- a/support/texlab/crates/diagnostics/src/lib.rs +++ b/support/texlab/crates/diagnostics/src/lib.rs @@ -1,88 +1,13 @@ mod build_log; +pub mod chktex; mod citations; mod grammar; mod labels; -pub mod types; -pub(crate) mod util; +mod manager; +mod types; -use std::borrow::Cow; - -use base_db::{Document, Workspace}; -use build_log::BuildErrors; -use citations::CitationErrors; -use grammar::{BibSyntaxErrors, TexSyntaxErrors}; -use labels::LabelErrors; -use rustc_hash::FxHashMap; -use types::Diagnostic; -use url::Url; - -#[derive(Debug, PartialEq, Eq, Clone, Default)] -pub struct DiagnosticBuilder<'db> { - inner: FxHashMap<&'db Url, Vec<Cow<'db, Diagnostic>>>, -} - -impl<'db> DiagnosticBuilder<'db> { - pub fn push(&mut self, uri: &'db Url, diagnostic: Cow<'db, Diagnostic>) { - self.inner.entry(uri).or_default().push(diagnostic); - } - - pub fn push_many( - &mut self, - uri: &'db Url, - diagnostics: impl Iterator<Item = Cow<'db, Diagnostic>>, - ) { - self.inner.entry(uri).or_default().extend(diagnostics); - } - - pub fn iter(&self) -> impl Iterator<Item = (&'db Url, impl Iterator<Item = &Diagnostic>)> { - self.inner - .iter() - .map(|(uri, diagnostics)| (*uri, diagnostics.iter().map(|diag| diag.as_ref()))) - } -} - -pub trait DiagnosticSource { - #[allow(unused_variables)] - fn update(&mut self, workspace: &Workspace, document: &Document) {} - - fn publish<'db>(&'db mut self, workspace: &'db Workspace, builder: &mut DiagnosticBuilder<'db>); -} - -pub struct DiagnosticManager { - sources: Vec<Box<dyn DiagnosticSource>>, -} - -impl Default for DiagnosticManager { - fn default() -> Self { - let sources: Vec<Box<dyn DiagnosticSource>> = vec![ - Box::<TexSyntaxErrors>::default(), - Box::<BibSyntaxErrors>::default(), - Box::<BuildErrors>::default(), - Box::<LabelErrors>::default(), - Box::<CitationErrors>::default(), - ]; - - Self { sources } - } -} - -impl DiagnosticSource for DiagnosticManager { - fn update(&mut self, workspace: &Workspace, document: &Document) { - for source in &mut self.sources { - source.update(workspace, document); - } - } - - fn publish<'db>( - &'db mut self, - workspace: &'db Workspace, - builder: &mut DiagnosticBuilder<'db>, - ) { - for source in &mut self.sources { - source.publish(workspace, builder); - } - } -} +pub use manager::Manager; +pub use types::*; #[cfg(test)] mod tests; |