aboutsummaryrefslogtreecommitdiff
path: root/crates/hir/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/hir/src')
-rw-r--r--crates/hir/src/source_analyzer.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/crates/hir/src/source_analyzer.rs b/crates/hir/src/source_analyzer.rs
index 5a3d80e8e..3f940124c 100644
--- a/crates/hir/src/source_analyzer.rs
+++ b/crates/hir/src/source_analyzer.rs
@@ -289,7 +289,7 @@ impl SourceAnalyzer {
289 let ctx = body::LowerCtx::with_hygiene(db.upcast(), &hygiene); 289 let ctx = body::LowerCtx::with_hygiene(db.upcast(), &hygiene);
290 let hir_path = Path::from_src(path.clone(), &ctx)?; 290 let hir_path = Path::from_src(path.clone(), &ctx)?;
291 291
292 // Case where path is a qualifier of another path, e.g. foo::bar::Baz where we 292 // Case where path is a qualifier of another path, e.g. foo::bar::Baz where we are
293 // trying to resolve foo::bar. 293 // trying to resolve foo::bar.
294 if let Some(outer_path) = parent().and_then(ast::Path::cast) { 294 if let Some(outer_path) = parent().and_then(ast::Path::cast) {
295 if let Some(qualifier) = outer_path.qualifier() { 295 if let Some(qualifier) = outer_path.qualifier() {
@@ -298,6 +298,15 @@ impl SourceAnalyzer {
298 } 298 }
299 } 299 }
300 } 300 }
301 // Case where path is a qualifier of a use tree, e.g. foo::bar::{Baz, Qux} where we are
302 // trying to resolve foo::bar.
303 if let Some(use_tree) = parent().and_then(ast::UseTree::cast) {
304 if let Some(qualifier) = use_tree.path() {
305 if path == &qualifier && use_tree.coloncolon_token().is_some() {
306 return resolve_hir_path_qualifier(db, &self.resolver, &hir_path);
307 }
308 }
309 }
301 310
302 resolve_hir_path_(db, &self.resolver, &hir_path, prefer_value_ns) 311 resolve_hir_path_(db, &self.resolver, &hir_path, prefer_value_ns)
303 } 312 }