From aa877645a6d5b16884fe1bd553d6f5ca921ea102 Mon Sep 17 00:00:00 2001 From: morine0122 Date: Sun, 26 Feb 2023 19:04:16 +0900 Subject: [PATCH] Fix resolving types when resolving HIR and add a related test --- crates/hir/src/source_analyzer.rs | 10 +++++----- crates/ide/src/goto_definition.rs | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/crates/hir/src/source_analyzer.rs b/crates/hir/src/source_analyzer.rs index 3b39e9fa919..ef5434771d9 100644 --- a/crates/hir/src/source_analyzer.rs +++ b/crates/hir/src/source_analyzer.rs @@ -943,17 +943,17 @@ fn resolve_hir_path_( res.map(|ty_ns| (ty_ns, path.segments().first())) } None => { - let (ty, remaining) = + let (ty, remaining_idx) = resolver.resolve_path_in_type_ns(db.upcast(), path.mod_path())?; - match remaining { - Some(remaining) if remaining > 1 => { - if remaining + 1 == path.segments().len() { + match remaining_idx { + Some(remaining_idx) => { + if remaining_idx + 1 == path.segments().len() { Some((ty, path.segments().last())) } else { None } } - _ => Some((ty, path.segments().get(1))), + None => Some((ty, None)), } } }?; diff --git a/crates/ide/src/goto_definition.rs b/crates/ide/src/goto_definition.rs index 93019527f44..65d1181d092 100644 --- a/crates/ide/src/goto_definition.rs +++ b/crates/ide/src/goto_definition.rs @@ -1065,6 +1065,23 @@ fn f() -> impl Sub {} ); } + #[test] + fn goto_def_for_module_declaration_in_path_if_types_and_values_same_name() { + check( + r#" +mod bar { + pub struct Foo {} + //^^^ + pub fn Foo() {} +} + +fn baz() { + let _foo_enum: bar::Foo$0 = bar::Foo {}; +} + "#, + ) + } + #[test] fn unknown_assoc_ty() { check_unresolved(