add a test

This commit is contained in:
Jake Heinz 2021-11-29 10:36:22 +00:00
parent 97105e1288
commit f0bfe310a2
4 changed files with 523 additions and 3 deletions

View file

@ -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);

View file

@ -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,

View file

@ -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);
}
}

View 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,
},
],
),
]