Fix resolving types when resolving HIR and add a related test

This commit is contained in:
morine0122 2023-02-26 19:04:16 +09:00
parent 1d32a7b7c6
commit aa877645a6
2 changed files with 22 additions and 5 deletions

View File

@ -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)),
}
}
}?;

View File

@ -1065,6 +1065,23 @@ fn f() -> impl Sub<Item$0 = u8> {}
);
}
#[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(