feat: use shorthand when pretty-print record pat
This commit is contained in:
parent
cbfa357813
commit
129acd2e08
@ -616,12 +616,37 @@ fn print_pat(&mut self, pat: PatId) {
|
||||
|
||||
w!(self, " {{");
|
||||
let edition = self.edition;
|
||||
let oneline = matches!(self.line_format, LineFormat::Oneline);
|
||||
self.indented(|p| {
|
||||
for arg in args.iter() {
|
||||
w!(p, "{}: ", arg.name.display(self.db.upcast(), edition));
|
||||
p.print_pat(arg.pat);
|
||||
wln!(p, ",");
|
||||
for (idx, arg) in args.iter().enumerate() {
|
||||
let field_name = arg.name.display(self.db.upcast(), edition).to_string();
|
||||
|
||||
let mut same_name = false;
|
||||
if let Pat::Bind { id, subpat: None } = &self.body[arg.pat] {
|
||||
if let Binding { name, mode: BindingAnnotation::Unannotated, .. } =
|
||||
&self.body.bindings[*id]
|
||||
{
|
||||
if name.as_str() == field_name {
|
||||
same_name = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
w!(p, "{}", field_name);
|
||||
|
||||
if !same_name {
|
||||
w!(p, ": ");
|
||||
p.print_pat(arg.pat);
|
||||
}
|
||||
|
||||
// Do not print the extra comma if the line format is oneline
|
||||
if oneline && idx == args.len() - 1 {
|
||||
w!(p, " ");
|
||||
} else {
|
||||
wln!(p, ",");
|
||||
}
|
||||
}
|
||||
|
||||
if *ellipsis {
|
||||
wln!(p, "..");
|
||||
}
|
||||
|
@ -8803,7 +8803,7 @@ fn test_3(&(a, b): &(i32, i32))
|
||||
```
|
||||
|
||||
```rust
|
||||
fn test_4(Point { x: x, y: y, }: Point)
|
||||
fn test_4(Point { x, y }: Point)
|
||||
```
|
||||
"#]],
|
||||
);
|
||||
@ -8851,7 +8851,7 @@ fn test_6((_, y): (i32, i64))
|
||||
```
|
||||
|
||||
```rust
|
||||
fn test_7((x, Foo { a: a, b: b, }): (i32, Foo))
|
||||
fn test_7((x, Foo { a, b }): (i32, Foo))
|
||||
```
|
||||
"#]],
|
||||
);
|
||||
@ -8871,4 +8871,52 @@ fn test_8((MyEnum::A(x) | MyEnum::B(x)): MyEnum)
|
||||
```
|
||||
"#]],
|
||||
);
|
||||
|
||||
// Test case with a pattern as a function parameter
|
||||
check(
|
||||
r#"struct Foo { a: i32, b: i32 } fn test_9$0(Foo { a, b }: Foo) {}"#,
|
||||
expect![[r#"
|
||||
*test_9*
|
||||
|
||||
```rust
|
||||
test
|
||||
```
|
||||
|
||||
```rust
|
||||
fn test_9(Foo { a, b }: Foo)
|
||||
```
|
||||
"#]],
|
||||
);
|
||||
|
||||
// Test case with a pattern as a function parameter with a different name
|
||||
check(
|
||||
r#"struct Foo { a: i32, b: i32 } fn test_10$0(Foo { a, b: b1 }: Foo) {}"#,
|
||||
expect![[r#"
|
||||
*test_10*
|
||||
|
||||
```rust
|
||||
test
|
||||
```
|
||||
|
||||
```rust
|
||||
fn test_10(Foo { a, b: b1 }: Foo)
|
||||
```
|
||||
"#]],
|
||||
);
|
||||
|
||||
// Test case with a pattern as a function parameter with annotations
|
||||
check(
|
||||
r#"struct Foo { a: i32, b: i32 } fn test_10$0(Foo { a, b: mut b }: Foo) {}"#,
|
||||
expect![[r#"
|
||||
*test_10*
|
||||
|
||||
```rust
|
||||
test
|
||||
```
|
||||
|
||||
```rust
|
||||
fn test_10(Foo { a, b: mut b }: Foo)
|
||||
```
|
||||
"#]],
|
||||
);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user