aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/nameres/path_resolution.rs
diff options
context:
space:
mode:
authorEdwin Cheng <[email protected]>2019-12-07 11:20:41 +0000
committerEdwin Cheng <[email protected]>2019-12-07 11:24:15 +0000
commit51f4fb448f1993a20c9527a8e6d301a9202ce35a (patch)
tree112fe280ceeb3d27d79ff79f31aabae170aafd78 /crates/ra_hir_def/src/nameres/path_resolution.rs
parente5997e174666435acd5abb4531f833bd41bbdb00 (diff)
Refactor resolve_imports logic
Diffstat (limited to 'crates/ra_hir_def/src/nameres/path_resolution.rs')
-rw-r--r--crates/ra_hir_def/src/nameres/path_resolution.rs13
1 files changed, 9 insertions, 4 deletions
diff --git a/crates/ra_hir_def/src/nameres/path_resolution.rs b/crates/ra_hir_def/src/nameres/path_resolution.rs
index 42a75226b..aab4b1dd9 100644
--- a/crates/ra_hir_def/src/nameres/path_resolution.rs
+++ b/crates/ra_hir_def/src/nameres/path_resolution.rs
@@ -19,7 +19,7 @@ use crate::{
19 nameres::{BuiltinShadowMode, CrateDefMap}, 19 nameres::{BuiltinShadowMode, CrateDefMap},
20 path::{Path, PathKind}, 20 path::{Path, PathKind},
21 per_ns::PerNs, 21 per_ns::PerNs,
22 AdtId, EnumVariantId, LocalModuleId, ModuleDefId, ModuleId, 22 AdtId, CrateId, EnumVariantId, LocalModuleId, ModuleDefId, ModuleId,
23}; 23};
24 24
25#[derive(Debug, Clone, Copy, PartialEq, Eq)] 25#[derive(Debug, Clone, Copy, PartialEq, Eq)]
@@ -39,19 +39,21 @@ pub(super) struct ResolvePathResult {
39 pub(super) resolved_def: PerNs, 39 pub(super) resolved_def: PerNs,
40 pub(super) segment_index: Option<usize>, 40 pub(super) segment_index: Option<usize>,
41 pub(super) reached_fixedpoint: ReachedFixedPoint, 41 pub(super) reached_fixedpoint: ReachedFixedPoint,
42 pub(super) krate: Option<CrateId>,
42} 43}
43 44
44impl ResolvePathResult { 45impl ResolvePathResult {
45 fn empty(reached_fixedpoint: ReachedFixedPoint) -> ResolvePathResult { 46 fn empty(reached_fixedpoint: ReachedFixedPoint) -> ResolvePathResult {
46 ResolvePathResult::with(PerNs::none(), reached_fixedpoint, None) 47 ResolvePathResult::with(PerNs::none(), reached_fixedpoint, None, None)
47 } 48 }
48 49
49 fn with( 50 fn with(
50 resolved_def: PerNs, 51 resolved_def: PerNs,
51 reached_fixedpoint: ReachedFixedPoint, 52 reached_fixedpoint: ReachedFixedPoint,
52 segment_index: Option<usize>, 53 segment_index: Option<usize>,
54 krate: Option<CrateId>,
53 ) -> ResolvePathResult { 55 ) -> ResolvePathResult {
54 ResolvePathResult { resolved_def, reached_fixedpoint, segment_index } 56 ResolvePathResult { resolved_def, reached_fixedpoint, segment_index, krate }
55 } 57 }
56} 58}
57 59
@@ -175,6 +177,7 @@ impl CrateDefMap {
175 def, 177 def,
176 ReachedFixedPoint::Yes, 178 ReachedFixedPoint::Yes,
177 s.map(|s| s + i), 179 s.map(|s| s + i),
180 Some(module.krate),
178 ); 181 );
179 } 182 }
180 183
@@ -201,6 +204,7 @@ impl CrateDefMap {
201 PerNs::types(e.into()), 204 PerNs::types(e.into()),
202 ReachedFixedPoint::Yes, 205 ReachedFixedPoint::Yes,
203 Some(i), 206 Some(i),
207 Some(self.krate),
204 ); 208 );
205 } 209 }
206 } 210 }
@@ -218,12 +222,13 @@ impl CrateDefMap {
218 PerNs::types(s), 222 PerNs::types(s),
219 ReachedFixedPoint::Yes, 223 ReachedFixedPoint::Yes,
220 Some(i), 224 Some(i),
225 Some(self.krate),
221 ); 226 );
222 } 227 }
223 }; 228 };
224 } 229 }
225 230
226 ResolvePathResult::with(curr_per_ns, ReachedFixedPoint::Yes, None) 231 ResolvePathResult::with(curr_per_ns, ReachedFixedPoint::Yes, None, Some(self.krate))
227 } 232 }
228 233
229 fn resolve_name_in_module( 234 fn resolve_name_in_module(