diff options
| author | Shoyu Vanilla <modulo641@gmail.com> | 2025-05-03 00:31:33 +0900 |
|---|---|---|
| committer | Shoyu Vanilla <modulo641@gmail.com> | 2025-05-03 00:31:33 +0900 |
| commit | 9eb1e83a12121302dd5ae09c7ba419de08e2da34 (patch) | |
| tree | 3b72120887282e1d382b8df0742e20c6baf59d5e | |
| parent | 3686ed9f7ca38aa658cf06b8979419c8478ccae4 (diff) | |
| download | rust-9eb1e83a12121302dd5ae09c7ba419de08e2da34.tar.gz rust-9eb1e83a12121302dd5ae09c7ba419de08e2da34.zip | |
fix: Correct assoc ty bound var starting index
| -rw-r--r-- | src/tools/rust-analyzer/crates/hir-ty/src/chalk_db.rs | 5 | ||||
| -rw-r--r-- | src/tools/rust-analyzer/crates/hir-ty/src/tests/regression.rs | 23 |
2 files changed, 27 insertions, 1 deletions
diff --git a/src/tools/rust-analyzer/crates/hir-ty/src/chalk_db.rs b/src/tools/rust-analyzer/crates/hir-ty/src/chalk_db.rs index 376daccbdae..cd799c03ddf 100644 --- a/src/tools/rust-analyzer/crates/hir-ty/src/chalk_db.rs +++ b/src/tools/rust-analyzer/crates/hir-ty/src/chalk_db.rs @@ -637,7 +637,10 @@ pub(crate) fn associated_ty_data_query( .fill_with_bound_vars(crate::DebruijnIndex::INNERMOST, 0) .build(); let pro_ty = TyBuilder::assoc_type_projection(db, type_alias, Some(trait_subst)) - .fill_with_bound_vars(crate::DebruijnIndex::INNERMOST, generic_params.len_self()) + .fill_with_bound_vars( + crate::DebruijnIndex::INNERMOST, + generic_params.parent_generics().map_or(0, |it| it.len()), + ) .build(); let self_ty = TyKind::Alias(AliasTy::Projection(pro_ty)).intern(Interner); diff --git a/src/tools/rust-analyzer/crates/hir-ty/src/tests/regression.rs b/src/tools/rust-analyzer/crates/hir-ty/src/tests/regression.rs index 644b0d392bc..47c695c6974 100644 --- a/src/tools/rust-analyzer/crates/hir-ty/src/tests/regression.rs +++ b/src/tools/rust-analyzer/crates/hir-ty/src/tests/regression.rs @@ -2278,3 +2278,26 @@ fn test(x: bool) { "#]], ); } + +#[test] +fn issue_19730() { + check_infer( + r#" +trait Trait<T = Self> {} + +trait Foo { + type Bar<A, B>: Trait; + + fn foo<A, B>(bar: Self::Bar<A, B>) { + let _ = bar; + } +} +"#, + expect![[r#" + 83..86 'bar': Foo::Bar<Self, A, B> + 105..133 '{ ... }': () + 119..120 '_': Foo::Bar<Self, A, B> + 123..126 'bar': Foo::Bar<Self, A, B> + "#]], + ); +} |
