mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-02 22:54:58 +00:00
add a test
This commit is contained in:
parent
97105e1288
commit
f0bfe310a2
4 changed files with 523 additions and 3 deletions
|
@ -18,8 +18,8 @@ use crate::{
|
||||||
pub const WORKSPACE: SourceRootId = SourceRootId(0);
|
pub const WORKSPACE: SourceRootId = SourceRootId(0);
|
||||||
|
|
||||||
pub trait WithFixture: Default + SourceDatabaseExt + 'static {
|
pub trait WithFixture: Default + SourceDatabaseExt + 'static {
|
||||||
fn with_single_file(text: &str) -> (Self, FileId) {
|
fn with_single_file(ra_fixture: &str) -> (Self, FileId) {
|
||||||
let fixture = ChangeFixture::parse(text);
|
let fixture = ChangeFixture::parse(ra_fixture);
|
||||||
let mut db = Self::default();
|
let mut db = Self::default();
|
||||||
fixture.change.apply(&mut db);
|
fixture.change.apply(&mut db);
|
||||||
assert_eq!(fixture.files.len(), 1);
|
assert_eq!(fixture.files.len(), 1);
|
||||||
|
|
|
@ -103,7 +103,6 @@ pub use {
|
||||||
hir_def::{
|
hir_def::{
|
||||||
adt::StructKind,
|
adt::StructKind,
|
||||||
attr::{Attr, Attrs, AttrsWithOwner, Documentation},
|
attr::{Attr, Attrs, AttrsWithOwner, Documentation},
|
||||||
data::TraitData,
|
|
||||||
find_path::PrefixKind,
|
find_path::PrefixKind,
|
||||||
import_map,
|
import_map,
|
||||||
item_scope::ItemScope,
|
item_scope::ItemScope,
|
||||||
|
|
|
@ -710,3 +710,67 @@ impl<'a> SymbolCollector<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
|
||||||
|
use base_db::fixture::WithFixture;
|
||||||
|
use expect_test::expect_file;
|
||||||
|
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_symbol_index_collection() {
|
||||||
|
let (db, _) = RootDatabase::with_many_files(
|
||||||
|
r#"
|
||||||
|
//- /main.rs
|
||||||
|
|
||||||
|
macro_rules! macro_rules_macro {
|
||||||
|
() => {}
|
||||||
|
};
|
||||||
|
|
||||||
|
macro Macro { }
|
||||||
|
|
||||||
|
struct Struct;
|
||||||
|
enum Enum {
|
||||||
|
A, B
|
||||||
|
}
|
||||||
|
union Union {}
|
||||||
|
|
||||||
|
impl Struct {
|
||||||
|
fn impl_fn() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
trait Trait {
|
||||||
|
fn trait_fn(&self);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
struct StructInFn;
|
||||||
|
}
|
||||||
|
|
||||||
|
const CONST: u32 = 1;
|
||||||
|
static STATIC: &'static str = "2";
|
||||||
|
type Alias = Struct;
|
||||||
|
|
||||||
|
mod a_mod {
|
||||||
|
struct StructInModA;
|
||||||
|
}
|
||||||
|
|
||||||
|
mod b_mod;
|
||||||
|
|
||||||
|
//- /b_mod.rs
|
||||||
|
struct StructInModB;
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
|
||||||
|
let symbols: Vec<_> = module_ids_for_crate(db.upcast(), db.test_crate())
|
||||||
|
.into_iter()
|
||||||
|
.map(|module_id| {
|
||||||
|
(module_id, SymbolCollector::collect(&db as &dyn SymbolsDatabase, module_id))
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
expect_file!["./test_data/test_symbol_index_collection.txt"].assert_debug_eq(&symbols);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
457
crates/ide_db/src/test_data/test_symbol_index_collection.txt
Normal file
457
crates/ide_db/src/test_data/test_symbol_index_collection.txt
Normal file
|
@ -0,0 +1,457 @@
|
||||||
|
[
|
||||||
|
(
|
||||||
|
ModuleId {
|
||||||
|
krate: CrateId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
block: None,
|
||||||
|
local_id: Idx::<ModuleData>(0),
|
||||||
|
},
|
||||||
|
[
|
||||||
|
FileSymbol {
|
||||||
|
name: "Struct",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 68..82,
|
||||||
|
kind: STRUCT,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 75..81,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: Struct,
|
||||||
|
container_name: None,
|
||||||
|
},
|
||||||
|
FileSymbol {
|
||||||
|
name: "Enum",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 83..105,
|
||||||
|
kind: ENUM,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 88..92,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: Enum,
|
||||||
|
container_name: None,
|
||||||
|
},
|
||||||
|
FileSymbol {
|
||||||
|
name: "Union",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 106..120,
|
||||||
|
kind: UNION,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 112..117,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: Union,
|
||||||
|
container_name: None,
|
||||||
|
},
|
||||||
|
FileSymbol {
|
||||||
|
name: "Trait",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 159..198,
|
||||||
|
kind: TRAIT,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 165..170,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: Trait,
|
||||||
|
container_name: None,
|
||||||
|
},
|
||||||
|
FileSymbol {
|
||||||
|
name: "trait_fn",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 177..196,
|
||||||
|
kind: FN,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 180..188,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: Function,
|
||||||
|
container_name: Some(
|
||||||
|
"Trait",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
FileSymbol {
|
||||||
|
name: "main",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 200..236,
|
||||||
|
kind: FN,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 203..207,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: Function,
|
||||||
|
container_name: None,
|
||||||
|
},
|
||||||
|
FileSymbol {
|
||||||
|
name: "proc_macro",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 238..270,
|
||||||
|
kind: FN,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 255..265,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: Function,
|
||||||
|
container_name: None,
|
||||||
|
},
|
||||||
|
FileSymbol {
|
||||||
|
name: "CONST",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 272..293,
|
||||||
|
kind: CONST,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 278..283,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: Const,
|
||||||
|
container_name: None,
|
||||||
|
},
|
||||||
|
FileSymbol {
|
||||||
|
name: "STATIC",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 294..328,
|
||||||
|
kind: STATIC,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 301..307,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: Static,
|
||||||
|
container_name: None,
|
||||||
|
},
|
||||||
|
FileSymbol {
|
||||||
|
name: "Alias",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 329..349,
|
||||||
|
kind: TYPE_ALIAS,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 334..339,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: TypeAlias,
|
||||||
|
container_name: None,
|
||||||
|
},
|
||||||
|
FileSymbol {
|
||||||
|
name: "a_mod",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 351..389,
|
||||||
|
kind: MODULE,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 355..360,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: Module,
|
||||||
|
container_name: None,
|
||||||
|
},
|
||||||
|
FileSymbol {
|
||||||
|
name: "b_mod",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 391..401,
|
||||||
|
kind: MODULE,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 395..400,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: Module,
|
||||||
|
container_name: None,
|
||||||
|
},
|
||||||
|
FileSymbol {
|
||||||
|
name: "impl_fn",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 140..155,
|
||||||
|
kind: FN,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 143..150,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: Function,
|
||||||
|
container_name: None,
|
||||||
|
},
|
||||||
|
FileSymbol {
|
||||||
|
name: "macro_rules_macro",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 1..48,
|
||||||
|
kind: MACRO_RULES,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 14..31,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: Macro,
|
||||||
|
container_name: None,
|
||||||
|
},
|
||||||
|
FileSymbol {
|
||||||
|
name: "Macro",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 51..66,
|
||||||
|
kind: MACRO_DEF,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 57..62,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: Macro,
|
||||||
|
container_name: None,
|
||||||
|
},
|
||||||
|
FileSymbol {
|
||||||
|
name: "proc_macro",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 238..270,
|
||||||
|
kind: FN,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 255..265,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: Macro,
|
||||||
|
container_name: None,
|
||||||
|
},
|
||||||
|
FileSymbol {
|
||||||
|
name: "StructInFn",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 216..234,
|
||||||
|
kind: STRUCT,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 223..233,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: Struct,
|
||||||
|
container_name: Some(
|
||||||
|
"main",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
ModuleId {
|
||||||
|
krate: CrateId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
block: None,
|
||||||
|
local_id: Idx::<ModuleData>(1),
|
||||||
|
},
|
||||||
|
[
|
||||||
|
FileSymbol {
|
||||||
|
name: "StructInModA",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 367..387,
|
||||||
|
kind: STRUCT,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 374..386,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: Struct,
|
||||||
|
container_name: None,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
ModuleId {
|
||||||
|
krate: CrateId(
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
block: None,
|
||||||
|
local_id: Idx::<ModuleData>(2),
|
||||||
|
},
|
||||||
|
[
|
||||||
|
FileSymbol {
|
||||||
|
name: "StructInModB",
|
||||||
|
loc: DeclarationLocation {
|
||||||
|
hir_file_id: HirFileId(
|
||||||
|
FileId(
|
||||||
|
FileId(
|
||||||
|
1,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ptr: SyntaxNodePtr {
|
||||||
|
range: 0..20,
|
||||||
|
kind: STRUCT,
|
||||||
|
},
|
||||||
|
name_ptr: SyntaxNodePtr {
|
||||||
|
range: 7..19,
|
||||||
|
kind: NAME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
kind: Struct,
|
||||||
|
container_name: None,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
Loading…
Add table
Add a link
Reference in a new issue