diff options
author | uHOOCCOOHu <[email protected]> | 2019-09-06 17:55:58 +0100 |
---|---|---|
committer | uHOOCCOOHu <[email protected]> | 2019-09-08 18:33:28 +0100 |
commit | e0f305a6bf710f64f789f909da93a8c362823b67 (patch) | |
tree | c34e3c7e8973c5a7137d1e0cd06ce9903f67b710 /crates/ra_hir/src/nameres.rs | |
parent | 07e3976f426aaab93bfd3056374ec6ed32ffb255 (diff) |
Support textual scoped macros
Diffstat (limited to 'crates/ra_hir/src/nameres.rs')
-rw-r--r-- | crates/ra_hir/src/nameres.rs | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/crates/ra_hir/src/nameres.rs b/crates/ra_hir/src/nameres.rs index 7de422128..e6bf0e90c 100644 --- a/crates/ra_hir/src/nameres.rs +++ b/crates/ra_hir/src/nameres.rs | |||
@@ -139,6 +139,7 @@ pub(crate) struct ModuleData { | |||
139 | pub struct ModuleScope { | 139 | pub struct ModuleScope { |
140 | items: FxHashMap<Name, Resolution>, | 140 | items: FxHashMap<Name, Resolution>, |
141 | macros: FxHashMap<Name, MacroDef>, | 141 | macros: FxHashMap<Name, MacroDef>, |
142 | textual_macros: FxHashMap<Name, MacroDef>, | ||
142 | } | 143 | } |
143 | 144 | ||
144 | static BUILTIN_SCOPE: Lazy<FxHashMap<Name, Resolution>> = Lazy::new(|| { | 145 | static BUILTIN_SCOPE: Lazy<FxHashMap<Name, Resolution>> = Lazy::new(|| { |
@@ -164,6 +165,7 @@ impl ModuleScope { | |||
164 | _ => None, | 165 | _ => None, |
165 | }) | 166 | }) |
166 | } | 167 | } |
168 | /// It resolves in module scope. Textual scoped macros are ignored here. | ||
167 | fn get_item_or_macro(&self, name: &Name) -> Option<ItemOrMacro> { | 169 | fn get_item_or_macro(&self, name: &Name) -> Option<ItemOrMacro> { |
168 | match (self.get(name), self.macros.get(name)) { | 170 | match (self.get(name), self.macros.get(name)) { |
169 | (Some(item), _) if !item.def.is_none() => Some(Either::A(item.def)), | 171 | (Some(item), _) if !item.def.is_none() => Some(Either::A(item.def)), |
@@ -171,6 +173,9 @@ impl ModuleScope { | |||
171 | _ => None, | 173 | _ => None, |
172 | } | 174 | } |
173 | } | 175 | } |
176 | fn get_textual_macro(&self, name: &Name) -> Option<MacroDef> { | ||
177 | self.textual_macros.get(name).copied() | ||
178 | } | ||
174 | } | 179 | } |
175 | 180 | ||
176 | type ItemOrMacro = Either<PerNs<ModuleDef>, MacroDef>; | 181 | type ItemOrMacro = Either<PerNs<ModuleDef>, MacroDef>; |