mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-12 13:18:47 +00:00
Merge #8613
8613: skip: Add failing local items test r=jonas-schievink a=jonas-schievink This is currently broken due to the way ItemTree stores inner items. This test serves as a reminder until this gets fixed. bors r+ Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
This commit is contained in:
commit
e9fea823a0
3 changed files with 46 additions and 0 deletions
|
@ -40,6 +40,14 @@ fn block_def_map_at(ra_fixture: &str) -> String {
|
||||||
module.def_map(&db).dump(&db)
|
module.def_map(&db).dump(&db)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn check_block_scopes_at(ra_fixture: &str, expect: Expect) {
|
||||||
|
let (db, position) = crate::test_db::TestDB::with_position(ra_fixture);
|
||||||
|
|
||||||
|
let module = db.module_at_position(position);
|
||||||
|
let actual = module.def_map(&db).dump_block_scopes(&db);
|
||||||
|
expect.assert_eq(&actual);
|
||||||
|
}
|
||||||
|
|
||||||
fn check_at(ra_fixture: &str, expect: Expect) {
|
fn check_at(ra_fixture: &str, expect: Expect) {
|
||||||
let actual = block_def_map_at(ra_fixture);
|
let actual = block_def_map_at(ra_fixture);
|
||||||
expect.assert_eq(&actual);
|
expect.assert_eq(&actual);
|
||||||
|
|
|
@ -133,6 +133,30 @@ struct Struct {}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn nested_module_scoping() {
|
||||||
|
check_block_scopes_at(
|
||||||
|
r#"
|
||||||
|
fn f() {
|
||||||
|
mod module {
|
||||||
|
struct Struct {}
|
||||||
|
fn f() {
|
||||||
|
use self::Struct;
|
||||||
|
$0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
expect![[r#"
|
||||||
|
BlockId(1) in ModuleId { krate: CrateId(0), block: Some(BlockId(0)), local_id: Idx::<ModuleData>(0) }
|
||||||
|
BlockId(0) in ModuleId { krate: CrateId(0), block: None, local_id: Idx::<ModuleData>(0) }
|
||||||
|
crate scope
|
||||||
|
"#]],
|
||||||
|
);
|
||||||
|
// FIXME: The module nesting here is wrong!
|
||||||
|
// The first block map should be located in module #1 (`mod module`), not #0 (BlockId(0) root module)
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn legacy_macro_items() {
|
fn legacy_macro_items() {
|
||||||
// Checks that legacy-scoped `macro_rules!` from parent namespaces are resolved and expanded
|
// Checks that legacy-scoped `macro_rules!` from parent namespaces are resolved and expanded
|
||||||
|
|
|
@ -410,6 +410,20 @@ impl DefMap {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn dump_block_scopes(&self, db: &dyn DefDatabase) -> String {
|
||||||
|
let mut buf = String::new();
|
||||||
|
let mut arc;
|
||||||
|
let mut current_map = self;
|
||||||
|
while let Some(block) = ¤t_map.block {
|
||||||
|
format_to!(buf, "{:?} in {:?}\n", block.block, block.parent);
|
||||||
|
arc = block.parent.def_map(db);
|
||||||
|
current_map = &*arc;
|
||||||
|
}
|
||||||
|
|
||||||
|
format_to!(buf, "crate scope\n");
|
||||||
|
buf
|
||||||
|
}
|
||||||
|
|
||||||
fn shrink_to_fit(&mut self) {
|
fn shrink_to_fit(&mut self) {
|
||||||
// Exhaustive match to require handling new fields.
|
// Exhaustive match to require handling new fields.
|
||||||
let Self {
|
let Self {
|
||||||
|
|
Loading…
Reference in a new issue