aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/nameres.rs
diff options
context:
space:
mode:
authoruHOOCCOOHu <[email protected]>2019-09-06 17:55:58 +0100
committeruHOOCCOOHu <[email protected]>2019-09-08 18:33:28 +0100
commite0f305a6bf710f64f789f909da93a8c362823b67 (patch)
treec34e3c7e8973c5a7137d1e0cd06ce9903f67b710 /crates/ra_hir/src/nameres.rs
parent07e3976f426aaab93bfd3056374ec6ed32ffb255 (diff)
Support textual scoped macros
Diffstat (limited to 'crates/ra_hir/src/nameres.rs')
-rw-r--r--crates/ra_hir/src/nameres.rs5
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 {
139pub struct ModuleScope { 139pub 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
144static BUILTIN_SCOPE: Lazy<FxHashMap<Name, Resolution>> = Lazy::new(|| { 145static 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
176type ItemOrMacro = Either<PerNs<ModuleDef>, MacroDef>; 181type ItemOrMacro = Either<PerNs<ModuleDef>, MacroDef>;