mirror of
https://github.com/zed-industries/zed.git
synced 2024-11-09 21:26:14 +03:00
Start on a test for grouped diagnostics
This commit is contained in:
parent
44e0a00734
commit
2d6285a6e1
@ -694,6 +694,116 @@ async fn test_empty_diagnostic_ranges(mut cx: gpui::TestAppContext) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[gpui::test]
|
||||||
|
async fn test_grouped_diagnostics(mut cx: gpui::TestAppContext) {
|
||||||
|
cx.add_model(|cx| {
|
||||||
|
let text = "
|
||||||
|
fn foo(mut v: Vec<usize>) {
|
||||||
|
for x in &v {
|
||||||
|
v.push(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"
|
||||||
|
.unindent();
|
||||||
|
|
||||||
|
let mut buffer = Buffer::new(0, text, cx);
|
||||||
|
buffer.set_language(Some(Arc::new(rust_lang())), None, cx);
|
||||||
|
let diagnostics = vec![
|
||||||
|
lsp::Diagnostic {
|
||||||
|
range: lsp::Range::new(lsp::Position::new(1, 8), lsp::Position::new(1, 9)),
|
||||||
|
severity: Some(DiagnosticSeverity::WARNING),
|
||||||
|
message: "unused variable: `x`\n`#[warn(unused_variables)]` on by default"
|
||||||
|
.to_string(),
|
||||||
|
related_information: Some(vec![lsp::DiagnosticRelatedInformation {
|
||||||
|
location: lsp::Location {
|
||||||
|
uri: lsp::Url::from_file_path("/example.rs").unwrap(),
|
||||||
|
range: lsp::Range::new(lsp::Position::new(1, 8), lsp::Position::new(1, 9)),
|
||||||
|
},
|
||||||
|
message: "if this is intentional, prefix it with an underscore: `_x`"
|
||||||
|
.to_string(),
|
||||||
|
}]),
|
||||||
|
..Default::default()
|
||||||
|
},
|
||||||
|
lsp::Diagnostic {
|
||||||
|
range: lsp::Range::new(lsp::Position::new(1, 8), lsp::Position::new(1, 9)),
|
||||||
|
severity: Some(DiagnosticSeverity::HINT),
|
||||||
|
message: "if this is intentional, prefix it with an underscore: `_x`".to_string(),
|
||||||
|
related_information: Some(vec![lsp::DiagnosticRelatedInformation {
|
||||||
|
location: lsp::Location {
|
||||||
|
uri: lsp::Url::from_file_path("/example.rs").unwrap(),
|
||||||
|
range: lsp::Range::new(lsp::Position::new(1, 8), lsp::Position::new(1, 9)),
|
||||||
|
},
|
||||||
|
message: "original diagnostic".to_string(),
|
||||||
|
}]),
|
||||||
|
..Default::default()
|
||||||
|
},
|
||||||
|
lsp::Diagnostic {
|
||||||
|
range: lsp::Range::new( lsp::Position::new(2, 8), lsp::Position::new(2, 17)),
|
||||||
|
severity: Some(DiagnosticSeverity::ERROR),
|
||||||
|
message: "cannot borrow `v` as mutable because it is also borrowed as immutable\nmutable borrow occurs here".to_string(),
|
||||||
|
related_information: Some(
|
||||||
|
vec![
|
||||||
|
lsp::DiagnosticRelatedInformation {
|
||||||
|
location: lsp::Location {
|
||||||
|
uri: lsp::Url::from_file_path("/example.rs").unwrap(),
|
||||||
|
range: lsp::Range::new(lsp::Position::new( 1, 13, ), lsp::Position::new(1, 15)),
|
||||||
|
},
|
||||||
|
message: "immutable borrow occurs here".to_string(),
|
||||||
|
},
|
||||||
|
lsp::DiagnosticRelatedInformation {
|
||||||
|
location: lsp::Location {
|
||||||
|
uri: lsp::Url::from_file_path("/example.rs").unwrap(),
|
||||||
|
range: lsp::Range::new(lsp::Position::new( 1, 13, ), lsp::Position::new(1, 15)),
|
||||||
|
},
|
||||||
|
message: "immutable borrow later used here".to_string(),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
),
|
||||||
|
..Default::default()
|
||||||
|
},
|
||||||
|
lsp::Diagnostic {
|
||||||
|
range: lsp::Range::new( lsp::Position::new(1, 13), lsp::Position::new(1, 15)),
|
||||||
|
severity: Some( DiagnosticSeverity::HINT),
|
||||||
|
message: "immutable borrow occurs here".to_string(),
|
||||||
|
related_information: Some(
|
||||||
|
vec![
|
||||||
|
lsp::DiagnosticRelatedInformation {
|
||||||
|
location: lsp::Location {
|
||||||
|
uri: lsp::Url::from_file_path("/example.rs").unwrap(),
|
||||||
|
range: lsp::Range::new(lsp::Position::new( 2, 8, ), lsp::Position::new(2, 17)),
|
||||||
|
},
|
||||||
|
message: "original diagnostic".to_string(),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
),
|
||||||
|
..Default::default()
|
||||||
|
},
|
||||||
|
lsp::Diagnostic {
|
||||||
|
range: lsp::Range::new( lsp::Position::new(1, 13), lsp::Position::new(1, 15)),
|
||||||
|
severity: Some(DiagnosticSeverity::HINT),
|
||||||
|
message: "immutable borrow later used here".to_string(),
|
||||||
|
related_information: Some(
|
||||||
|
vec![
|
||||||
|
lsp::DiagnosticRelatedInformation {
|
||||||
|
location: lsp::Location {
|
||||||
|
uri: lsp::Url::from_file_path("/example.rs").unwrap(),
|
||||||
|
range: lsp::Range::new(lsp::Position::new( 2, 8, ), lsp::Position::new(2, 17)),
|
||||||
|
},
|
||||||
|
message: "original diagnostic".to_string(),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
),
|
||||||
|
..Default::default()
|
||||||
|
},
|
||||||
|
];
|
||||||
|
buffer.update_diagnostics(None, diagnostics, cx).unwrap();
|
||||||
|
|
||||||
|
// TODO: Group these diagnostics somehow.
|
||||||
|
|
||||||
|
buffer
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
fn chunks_with_diagnostics<T: ToOffset>(
|
fn chunks_with_diagnostics<T: ToOffset>(
|
||||||
buffer: &Buffer,
|
buffer: &Buffer,
|
||||||
range: Range<T>,
|
range: Range<T>,
|
||||||
|
Loading…
Reference in New Issue
Block a user