mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 01:04:03 +00:00
Rollup merge of #81416 - estebank:suggestion-span-tweak, r=petrochenkov
Tweak suggestion for missing field in patterns Account for parser recovered struct and tuple patterns to avoid invalid suggestion. Follow up to #81103.
This commit is contained in:
commit
b8eac50ff5
@ -1525,24 +1525,13 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
_ => return err,
|
||||
},
|
||||
[.., field] => {
|
||||
// if last field has a trailing comma, use the comma
|
||||
// as the span to avoid trailing comma in ultimate
|
||||
// suggestion (Issue #78511)
|
||||
let tail = field.span.shrink_to_hi().until(pat.span.shrink_to_hi());
|
||||
let tail_through_comma = self.tcx.sess.source_map().span_through_char(tail, ',');
|
||||
let sp = if tail_through_comma == tail {
|
||||
field.span.shrink_to_hi()
|
||||
} else {
|
||||
tail_through_comma
|
||||
};
|
||||
(
|
||||
match pat.kind {
|
||||
PatKind::Struct(_, [_, ..], _) => ", ",
|
||||
_ => "",
|
||||
},
|
||||
"",
|
||||
sp,
|
||||
)
|
||||
// Account for last field having a trailing comma or parse recovery at the tail of
|
||||
// the pattern to avoid invalid suggestion (#78511).
|
||||
let tail = field.span.shrink_to_hi().with_hi(pat.span.hi());
|
||||
match &pat.kind {
|
||||
PatKind::Struct(..) => (", ", " }", tail),
|
||||
_ => return err,
|
||||
}
|
||||
}
|
||||
};
|
||||
err.span_suggestion(
|
||||
|
@ -32,12 +32,12 @@ LL | Struct { a, _ } = Struct { a: 1, b: 2 };
|
||||
|
|
||||
help: include the missing field in the pattern
|
||||
|
|
||||
LL | Struct { a, b _ } = Struct { a: 1, b: 2 };
|
||||
| ^^^
|
||||
LL | Struct { a, b } = Struct { a: 1, b: 2 };
|
||||
| ^^^^^
|
||||
help: if you don't care about this missing field, you can explicitly ignore it
|
||||
|
|
||||
LL | Struct { a, .. _ } = Struct { a: 1, b: 2 };
|
||||
| ^^^^
|
||||
LL | Struct { a, .. } = Struct { a: 1, b: 2 };
|
||||
| ^^^^^^
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
|
@ -7,11 +7,11 @@ LL | Dog { age: x } => {}
|
||||
help: include the missing field in the pattern
|
||||
|
|
||||
LL | Dog { age: x, name } => {}
|
||||
| ^^^^^^
|
||||
| ^^^^^^^^
|
||||
help: if you don't care about this missing field, you can explicitly ignore it
|
||||
|
|
||||
LL | Dog { age: x, .. } => {}
|
||||
| ^^^^
|
||||
| ^^^^^^
|
||||
|
||||
error[E0027]: pattern does not mention field `age`
|
||||
--> $DIR/E0027.rs:15:9
|
||||
@ -22,11 +22,11 @@ LL | Dog { name: x, } => {}
|
||||
help: include the missing field in the pattern
|
||||
|
|
||||
LL | Dog { name: x, age } => {}
|
||||
| ^^^^^
|
||||
| ^^^^^^^
|
||||
help: if you don't care about this missing field, you can explicitly ignore it
|
||||
|
|
||||
LL | Dog { name: x, .. } => {}
|
||||
| ^^^^
|
||||
| ^^^^^^
|
||||
|
||||
error[E0027]: pattern does not mention field `age`
|
||||
--> $DIR/E0027.rs:19:9
|
||||
@ -37,11 +37,11 @@ LL | Dog { name: x , } => {}
|
||||
help: include the missing field in the pattern
|
||||
|
|
||||
LL | Dog { name: x, age } => {}
|
||||
| ^^^^^
|
||||
| ^^^^^^^
|
||||
help: if you don't care about this missing field, you can explicitly ignore it
|
||||
|
|
||||
LL | Dog { name: x, .. } => {}
|
||||
| ^^^^
|
||||
| ^^^^^^
|
||||
|
||||
error[E0027]: pattern does not mention fields `name`, `age`
|
||||
--> $DIR/E0027.rs:22:9
|
||||
|
@ -19,11 +19,11 @@ LL | let A { x, y } = self.d;
|
||||
help: include the missing fields in the pattern
|
||||
|
|
||||
LL | let A { x, y, b, c } = self.d;
|
||||
| ^^^^^^
|
||||
| ^^^^^^^^
|
||||
help: if you don't care about these missing fields, you can explicitly ignore them
|
||||
|
|
||||
LL | let A { x, y, .. } = self.d;
|
||||
| ^^^^
|
||||
| ^^^^^^
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user