aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/resolve.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/resolve.rs')
-rw-r--r--crates/ra_hir/src/resolve.rs20
1 files changed, 11 insertions, 9 deletions
diff --git a/crates/ra_hir/src/resolve.rs b/crates/ra_hir/src/resolve.rs
index 8b6269407..b9459552b 100644
--- a/crates/ra_hir/src/resolve.rs
+++ b/crates/ra_hir/src/resolve.rs
@@ -1,7 +1,10 @@
1//! Name resolution. 1//! Name resolution.
2use std::sync::Arc; 2use std::sync::Arc;
3 3
4use hir_def::CrateModuleId; 4use hir_def::{
5 name::{self, Name},
6 CrateModuleId,
7};
5use rustc_hash::FxHashSet; 8use rustc_hash::FxHashSet;
6 9
7use crate::{ 10use crate::{
@@ -13,7 +16,6 @@ use crate::{
13 }, 16 },
14 generics::GenericParams, 17 generics::GenericParams,
15 impl_block::ImplBlock, 18 impl_block::ImplBlock,
16 name::{Name, SELF_PARAM, SELF_TYPE},
17 nameres::{CrateDefMap, PerNs}, 19 nameres::{CrateDefMap, PerNs},
18 path::{Path, PathKind}, 20 path::{Path, PathKind},
19 Adt, BuiltinType, Const, Enum, EnumVariant, Function, MacroDef, ModuleDef, Static, Struct, 21 Adt, BuiltinType, Const, Enum, EnumVariant, Function, MacroDef, ModuleDef, Static, Struct,
@@ -150,13 +152,13 @@ impl Resolver {
150 } 152 }
151 } 153 }
152 Scope::ImplBlockScope(impl_) => { 154 Scope::ImplBlockScope(impl_) => {
153 if first_name == &SELF_TYPE { 155 if first_name == &name::SELF_TYPE {
154 let idx = if path.segments.len() == 1 { None } else { Some(1) }; 156 let idx = if path.segments.len() == 1 { None } else { Some(1) };
155 return Some((TypeNs::SelfType(*impl_), idx)); 157 return Some((TypeNs::SelfType(*impl_), idx));
156 } 158 }
157 } 159 }
158 Scope::AdtScope(adt) => { 160 Scope::AdtScope(adt) => {
159 if first_name == &SELF_TYPE { 161 if first_name == &name::SELF_TYPE {
160 let idx = if path.segments.len() == 1 { None } else { Some(1) }; 162 let idx = if path.segments.len() == 1 { None } else { Some(1) };
161 return Some((TypeNs::AdtSelfType(*adt), idx)); 163 return Some((TypeNs::AdtSelfType(*adt), idx));
162 } 164 }
@@ -205,7 +207,7 @@ impl Resolver {
205 return None; 207 return None;
206 } 208 }
207 let n_segments = path.segments.len(); 209 let n_segments = path.segments.len();
208 let tmp = SELF_PARAM; 210 let tmp = name::SELF_PARAM;
209 let first_name = if path.is_self() { &tmp } else { &path.segments.first()?.name }; 211 let first_name = if path.is_self() { &tmp } else { &path.segments.first()?.name };
210 let skip_to_mod = path.kind != PathKind::Plain && !path.is_self(); 212 let skip_to_mod = path.kind != PathKind::Plain && !path.is_self();
211 for scope in self.scopes.iter().rev() { 213 for scope in self.scopes.iter().rev() {
@@ -241,13 +243,13 @@ impl Resolver {
241 Scope::GenericParams(_) => continue, 243 Scope::GenericParams(_) => continue,
242 244
243 Scope::ImplBlockScope(impl_) if n_segments > 1 => { 245 Scope::ImplBlockScope(impl_) if n_segments > 1 => {
244 if first_name == &SELF_TYPE { 246 if first_name == &name::SELF_TYPE {
245 let ty = TypeNs::SelfType(*impl_); 247 let ty = TypeNs::SelfType(*impl_);
246 return Some(ResolveValueResult::Partial(ty, 1)); 248 return Some(ResolveValueResult::Partial(ty, 1));
247 } 249 }
248 } 250 }
249 Scope::AdtScope(adt) if n_segments > 1 => { 251 Scope::AdtScope(adt) if n_segments > 1 => {
250 if first_name == &SELF_TYPE { 252 if first_name == &name::SELF_TYPE {
251 let ty = TypeNs::AdtSelfType(*adt); 253 let ty = TypeNs::AdtSelfType(*adt);
252 return Some(ResolveValueResult::Partial(ty, 1)); 254 return Some(ResolveValueResult::Partial(ty, 1));
253 } 255 }
@@ -459,10 +461,10 @@ impl Scope {
459 } 461 }
460 } 462 }
461 Scope::ImplBlockScope(i) => { 463 Scope::ImplBlockScope(i) => {
462 f(SELF_TYPE, ScopeDef::ImplSelfType(*i)); 464 f(name::SELF_TYPE, ScopeDef::ImplSelfType(*i));
463 } 465 }
464 Scope::AdtScope(i) => { 466 Scope::AdtScope(i) => {
465 f(SELF_TYPE, ScopeDef::AdtSelfType(*i)); 467 f(name::SELF_TYPE, ScopeDef::AdtSelfType(*i));
466 } 468 }
467 Scope::ExprScope(e) => { 469 Scope::ExprScope(e) => {
468 e.expr_scopes.entries(e.scope_id).iter().for_each(|e| { 470 e.expr_scopes.entries(e.scope_id).iter().for_each(|e| {