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 trait WithFixture: Default + SourceDatabaseExt + 'static {
|
||||
fn with_single_file(text: &str) -> (Self, FileId) {
|
||||
let fixture = ChangeFixture::parse(text);
|
||||
fn with_single_file(ra_fixture: &str) -> (Self, FileId) {
|
||||
let fixture = ChangeFixture::parse(ra_fixture);
|
||||
let mut db = Self::default();
|
||||
fixture.change.apply(&mut db);
|
||||
assert_eq!(fixture.files.len(), 1);
|
||||
|
|
|
@ -103,7 +103,6 @@ pub use {
|
|||
hir_def::{
|
||||
adt::StructKind,
|
||||
attr::{Attr, Attrs, AttrsWithOwner, Documentation},
|
||||
data::TraitData,
|
||||
find_path::PrefixKind,
|
||||
import_map,
|
||||
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