Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/tests/traits.rs')
| -rw-r--r-- | crates/hir-ty/src/tests/traits.rs | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/crates/hir-ty/src/tests/traits.rs b/crates/hir-ty/src/tests/traits.rs index 5e58d5ad83..0b08aa4711 100644 --- a/crates/hir-ty/src/tests/traits.rs +++ b/crates/hir-ty/src/tests/traits.rs @@ -1256,6 +1256,32 @@ fn test() { } #[test] +fn infer_from_return_pos_impl_trait() { + check_infer_with_mismatches( + r#" +//- minicore: fn, sized +trait Trait<T> {} +struct Bar<T>(T); +impl<T> Trait<T> for Bar<T> {} +fn foo<const C: u8, T>() -> (impl FnOnce(&str, T), impl Trait<u8>) { + (|input, t| {}, Bar(C)) +} +"#, + expect![[r#" + 134..165 '{ ...(C)) }': (|&str, T| -> (), Bar<u8>) + 140..163 '(|inpu...ar(C))': (|&str, T| -> (), Bar<u8>) + 141..154 '|input, t| {}': |&str, T| -> () + 142..147 'input': &str + 149..150 't': T + 152..154 '{}': () + 156..159 'Bar': Bar<u8>(u8) -> Bar<u8> + 156..162 'Bar(C)': Bar<u8> + 160..161 'C': u8 + "#]], + ); +} + +#[test] fn dyn_trait() { check_infer( r#" @@ -2392,7 +2418,7 @@ fn test() -> impl Trait<i32> { 171..182 '{ loop {} }': T 173..180 'loop {}': ! 178..180 '{}': () - 213..309 '{ ...t()) }': S<{unknown}> + 213..309 '{ ...t()) }': S<i32> 223..225 's1': S<u32> 228..229 'S': S<u32>(u32) -> S<u32> 228..240 'S(default())': S<u32> @@ -2408,10 +2434,10 @@ fn test() -> impl Trait<i32> { 276..288 'S(default())': S<i32> 278..285 'default': fn default<i32>() -> i32 278..287 'default()': i32 - 295..296 'S': S<{unknown}>({unknown}) -> S<{unknown}> - 295..307 'S(default())': S<{unknown}> - 297..304 'default': fn default<{unknown}>() -> {unknown} - 297..306 'default()': {unknown} + 295..296 'S': S<i32>(i32) -> S<i32> + 295..307 'S(default())': S<i32> + 297..304 'default': fn default<i32>() -> i32 + 297..306 'default()': i32 "#]], ); } |