blob: fd34125dbe865d90a11ce6c6a510f08e1edb13de (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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));
}
}
}
}
|