Auto merge of #16847 - HKalbasi:test-explorer, r=HKalbasi

Distinguish integration tests from crates in test explorer

Fix part of #16827
This commit is contained in:
bors 2024-03-15 14:25:53 +00:00
commit d7ec7a5441
2 changed files with 31 additions and 13 deletions

View File

@ -11,7 +11,7 @@
#[derive(Debug)] #[derive(Debug)]
pub enum TestItemKind { pub enum TestItemKind {
Crate, Crate(CrateId),
Module, Module,
Function, Function,
} }
@ -32,15 +32,17 @@ pub(crate) fn discover_test_roots(db: &RootDatabase) -> Vec<TestItem> {
crate_graph crate_graph
.iter() .iter()
.filter(|&id| crate_graph[id].origin.is_local()) .filter(|&id| crate_graph[id].origin.is_local())
.filter_map(|id| Some(crate_graph[id].display_name.as_ref()?.to_string())) .filter_map(|id| {
.map(|id| TestItem { let test_id = crate_graph[id].display_name.as_ref()?.to_string();
kind: TestItemKind::Crate, Some(TestItem {
label: id.clone(), kind: TestItemKind::Crate(id),
id, label: test_id.clone(),
parent: None, id: test_id,
file: None, parent: None,
text_range: None, file: None,
runnable: None, text_range: None,
runnable: None,
})
}) })
.collect() .collect()
} }
@ -118,12 +120,13 @@ pub(crate) fn discover_tests_in_crate(db: &RootDatabase, crate_id: CrateId) -> V
let Some(crate_test_id) = &crate_graph[crate_id].display_name else { let Some(crate_test_id) = &crate_graph[crate_id].display_name else {
return vec![]; return vec![];
}; };
let kind = TestItemKind::Crate(crate_id);
let crate_test_id = crate_test_id.to_string(); let crate_test_id = crate_test_id.to_string();
let crate_id: Crate = crate_id.into(); let crate_id: Crate = crate_id.into();
let module = crate_id.root_module(); let module = crate_id.root_module();
let mut r = vec![TestItem { let mut r = vec![TestItem {
id: crate_test_id.clone(), id: crate_test_id.clone(),
kind: TestItemKind::Crate, kind,
label: crate_test_id.clone(), label: crate_test_id.clone(),
parent: None, parent: None,
file: None, file: None,

View File

@ -1519,13 +1519,28 @@ pub(crate) fn test_item(
id: test_item.id, id: test_item.id,
label: test_item.label, label: test_item.label,
kind: match test_item.kind { kind: match test_item.kind {
ide::TestItemKind::Crate => lsp_ext::TestItemKind::Package, ide::TestItemKind::Crate(id) => 'b: {
let Some((cargo_ws, target)) = snap.cargo_target_for_crate_root(id) else {
break 'b lsp_ext::TestItemKind::Package;
};
let target = &cargo_ws[target];
match target.kind {
project_model::TargetKind::Bin
| project_model::TargetKind::Lib { .. }
| project_model::TargetKind::Example
| project_model::TargetKind::BuildScript
| project_model::TargetKind::Other => lsp_ext::TestItemKind::Package,
project_model::TargetKind::Test | project_model::TargetKind::Bench => {
lsp_ext::TestItemKind::Test
}
}
}
ide::TestItemKind::Module => lsp_ext::TestItemKind::Module, ide::TestItemKind::Module => lsp_ext::TestItemKind::Module,
ide::TestItemKind::Function => lsp_ext::TestItemKind::Test, ide::TestItemKind::Function => lsp_ext::TestItemKind::Test,
}, },
can_resolve_children: matches!( can_resolve_children: matches!(
test_item.kind, test_item.kind,
ide::TestItemKind::Crate | ide::TestItemKind::Module ide::TestItemKind::Crate(_) | ide::TestItemKind::Module
), ),
parent: test_item.parent, parent: test_item.parent,
text_document: test_item text_document: test_item