diff options
| -rw-r--r-- | crates/hir/src/symbols.rs | 7 | ||||
| -rw-r--r-- | crates/hir_def/src/item_scope.rs | 4 | ||||
| -rw-r--r-- | crates/ide_db/src/symbol_index.rs | 6 | ||||
| -rw-r--r-- | crates/ide_db/src/test_data/test_symbol_index_collection.txt | 228 |
4 files changed, 127 insertions, 118 deletions
diff --git a/crates/hir/src/symbols.rs b/crates/hir/src/symbols.rs index a84ca0e0a17..858293a345c 100644 --- a/crates/hir/src/symbols.rs +++ b/crates/hir/src/symbols.rs @@ -174,6 +174,13 @@ impl<'a> SymbolCollector<'a> { for const_id in scope.unnamed_consts() { self.collect_from_body(const_id); } + + for (_, id) in scope.legacy_macros() { + let loc = id.lookup(self.db.upcast()); + if loc.container == module_id { + self.push_decl(id, FileSymbolKind::Macro); + } + } } fn collect_from_body(&mut self, body_id: impl Into<DefWithBodyId>) { diff --git a/crates/hir_def/src/item_scope.rs b/crates/hir_def/src/item_scope.rs index dea3b36e6c8..e6fdd41bd86 100644 --- a/crates/hir_def/src/item_scope.rs +++ b/crates/hir_def/src/item_scope.rs @@ -128,9 +128,7 @@ impl ItemScope { } /// Iterate over all legacy textual scoped macros visible at the end of the module - pub(crate) fn legacy_macros<'a>( - &'a self, - ) -> impl Iterator<Item = (&'a Name, MacroRulesId)> + 'a { + pub fn legacy_macros<'a>(&'a self) -> impl Iterator<Item = (&'a Name, MacroRulesId)> + 'a { self.legacy_macros.iter().map(|(name, def)| (name, *def)) } diff --git a/crates/ide_db/src/symbol_index.rs b/crates/ide_db/src/symbol_index.rs index 9697ba24b80..b5979e6b83a 100644 --- a/crates/ide_db/src/symbol_index.rs +++ b/crates/ide_db/src/symbol_index.rs @@ -425,7 +425,11 @@ struct StructInModB; let symbols: Vec<_> = Crate::from(db.test_crate()) .modules(&db) .into_iter() - .map(|module_id| (module_id, SymbolCollector::collect(&db, module_id))) + .map(|module_id| { + let mut symbols = SymbolCollector::collect(&db, module_id); + symbols.sort_by_key(|it| it.name.clone()); + (module_id, symbols) + }) .collect(); expect_file!["./test_data/test_symbol_index_collection.txt"].assert_debug_eq(&symbols); diff --git a/crates/ide_db/src/test_data/test_symbol_index_collection.txt b/crates/ide_db/src/test_data/test_symbol_index_collection.txt index cc51d85da70..2f531ca0c70 100644 --- a/crates/ide_db/src/test_data/test_symbol_index_collection.txt +++ b/crates/ide_db/src/test_data/test_symbol_index_collection.txt @@ -11,31 +11,29 @@ }, [ FileSymbol { - name: "StructFromMacro", + name: "Alias", loc: DeclarationLocation { hir_file_id: HirFileId( - MacroFile( - MacroFile { - macro_call_id: MacroCallId( - 0, - ), - }, + FileId( + FileId( + 0, + ), ), ), ptr: SyntaxNodePtr { - kind: STRUCT, - range: 0..22, + kind: TYPE_ALIAS, + range: 397..417, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 6..21, + range: 402..407, }, }, - kind: Struct, + kind: TypeAlias, container_name: None, }, FileSymbol { - name: "Struct", + name: "CONST", loc: DeclarationLocation { hir_file_id: HirFileId( FileId( @@ -45,19 +43,19 @@ ), ), ptr: SyntaxNodePtr { - kind: STRUCT, - range: 170..184, + kind: CONST, + range: 340..361, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 177..183, + range: 346..351, }, }, - kind: Struct, + kind: Const, container_name: None, }, FileSymbol { - name: "Enum", + name: "CONST_WITH_INNER", loc: DeclarationLocation { hir_file_id: HirFileId( FileId( @@ -67,19 +65,19 @@ ), ), ptr: SyntaxNodePtr { - kind: ENUM, - range: 185..207, + kind: CONST, + range: 520..592, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 190..194, + range: 526..542, }, }, - kind: Enum, + kind: Const, container_name: None, }, FileSymbol { - name: "Union", + name: "Enum", loc: DeclarationLocation { hir_file_id: HirFileId( FileId( @@ -89,19 +87,19 @@ ), ), ptr: SyntaxNodePtr { - kind: UNION, - range: 208..222, + kind: ENUM, + range: 185..207, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 214..219, + range: 190..194, }, }, - kind: Union, + kind: Enum, container_name: None, }, FileSymbol { - name: "Trait", + name: "Macro", loc: DeclarationLocation { hir_file_id: HirFileId( FileId( @@ -111,19 +109,19 @@ ), ), ptr: SyntaxNodePtr { - kind: TRAIT, - range: 261..300, + kind: MACRO_DEF, + range: 153..168, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 267..272, + range: 159..164, }, }, - kind: Trait, + kind: Macro, container_name: None, }, FileSymbol { - name: "trait_fn", + name: "STATIC", loc: DeclarationLocation { hir_file_id: HirFileId( FileId( @@ -133,21 +131,19 @@ ), ), ptr: SyntaxNodePtr { - kind: FN, - range: 279..298, + kind: STATIC, + range: 362..396, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 282..290, + range: 369..375, }, }, - kind: Function, - container_name: Some( - "Trait", - ), + kind: Static, + container_name: None, }, FileSymbol { - name: "main", + name: "Struct", loc: DeclarationLocation { hir_file_id: HirFileId( FileId( @@ -157,41 +153,43 @@ ), ), ptr: SyntaxNodePtr { - kind: FN, - range: 302..338, + kind: STRUCT, + range: 170..184, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 305..309, + range: 177..183, }, }, - kind: Function, + kind: Struct, container_name: None, }, FileSymbol { - name: "CONST", + name: "StructFromMacro", loc: DeclarationLocation { hir_file_id: HirFileId( - FileId( - FileId( - 0, - ), + MacroFile( + MacroFile { + macro_call_id: MacroCallId( + 0, + ), + }, ), ), ptr: SyntaxNodePtr { - kind: CONST, - range: 340..361, + kind: STRUCT, + range: 0..22, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 346..351, + range: 6..21, }, }, - kind: Const, + kind: Struct, container_name: None, }, FileSymbol { - name: "STATIC", + name: "StructInFn", loc: DeclarationLocation { hir_file_id: HirFileId( FileId( @@ -201,19 +199,21 @@ ), ), ptr: SyntaxNodePtr { - kind: STATIC, - range: 362..396, + kind: STRUCT, + range: 318..336, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 369..375, + range: 325..335, }, }, - kind: Static, - container_name: None, + kind: Struct, + container_name: Some( + "main", + ), }, FileSymbol { - name: "Alias", + name: "StructInNamedConst", loc: DeclarationLocation { hir_file_id: HirFileId( FileId( @@ -223,19 +223,21 @@ ), ), ptr: SyntaxNodePtr { - kind: TYPE_ALIAS, - range: 397..417, + kind: STRUCT, + range: 555..581, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 402..407, + range: 562..580, }, }, - kind: TypeAlias, - container_name: None, + kind: Struct, + container_name: Some( + "CONST_WITH_INNER", + ), }, FileSymbol { - name: "a_mod", + name: "StructInUnnamedConst", loc: DeclarationLocation { hir_file_id: HirFileId( FileId( @@ -245,19 +247,19 @@ ), ), ptr: SyntaxNodePtr { - kind: MODULE, - range: 419..457, + kind: STRUCT, + range: 479..507, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 423..428, + range: 486..506, }, }, - kind: Module, + kind: Struct, container_name: None, }, FileSymbol { - name: "CONST_WITH_INNER", + name: "Trait", loc: DeclarationLocation { hir_file_id: HirFileId( FileId( @@ -267,19 +269,19 @@ ), ), ptr: SyntaxNodePtr { - kind: CONST, - range: 520..592, + kind: TRAIT, + range: 261..300, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 526..542, + range: 267..272, }, }, - kind: Const, + kind: Trait, container_name: None, }, FileSymbol { - name: "b_mod", + name: "Union", loc: DeclarationLocation { hir_file_id: HirFileId( FileId( @@ -289,19 +291,19 @@ ), ), ptr: SyntaxNodePtr { - kind: MODULE, - range: 594..604, + kind: UNION, + range: 208..222, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 598..603, + range: 214..219, }, }, - kind: Module, + kind: Union, container_name: None, }, FileSymbol { - name: "impl_fn", + name: "a_mod", loc: DeclarationLocation { hir_file_id: HirFileId( FileId( @@ -311,19 +313,19 @@ ), ), ptr: SyntaxNodePtr { - kind: FN, - range: 242..257, + kind: MODULE, + range: 419..457, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 245..252, + range: 423..428, }, }, - kind: Function, + kind: Module, container_name: None, }, FileSymbol { - name: "macro_rules_macro", + name: "b_mod", loc: DeclarationLocation { hir_file_id: HirFileId( FileId( @@ -333,15 +335,15 @@ ), ), ptr: SyntaxNodePtr { - kind: MACRO_RULES, - range: 1..48, + kind: MODULE, + range: 594..604, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 14..31, + range: 598..603, }, }, - kind: Macro, + kind: Module, container_name: None, }, FileSymbol { @@ -367,7 +369,7 @@ container_name: None, }, FileSymbol { - name: "Macro", + name: "impl_fn", loc: DeclarationLocation { hir_file_id: HirFileId( FileId( @@ -377,19 +379,19 @@ ), ), ptr: SyntaxNodePtr { - kind: MACRO_DEF, - range: 153..168, + kind: FN, + range: 242..257, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 159..164, + range: 245..252, }, }, - kind: Macro, + kind: Function, container_name: None, }, FileSymbol { - name: "StructInUnnamedConst", + name: "macro_rules_macro", loc: DeclarationLocation { hir_file_id: HirFileId( FileId( @@ -399,19 +401,19 @@ ), ), ptr: SyntaxNodePtr { - kind: STRUCT, - range: 479..507, + kind: MACRO_RULES, + range: 1..48, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 486..506, + range: 14..31, }, }, - kind: Struct, + kind: Macro, container_name: None, }, FileSymbol { - name: "StructInNamedConst", + name: "main", loc: DeclarationLocation { hir_file_id: HirFileId( FileId( @@ -421,21 +423,19 @@ ), ), ptr: SyntaxNodePtr { - kind: STRUCT, - range: 555..581, + kind: FN, + range: 302..338, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 562..580, + range: 305..309, }, }, - kind: Struct, - container_name: Some( - "CONST_WITH_INNER", - ), + kind: Function, + container_name: None, }, FileSymbol { - name: "StructInFn", + name: "trait_fn", loc: DeclarationLocation { hir_file_id: HirFileId( FileId( @@ -445,17 +445,17 @@ ), ), ptr: SyntaxNodePtr { - kind: STRUCT, - range: 318..336, + kind: FN, + range: 279..298, }, name_ptr: SyntaxNodePtr { kind: NAME, - range: 325..335, + range: 282..290, }, }, - kind: Struct, + kind: Function, container_name: Some( - "main", + "Trait", ), }, ], |
