Skip to content

Commit b0bb862

Browse files
committed
Don't print implicit type args from impl Trait
1 parent 6c70619 commit b0bb862

File tree

2 files changed

+21
-14
lines changed

2 files changed

+21
-14
lines changed

crates/ra_hir_ty/src/lib.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -909,9 +909,16 @@ impl HirDisplay for ApplicationTy {
909909
}
910910
}
911911
if self.parameters.len() > 0 {
912-
write!(f, "<")?;
913-
f.write_joined(&*self.parameters.0, ", ")?;
914-
write!(f, ">")?;
912+
let generics = generics(f.db, def.into());
913+
let (parent_params, self_param, type_params, _impl_trait_params) =
914+
generics.provenance_split();
915+
let total_len = parent_params + self_param + type_params;
916+
// We print all params except implicit impl Trait params. Still a bit weird; should we leave out parent and self?
917+
if total_len > 0 {
918+
write!(f, "<")?;
919+
f.write_joined(&self.parameters.0[..total_len], ", ")?;
920+
write!(f, ">")?;
921+
}
915922
}
916923
write!(f, "(")?;
917924
f.write_joined(sig.params(), ", ")?;

crates/ra_hir_ty/src/tests/traits.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -886,7 +886,7 @@ fn test(x: impl Trait<u64>, y: &impl Trait<u32>) {
886886
[224; 225) 'S': S<u16>(u16) -> S<u16>
887887
[224; 228) 'S(1)': S<u16>
888888
[226; 227) '1': u16
889-
[234; 237) 'bar': fn bar<S<u16>>(S<u16>) -> ()
889+
[234; 237) 'bar': fn bar(S<u16>) -> ()
890890
[234; 240) 'bar(z)': ()
891891
[238; 239) 'z': S<u16>
892892
[246; 247) 'x': impl Trait<u64>
@@ -943,28 +943,28 @@ fn test() {
943943
[222; 229) 'loop {}': !
944944
[227; 229) '{}': ()
945945
[301; 510) '{ ... i32 }': ()
946-
[307; 315) 'Foo::bar': fn bar<{unknown}, {unknown}, S>(S) -> {unknown}
946+
[307; 315) 'Foo::bar': fn bar<{unknown}, {unknown}>(S) -> {unknown}
947947
[307; 318) 'Foo::bar(S)': {unknown}
948948
[316; 317) 'S': S
949-
[324; 339) '<F as Foo>::bar': fn bar<F, {unknown}, S>(S) -> {unknown}
949+
[324; 339) '<F as Foo>::bar': fn bar<F, {unknown}>(S) -> {unknown}
950950
[324; 342) '<F as ...bar(S)': {unknown}
951951
[340; 341) 'S': S
952-
[348; 354) 'F::bar': fn bar<F, {unknown}, S>(S) -> {unknown}
952+
[348; 354) 'F::bar': fn bar<F, {unknown}>(S) -> {unknown}
953953
[348; 357) 'F::bar(S)': {unknown}
954954
[355; 356) 'S': S
955-
[363; 378) 'Foo::bar::<u32>': fn bar<{unknown}, u32, S>(S) -> u32
955+
[363; 378) 'Foo::bar::<u32>': fn bar<{unknown}, u32>(S) -> u32
956956
[363; 381) 'Foo::b...32>(S)': u32
957957
[379; 380) 'S': S
958-
[387; 409) '<F as ...:<u32>': fn bar<F, u32, S>(S) -> u32
958+
[387; 409) '<F as ...:<u32>': fn bar<F, u32>(S) -> u32
959959
[387; 412) '<F as ...32>(S)': u32
960960
[410; 411) 'S': S
961-
[419; 422) 'foo': fn foo<{unknown}, S>(S) -> {unknown}
961+
[419; 422) 'foo': fn foo<{unknown}>(S) -> {unknown}
962962
[419; 425) 'foo(S)': {unknown}
963963
[423; 424) 'S': S
964-
[431; 441) 'foo::<u32>': fn foo<u32, S>(S) -> u32
964+
[431; 441) 'foo::<u32>': fn foo<u32>(S) -> u32
965965
[431; 444) 'foo::<u32>(S)': u32
966966
[442; 443) 'S': S
967-
[450; 465) 'foo::<u32, i32>': fn foo<u32, S>(S) -> u32
967+
[450; 465) 'foo::<u32, i32>': fn foo<u32>(S) -> u32
968968
[450; 468) 'foo::<...32>(S)': u32
969969
[466; 467) 'S': S
970970
"###
@@ -1794,11 +1794,11 @@ fn test() -> impl Trait<i32> {
17941794
[229; 241) 'S(default())': S<u32>
17951795
[231; 238) 'default': fn default<u32>() -> u32
17961796
[231; 240) 'default()': u32
1797-
[247; 250) 'foo': fn foo<S<u32>>(S<u32>) -> ()
1797+
[247; 250) 'foo': fn foo(S<u32>) -> ()
17981798
[247; 254) 'foo(s1)': ()
17991799
[251; 253) 's1': S<u32>
18001800
[264; 265) 'x': i32
1801-
[273; 276) 'bar': fn bar<i32, S<i32>>(S<i32>) -> i32
1801+
[273; 276) 'bar': fn bar<i32>(S<i32>) -> i32
18021802
[273; 290) 'bar(S(...lt()))': i32
18031803
[277; 278) 'S': S<i32>(i32) -> S<i32>
18041804
[277; 289) 'S(default())': S<i32>

0 commit comments

Comments
 (0)