From 14570df015d1641d1e382c9898e7c6d981b99e97 Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Fri, 10 Apr 2020 17:44:43 +0200 Subject: Switch Chalk to recursive solver + various fixes related to that. --- crates/ra_hir_ty/src/tests/traits.rs | 50 +++++++++++++++--------------------- 1 file changed, 21 insertions(+), 29 deletions(-) (limited to 'crates/ra_hir_ty/src/tests') diff --git a/crates/ra_hir_ty/src/tests/traits.rs b/crates/ra_hir_ty/src/tests/traits.rs index b3a2fc439..0e4fd7bfd 100644 --- a/crates/ra_hir_ty/src/tests/traits.rs +++ b/crates/ra_hir_ty/src/tests/traits.rs @@ -349,7 +349,6 @@ trait Trait: SuperTrait { #[test] fn infer_project_associated_type() { - // y, z, a don't yet work because of https://github.com/rust-lang/chalk/issues/234 assert_snapshot!( infer(r#" trait Iterable { @@ -368,12 +367,12 @@ fn test() { [108; 261) '{ ...ter; }': () [118; 119) 'x': u32 [145; 146) '1': u32 - [156; 157) 'y': {unknown} - [183; 192) 'no_matter': {unknown} - [202; 203) 'z': {unknown} - [215; 224) 'no_matter': {unknown} - [234; 235) 'a': {unknown} - [249; 258) 'no_matter': {unknown} + [156; 157) 'y': Iterable::Item + [183; 192) 'no_matter': Iterable::Item + [202; 203) 'z': Iterable::Item + [215; 224) 'no_matter': Iterable::Item + [234; 235) 'a': Iterable::Item + [249; 258) 'no_matter': Iterable::Item "### ); } @@ -433,8 +432,8 @@ fn test>() { "#), @r###" [67; 100) '{ ...own; }': () - [77; 78) 'y': {unknown} - [90; 97) 'unknown': {unknown} + [77; 78) 'y': u32 + [90; 97) 'unknown': u32 "### ); } @@ -549,7 +548,7 @@ impl std::ops::Index for Bar { fn test() { let a = Bar; - let b = a[1]; + let b = a[1u32]; b<|>; } @@ -574,7 +573,7 @@ fn infer_ops_index_autoderef() { //- /main.rs crate:main deps:std fn test() { let a = &[1u32, 2, 3]; - let b = a[1]; + let b = a[1u32]; b<|>; } @@ -916,11 +915,7 @@ fn test(t: T) { } "#, ); - // FIXME here Chalk doesn't normalize the type to a placeholder. I think we - // need to add a rule like Normalize(::Out -> ApplyL::Out) - // to the trait env ourselves here; probably Chalk can't do this by itself. - // assert_eq!(t, "ApplyL::Out<[missing name]>"); - assert_eq!(t, "{unknown}"); + assert_eq!(t, "ApplyL::Out"); } #[test] @@ -1329,16 +1324,16 @@ fn test>(x: T, y: impl Trait) { [263; 264) 'y': impl Trait [290; 398) '{ ...r>); }': () [296; 299) 'get': fn get(T) -> ::Type - [296; 302) 'get(x)': {unknown} + [296; 302) 'get(x)': u32 [300; 301) 'x': T - [308; 312) 'get2': fn get2<{unknown}, T>(T) -> {unknown} - [308; 315) 'get2(x)': {unknown} + [308; 312) 'get2': fn get2(T) -> u32 + [308; 315) 'get2(x)': u32 [313; 314) 'x': T [321; 324) 'get': fn get>(impl Trait) -> as Trait>::Type - [321; 327) 'get(y)': {unknown} + [321; 327) 'get(y)': i64 [325; 326) 'y': impl Trait - [333; 337) 'get2': fn get2<{unknown}, impl Trait>(impl Trait) -> {unknown} - [333; 340) 'get2(y)': {unknown} + [333; 337) 'get2': fn get2>(impl Trait) -> i64 + [333; 340) 'get2(y)': i64 [338; 339) 'y': impl Trait [346; 349) 'get': fn get>(S) -> as Trait>::Type [346; 357) 'get(set(S))': u64 @@ -1402,7 +1397,6 @@ mod iter { #[test] fn projection_eq_within_chalk() { - // std::env::set_var("CHALK_DEBUG", "1"); assert_snapshot!( infer(r#" trait Trait1 { @@ -1422,7 +1416,7 @@ fn test>(x: T) { [164; 165) 'x': T [170; 186) '{ ...o(); }': () [176; 177) 'x': T - [176; 183) 'x.foo()': {unknown} + [176; 183) 'x.foo()': u32 "### ); } @@ -1578,7 +1572,7 @@ fn test u128>(f: F) { [150; 151) 'f': F [156; 184) '{ ...2)); }': () [162; 163) 'f': F - [162; 181) 'f.call...1, 2))': {unknown} + [162; 181) 'f.call...1, 2))': u128 [174; 180) '(1, 2)': (u32, u64) [175; 176) '1': u32 [178; 179) '2': u64 @@ -1829,7 +1823,7 @@ impl Trait for S2 { "#, ), @r###" [54; 58) 'self': &Self - [60; 61) 'x': {unknown} + [60; 61) 'x': Trait::Item [140; 144) 'self': &S [146; 147) 'x': u32 [161; 175) '{ let y = x; }': () @@ -1989,9 +1983,7 @@ fn test>>() { } "#, ); - // assert_eq!(t, "u32"); - // doesn't currently work, Chalk #234 - assert_eq!(t, "{unknown}"); + assert_eq!(t, "u32"); } #[test] -- cgit v1.2.3