diff options
Diffstat (limited to 'crates/ra_hir/src/resolve.rs')
-rw-r--r-- | crates/ra_hir/src/resolve.rs | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/crates/ra_hir/src/resolve.rs b/crates/ra_hir/src/resolve.rs index 8b6269407..2a783b61e 100644 --- a/crates/ra_hir/src/resolve.rs +++ b/crates/ra_hir/src/resolve.rs | |||
@@ -1,7 +1,11 @@ | |||
1 | //! Name resolution. | 1 | //! Name resolution. |
2 | use std::sync::Arc; | 2 | use std::sync::Arc; |
3 | 3 | ||
4 | use hir_def::CrateModuleId; | 4 | use hir_def::{ |
5 | name::{self, Name}, | ||
6 | path::{Path, PathKind}, | ||
7 | CrateModuleId, | ||
8 | }; | ||
5 | use rustc_hash::FxHashSet; | 9 | use rustc_hash::FxHashSet; |
6 | 10 | ||
7 | use crate::{ | 11 | use crate::{ |
@@ -13,9 +17,7 @@ use crate::{ | |||
13 | }, | 17 | }, |
14 | generics::GenericParams, | 18 | generics::GenericParams, |
15 | impl_block::ImplBlock, | 19 | impl_block::ImplBlock, |
16 | name::{Name, SELF_PARAM, SELF_TYPE}, | ||
17 | nameres::{CrateDefMap, PerNs}, | 20 | nameres::{CrateDefMap, PerNs}, |
18 | 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, |
20 | Trait, TypeAlias, | 22 | Trait, TypeAlias, |
21 | }; | 23 | }; |
@@ -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| { |