Allow querying a diagnostic group by its id
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
parent
78bbb83448
commit
2f4d8932dc
3 changed files with 96 additions and 0 deletions
|
@ -354,6 +354,38 @@ impl<T: Clone> AnchorRangeMultimap<T> {
|
||||||
.cursor::<()>()
|
.cursor::<()>()
|
||||||
.map(|entry| (entry.range.start..entry.range.end, &entry.value))
|
.map(|entry| (entry.range.start..entry.range.end, &entry.value))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn filter<'a, O, F>(
|
||||||
|
&'a self,
|
||||||
|
content: Content<'a>,
|
||||||
|
mut f: F,
|
||||||
|
) -> impl 'a + Iterator<Item = (usize, Range<O>, &T)>
|
||||||
|
where
|
||||||
|
O: FromAnchor,
|
||||||
|
F: 'a + FnMut(&'a T) -> bool,
|
||||||
|
{
|
||||||
|
let mut endpoint = Anchor {
|
||||||
|
full_offset: FullOffset(0),
|
||||||
|
bias: Bias::Left,
|
||||||
|
version: self.version.clone(),
|
||||||
|
};
|
||||||
|
self.entries
|
||||||
|
.cursor::<()>()
|
||||||
|
.enumerate()
|
||||||
|
.filter_map(move |(ix, entry)| {
|
||||||
|
if f(&entry.value) {
|
||||||
|
endpoint.full_offset = entry.range.start;
|
||||||
|
endpoint.bias = self.start_bias;
|
||||||
|
let start = O::from_anchor(&endpoint, &content);
|
||||||
|
endpoint.full_offset = entry.range.end;
|
||||||
|
endpoint.bias = self.end_bias;
|
||||||
|
let end = O::from_anchor(&endpoint, &content);
|
||||||
|
Some((ix, start..end, &entry.value))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Clone> sum_tree::Item for AnchorRangeMultimapEntry<T> {
|
impl<T: Clone> sum_tree::Item for AnchorRangeMultimapEntry<T> {
|
||||||
|
|
|
@ -812,6 +812,19 @@ impl Buffer {
|
||||||
.map(move |(_, range, diagnostic)| (range, diagnostic))
|
.map(move |(_, range, diagnostic)| (range, diagnostic))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn diagnostic_group<'a, O>(
|
||||||
|
&'a self,
|
||||||
|
group_id: usize,
|
||||||
|
) -> impl Iterator<Item = (Range<O>, &Diagnostic)> + 'a
|
||||||
|
where
|
||||||
|
O: 'a + FromAnchor,
|
||||||
|
{
|
||||||
|
let content = self.content();
|
||||||
|
self.diagnostics
|
||||||
|
.filter(content, move |diagnostic| diagnostic.group_id == group_id)
|
||||||
|
.map(move |(_, range, diagnostic)| (range, diagnostic))
|
||||||
|
}
|
||||||
|
|
||||||
pub fn diagnostics_update_count(&self) -> usize {
|
pub fn diagnostics_update_count(&self) -> usize {
|
||||||
self.diagnostics_update_count
|
self.diagnostics_update_count
|
||||||
}
|
}
|
||||||
|
|
|
@ -846,6 +846,57 @@ async fn test_grouped_diagnostics(mut cx: gpui::TestAppContext) {
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
buffer.diagnostic_group(0).collect::<Vec<_>>(),
|
||||||
|
&[
|
||||||
|
(
|
||||||
|
Point::new(1, 8)..Point::new(1, 9),
|
||||||
|
&Diagnostic {
|
||||||
|
severity: DiagnosticSeverity::WARNING,
|
||||||
|
message: "error 1".to_string(),
|
||||||
|
group_id: 0
|
||||||
|
}
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Point::new(1, 8)..Point::new(1, 9),
|
||||||
|
&Diagnostic {
|
||||||
|
severity: DiagnosticSeverity::HINT,
|
||||||
|
message: "error 1 hint 1".to_string(),
|
||||||
|
group_id: 0
|
||||||
|
}
|
||||||
|
),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
buffer.diagnostic_group(1).collect::<Vec<_>>(),
|
||||||
|
&[
|
||||||
|
(
|
||||||
|
Point::new(1, 13)..Point::new(1, 15),
|
||||||
|
&Diagnostic {
|
||||||
|
severity: DiagnosticSeverity::HINT,
|
||||||
|
message: "error 2 hint 1".to_string(),
|
||||||
|
group_id: 1
|
||||||
|
}
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Point::new(1, 13)..Point::new(1, 15),
|
||||||
|
&Diagnostic {
|
||||||
|
severity: DiagnosticSeverity::HINT,
|
||||||
|
message: "error 2 hint 2".to_string(),
|
||||||
|
group_id: 1
|
||||||
|
}
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Point::new(2, 8)..Point::new(2, 17),
|
||||||
|
&Diagnostic {
|
||||||
|
severity: DiagnosticSeverity::ERROR,
|
||||||
|
message: "error 2".to_string(),
|
||||||
|
group_id: 1
|
||||||
|
}
|
||||||
|
)
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
buffer
|
buffer
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue