aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/nameres.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-03-16 16:40:41 +0000
committerAleksey Kladov <[email protected]>2019-03-17 09:53:22 +0000
commit6955e392f8c1cd49e769328b14e10b84ede26744 (patch)
tree5eeb4f7f65dd5dcf8bb5c1e3b4ffe5f353b5659d /crates/ra_hir/src/nameres.rs
parentee3cf6172b29a1dc0973800b5a4f97afa5eefd90 (diff)
remove old macro support
Diffstat (limited to 'crates/ra_hir/src/nameres.rs')
-rw-r--r--crates/ra_hir/src/nameres.rs29
1 files changed, 26 insertions, 3 deletions
diff --git a/crates/ra_hir/src/nameres.rs b/crates/ra_hir/src/nameres.rs
index eabaa5691..17602ee6b 100644
--- a/crates/ra_hir/src/nameres.rs
+++ b/crates/ra_hir/src/nameres.rs
@@ -57,7 +57,7 @@ use test_utils::tested_by;
57use crate::{ 57use crate::{
58 ModuleDef, Name, Crate, Module, Problem, 58 ModuleDef, Name, Crate, Module, Problem,
59 PersistentHirDatabase, Path, PathKind, HirFileId, 59 PersistentHirDatabase, Path, PathKind, HirFileId,
60 ids::{SourceItemId, SourceFileItemId}, 60 ids::{SourceItemId, SourceFileItemId, MacroCallId},
61}; 61};
62 62
63pub(crate) use self::raw::{RawItems, ImportId, ImportSourceMap}; 63pub(crate) use self::raw::{RawItems, ImportId, ImportSourceMap};
@@ -76,7 +76,9 @@ pub struct CrateDefMap {
76 extern_prelude: FxHashMap<Name, ModuleDef>, 76 extern_prelude: FxHashMap<Name, ModuleDef>,
77 root: CrateModuleId, 77 root: CrateModuleId,
78 modules: Arena<CrateModuleId, ModuleData>, 78 modules: Arena<CrateModuleId, ModuleData>,
79 public_macros: FxHashMap<Name, mbe::MacroRules>, 79 macros: Arena<CrateMacroId, mbe::MacroRules>,
80 public_macros: FxHashMap<Name, CrateMacroId>,
81 macro_resolutions: FxHashMap<MacroCallId, (Crate, CrateMacroId)>,
80 problems: CrateDefMapProblems, 82 problems: CrateDefMapProblems,
81} 83}
82 84
@@ -87,9 +89,21 @@ impl std::ops::Index<CrateModuleId> for CrateDefMap {
87 } 89 }
88} 90}
89 91
92impl std::ops::Index<CrateMacroId> for CrateDefMap {
93 type Output = mbe::MacroRules;
94 fn index(&self, id: CrateMacroId) -> &mbe::MacroRules {
95 &self.macros[id]
96 }
97}
98
99/// An ID of a macro, **local** to a specific crate
100#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
101pub(crate) struct CrateMacroId(RawId);
102impl_arena_id!(CrateMacroId);
103
90/// An ID of a module, **local** to a specific crate 104/// An ID of a module, **local** to a specific crate
91#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] 105#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
92struct CrateModuleId(RawId); 106pub(crate) struct CrateModuleId(RawId);
93impl_arena_id!(CrateModuleId); 107impl_arena_id!(CrateModuleId);
94 108
95#[derive(Default, Debug, PartialEq, Eq)] 109#[derive(Default, Debug, PartialEq, Eq)]
@@ -192,7 +206,9 @@ impl CrateDefMap {
192 prelude: None, 206 prelude: None,
193 root, 207 root,
194 modules, 208 modules,
209 macros: Arena::default(),
195 public_macros: FxHashMap::default(), 210 public_macros: FxHashMap::default(),
211 macro_resolutions: FxHashMap::default(),
196 problems: CrateDefMapProblems::default(), 212 problems: CrateDefMapProblems::default(),
197 } 213 }
198 }; 214 };
@@ -221,6 +237,13 @@ impl CrateDefMap {
221 &self.extern_prelude 237 &self.extern_prelude
222 } 238 }
223 239
240 pub(crate) fn resolve_macro(
241 &self,
242 macro_call_id: MacroCallId,
243 ) -> Option<(Crate, CrateMacroId)> {
244 self.macro_resolutions.get(&macro_call_id).map(|&it| it)
245 }
246
224 pub(crate) fn find_module_by_source( 247 pub(crate) fn find_module_by_source(
225 &self, 248 &self,
226 file_id: HirFileId, 249 file_id: HirFileId,