aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir')
-rw-r--r--crates/ra_hir/src/code_model_impl/module.rs4
-rw-r--r--crates/ra_hir/src/nameres.rs9
-rw-r--r--crates/ra_hir/src/path.rs7
3 files changed, 18 insertions, 2 deletions
diff --git a/crates/ra_hir/src/code_model_impl/module.rs b/crates/ra_hir/src/code_model_impl/module.rs
index 73c212de8..d94079f11 100644
--- a/crates/ra_hir/src/code_model_impl/module.rs
+++ b/crates/ra_hir/src/code_model_impl/module.rs
@@ -143,6 +143,10 @@ impl Module {
143 return PerNs::none(); 143 return PerNs::none();
144 } 144 }
145 } 145 }
146 PathKind::Abs => {
147 // TODO: absolute use is not supported
148 return PerNs::none();
149 }
146 } 150 }
147 .def_id, 151 .def_id,
148 ); 152 );
diff --git a/crates/ra_hir/src/nameres.rs b/crates/ra_hir/src/nameres.rs
index 4874e82f3..72791ed49 100644
--- a/crates/ra_hir/src/nameres.rs
+++ b/crates/ra_hir/src/nameres.rs
@@ -15,7 +15,8 @@
15//! so that the results of name resolution can be preserved unless the module 15//! so that the results of name resolution can be preserved unless the module
16//! structure itself is modified. 16//! structure itself is modified.
17pub(crate) mod lower; 17pub(crate) mod lower;
18use lower::*; 18
19use crate::nameres::lower::*;
19 20
20use std::sync::Arc; 21use std::sync::Arc;
21 22
@@ -59,7 +60,7 @@ impl ModuleScope {
59pub struct Resolution { 60pub struct Resolution {
60 /// None for unresolved 61 /// None for unresolved
61 pub def_id: PerNs<DefId>, 62 pub def_id: PerNs<DefId>,
62 /// ident by whitch this is imported into local scope. 63 /// ident by which this is imported into local scope.
63 pub import: Option<ImportId>, 64 pub import: Option<ImportId>,
64} 65}
65 66
@@ -317,6 +318,10 @@ where
317 } 318 }
318 } 319 }
319 PathKind::Crate => module_id.crate_root(&self.module_tree), 320 PathKind::Crate => module_id.crate_root(&self.module_tree),
321 PathKind::Abs => {
322 // TODO: absolute use is not supported for now
323 return false;
324 }
320 }; 325 };
321 326
322 for (i, segment) in import.path.segments.iter().enumerate() { 327 for (i, segment) in import.path.segments.iter().enumerate() {
diff --git a/crates/ra_hir/src/path.rs b/crates/ra_hir/src/path.rs
index c3d14c689..e13d84c57 100644
--- a/crates/ra_hir/src/path.rs
+++ b/crates/ra_hir/src/path.rs
@@ -38,6 +38,8 @@ pub enum PathKind {
38 Self_, 38 Self_,
39 Super, 39 Super,
40 Crate, 40 Crate,
41 // Absolute path
42 Abs,
41} 43}
42 44
43impl Path { 45impl Path {
@@ -57,6 +59,11 @@ impl Path {
57 let mut segments = Vec::new(); 59 let mut segments = Vec::new();
58 loop { 60 loop {
59 let segment = path.segment()?; 61 let segment = path.segment()?;
62
63 if segment.has_colon_colon() {
64 kind = PathKind::Abs;
65 }
66
60 match segment.kind()? { 67 match segment.kind()? {
61 ast::PathSegmentKind::Name(name) => { 68 ast::PathSegmentKind::Name(name) => {
62 let args = segment 69 let args = segment