aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/resolve.rs
diff options
context:
space:
mode:
authoruHOOCCOOHu <[email protected]>2019-09-09 13:54:02 +0100
committeruHOOCCOOHu <[email protected]>2019-09-09 13:54:02 +0100
commit40f91341595508833d39eb6d97e4ec2ac7f685cb (patch)
tree3022252410b228efb6501e9e8ff6268c910c87cb /crates/ra_hir/src/resolve.rs
parent734a43e95afc97773c234956a95b78caed88f2a3 (diff)
Make macro scope a real name scope
Fix some details about module scoping
Diffstat (limited to 'crates/ra_hir/src/resolve.rs')
-rw-r--r--crates/ra_hir/src/resolve.rs14
1 files changed, 8 insertions, 6 deletions
diff --git a/crates/ra_hir/src/resolve.rs b/crates/ra_hir/src/resolve.rs
index ef75308f6..d9bdd0e22 100644
--- a/crates/ra_hir/src/resolve.rs
+++ b/crates/ra_hir/src/resolve.rs
@@ -6,7 +6,6 @@ use rustc_hash::{FxHashMap, FxHashSet};
6use crate::{ 6use crate::{
7 code_model::Crate, 7 code_model::Crate,
8 db::HirDatabase, 8 db::HirDatabase,
9 either::Either,
10 expr::{ 9 expr::{
11 scope::{ExprScopes, ScopeId}, 10 scope::{ExprScopes, ScopeId},
12 PatId, 11 PatId,
@@ -126,7 +125,7 @@ impl Resolver {
126 let mut resolution = PerNs::none(); 125 let mut resolution = PerNs::none();
127 for scope in self.scopes.iter().rev() { 126 for scope in self.scopes.iter().rev() {
128 resolution = resolution.or(scope.resolve_name(db, name)); 127 resolution = resolution.or(scope.resolve_name(db, name));
129 if resolution.is_both() { 128 if resolution.is_all() {
130 return resolution; 129 return resolution;
131 } 130 }
132 } 131 }
@@ -139,10 +138,7 @@ impl Resolver {
139 path: &Path, 138 path: &Path,
140 ) -> Option<MacroDef> { 139 ) -> Option<MacroDef> {
141 let (item_map, module) = self.module()?; 140 let (item_map, module) = self.module()?;
142 match item_map.resolve_path_with_macro(db, module, path) { 141 item_map.resolve_path(db, module, path).0.get_macros()
143 (Either::B(macro_def), None) => Some(macro_def),
144 _ => None,
145 }
146 } 142 }
147 143
148 /// Returns the resolved path segments 144 /// Returns the resolved path segments
@@ -191,6 +187,9 @@ impl Resolver {
191 if current.values.is_none() { 187 if current.values.is_none() {
192 current.values = res.values; 188 current.values = res.values;
193 } 189 }
190 if current.macros.is_none() {
191 current.macros = res.macros;
192 }
194 }); 193 });
195 } 194 }
196 names 195 names
@@ -313,6 +312,9 @@ impl Scope {
313 m.crate_def_map[m.module_id].scope.entries().for_each(|(name, res)| { 312 m.crate_def_map[m.module_id].scope.entries().for_each(|(name, res)| {
314 f(name.clone(), res.def.map(Resolution::Def)); 313 f(name.clone(), res.def.map(Resolution::Def));
315 }); 314 });
315 m.crate_def_map[m.module_id].scope.legacy_macros().for_each(|(name, macro_)| {
316 f(name.clone(), PerNs::macros(macro_));
317 });
316 m.crate_def_map.extern_prelude().iter().for_each(|(name, def)| { 318 m.crate_def_map.extern_prelude().iter().for_each(|(name, def)| {
317 f(name.clone(), PerNs::types(Resolution::Def(*def))); 319 f(name.clone(), PerNs::types(Resolution::Def(*def)));
318 }); 320 });