about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--crates/hir/src/symbols.rs7
-rw-r--r--crates/hir_def/src/item_scope.rs4
-rw-r--r--crates/ide_db/src/symbol_index.rs6
-rw-r--r--crates/ide_db/src/test_data/test_symbol_index_collection.txt228
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",
                 ),
             },
         ],