Fix pretty printing an AST representing &(mut ident)
`PatKind::Ref(PatKind::Ident(BindingMode::ByValue(Mutability::Mut), ..), ..)` is an AST representing `&(mut ident)`. It was errorneously printed as `&mut ident` which reparsed into a syntactically different AST. This affected help diagnostics in the parser.
This commit is contained in:
parent
b1964e60b7
commit
b05ab18aec
@ -2420,7 +2420,15 @@ fn print_qpath(&mut self, path: &ast::Path, qself: &ast::QSelf, colons_before_pa
|
||||
if mutbl == ast::Mutability::Mut {
|
||||
self.s.word("mut ");
|
||||
}
|
||||
self.print_pat(inner);
|
||||
if let PatKind::Ident(ast::BindingMode::ByValue(ast::Mutability::Mut), ..) =
|
||||
inner.kind
|
||||
{
|
||||
self.popen();
|
||||
self.print_pat(inner);
|
||||
self.pclose();
|
||||
} else {
|
||||
self.print_pat(inner);
|
||||
}
|
||||
}
|
||||
PatKind::Lit(ref e) => self.print_expr(&**e),
|
||||
PatKind::Range(ref begin, ref end, Spanned { node: ref end_kind, .. }) => {
|
||||
|
@ -0,0 +1,9 @@
|
||||
// Regression test for correct pretty-printing of an AST representing `&(mut x)` in help
|
||||
// suggestion diagnostic.
|
||||
|
||||
fn main() {
|
||||
let mut &x = &0;
|
||||
//~^ ERROR `mut` must be attached to each individual binding
|
||||
//~| HELP add `mut` to each binding
|
||||
//~| SUGGESTION &(mut x)
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
error: `mut` must be attached to each individual binding
|
||||
--> $DIR/issue-80186-mut-binding-help-suggestion.rs:5:9
|
||||
|
|
||||
LL | let mut &x = &0;
|
||||
| ^^^^^^ help: add `mut` to each binding: `&(mut x)`
|
||||
|
|
||||
= note: `mut` may be followed by `variable` and `variable @ pattern`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
Loading…
Reference in New Issue
Block a user