aboutsummaryrefslogtreecommitdiff
path: root/crates/hir_ty
diff options
context:
space:
mode:
Diffstat (limited to 'crates/hir_ty')
-rw-r--r--crates/hir_ty/Cargo.toml6
-rw-r--r--crates/hir_ty/src/tests/method_resolution.rs45
2 files changed, 48 insertions, 3 deletions
diff --git a/crates/hir_ty/Cargo.toml b/crates/hir_ty/Cargo.toml
index 418ac8cbb..6ef9d1e7e 100644
--- a/crates/hir_ty/Cargo.toml
+++ b/crates/hir_ty/Cargo.toml
@@ -17,9 +17,9 @@ ena = "0.14.0"
17log = "0.4.8" 17log = "0.4.8"
18rustc-hash = "1.1.0" 18rustc-hash = "1.1.0"
19scoped-tls = "1" 19scoped-tls = "1"
20chalk-solve = { version = "0.56", default-features = false } 20chalk-solve = { version = "0.58", default-features = false }
21chalk-ir = "0.56" 21chalk-ir = "0.58"
22chalk-recursive = "0.56" 22chalk-recursive = "0.58"
23la-arena = { version = "0.2.0", path = "../../lib/arena" } 23la-arena = { version = "0.2.0", path = "../../lib/arena" }
24 24
25stdx = { path = "../stdx", version = "0.0.0" } 25stdx = { path = "../stdx", version = "0.0.0" }
diff --git a/crates/hir_ty/src/tests/method_resolution.rs b/crates/hir_ty/src/tests/method_resolution.rs
index 659b8fce9..a9901d7b8 100644
--- a/crates/hir_ty/src/tests/method_resolution.rs
+++ b/crates/hir_ty/src/tests/method_resolution.rs
@@ -956,6 +956,51 @@ fn test() { foo.call(); }
956} 956}
957 957
958#[test] 958#[test]
959fn super_trait_impl_return_trait_method_resolution() {
960 check_infer(
961 r#"
962 trait Base {
963 fn foo(self) -> usize;
964 }
965
966 trait Super : Base {}
967
968 fn base1() -> impl Base { loop {} }
969 fn super1() -> impl Super { loop {} }
970
971 fn test(base2: impl Base, super2: impl Super) {
972 base1().foo();
973 super1().foo();
974 base2.foo();
975 super2.foo();
976 }
977 "#,
978 expect![[r#"
979 24..28 'self': Self
980 90..101 '{ loop {} }': !
981 92..99 'loop {}': !
982 97..99 '{}': ()
983 128..139 '{ loop {} }': !
984 130..137 'loop {}': !
985 135..137 '{}': ()
986 149..154 'base2': impl Base
987 167..173 'super2': impl Super
988 187..264 '{ ...o(); }': ()
989 193..198 'base1': fn base1() -> impl Base
990 193..200 'base1()': impl Base
991 193..206 'base1().foo()': usize
992 212..218 'super1': fn super1() -> impl Super
993 212..220 'super1()': impl Super
994 212..226 'super1().foo()': usize
995 232..237 'base2': impl Base
996 232..243 'base2.foo()': usize
997 249..255 'super2': impl Super
998 249..261 'super2.foo()': usize
999 "#]],
1000 );
1001}
1002
1003#[test]
959fn method_resolution_non_parameter_type() { 1004fn method_resolution_non_parameter_type() {
960 check_types( 1005 check_types(
961 r#" 1006 r#"