Unnamed repository; edit this file 'description' to name the repository.
#11973 associated type is unresolved
bitgaoshu 2022-04-24
parent 1894473 · commit 5d1aff3
-rw-r--r--crates/hir/src/source_analyzer.rs8
-rw-r--r--crates/ide/src/hover/tests.rs43
2 files changed, 50 insertions, 1 deletions
diff --git a/crates/hir/src/source_analyzer.rs b/crates/hir/src/source_analyzer.rs
index 35aef32824..7a65fd99cf 100644
--- a/crates/hir/src/source_analyzer.rs
+++ b/crates/hir/src/source_analyzer.rs
@@ -652,7 +652,13 @@ fn resolve_hir_path_(
let (ty, remaining) =
resolver.resolve_path_in_type_ns(db.upcast(), path.mod_path())?;
match remaining {
- Some(remaining) if remaining > 1 => None,
+ Some(remaining) if remaining > 1 => {
+ if remaining + 1 == path.segments().len() {
+ Some((ty, path.segments().last()))
+ } else {
+ None
+ }
+ }
_ => Some((ty, path.segments().get(1))),
}
}
diff --git a/crates/ide/src/hover/tests.rs b/crates/ide/src/hover/tests.rs
index 57e049c10d..baab746d74 100644
--- a/crates/ide/src/hover/tests.rs
+++ b/crates/ide/src/hover/tests.rs
@@ -3765,6 +3765,49 @@ pub fn gimme() -> theitem::TheItem {
}
#[test]
+fn test_hover_trait_assoc_typealias() {
+ check(
+ r#"
+ fn main() {}
+
+trait T1 {
+ type Bar;
+ type Baz;
+}
+
+struct Foo;
+
+mod t2 {
+ pub trait T2 {
+ type Bar;
+ }
+}
+
+use t2::T2;
+
+impl T2 for Foo {
+ type Bar = String;
+}
+
+impl T1 for Foo {
+ type Bar = <Foo as t2::T2>::Ba$0r;
+ // ^^^ unresolvedReference
+}
+ "#,
+ expect![[r#"
+*Bar*
+
+```rust
+test::t2
+```
+
+```rust
+pub type Bar
+```
+"#]],
+ );
+}
+#[test]
fn hover_generic_assoc() {
check(
r#"