mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-10 07:04:22 +00:00
feat: use shorthand when pretty-print record pat
This commit is contained in:
parent
5c97361622
commit
5db510b258
2 changed files with 79 additions and 6 deletions
|
@ -616,12 +616,37 @@ impl Printer<'_> {
|
||||||
|
|
||||||
w!(self, " {{");
|
w!(self, " {{");
|
||||||
let edition = self.edition;
|
let edition = self.edition;
|
||||||
|
let oneline = matches!(self.line_format, LineFormat::Oneline);
|
||||||
self.indented(|p| {
|
self.indented(|p| {
|
||||||
for arg in args.iter() {
|
for (idx, arg) in args.iter().enumerate() {
|
||||||
w!(p, "{}: ", arg.name.display(self.db.upcast(), edition));
|
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);
|
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, ",");
|
wln!(p, ",");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if *ellipsis {
|
if *ellipsis {
|
||||||
wln!(p, "..");
|
wln!(p, "..");
|
||||||
}
|
}
|
||||||
|
|
|
@ -8803,7 +8803,7 @@ fn test_hover_function_with_pat_param() {
|
||||||
```
|
```
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
fn test_4(Point { x: x, y: y, }: Point)
|
fn test_4(Point { x, y }: Point)
|
||||||
```
|
```
|
||||||
"#]],
|
"#]],
|
||||||
);
|
);
|
||||||
|
@ -8851,7 +8851,7 @@ fn test_hover_function_with_pat_param() {
|
||||||
```
|
```
|
||||||
|
|
||||||
```rust
|
```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_hover_function_with_pat_param() {
|
||||||
```
|
```
|
||||||
"#]],
|
"#]],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// 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 a new issue