diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs index 77e85c06ff5ae..0eeaf8f785412 100644 --- a/compiler/rustc_parse/src/parser/diagnostics.rs +++ b/compiler/rustc_parse/src/parser/diagnostics.rs @@ -1775,6 +1775,25 @@ impl<'a> Parser<'a> { self.sess.expr_parentheses_needed(&mut err, *sp, None); } err.span_label(span, "expected expression"); + if self.prev_token.kind == TokenKind::BinOp(token::Plus) + && self.token.kind == TokenKind::BinOp(token::Plus) + && self.look_ahead(1, |t| !t.is_lit()) + { + let span = self.prev_token.span.to(self.token.span); + err.note("Rust has no dedicated increment and decrement operators"); + err.span_suggestion_verbose( + span, + "try using `+= 1` instead", + " += 1".into(), + Applicability::Unspecified, + ); + } else if self.token.kind == TokenKind::BinOp(token::Plus) + && self.look_ahead(1, |t| t.kind == TokenKind::BinOp(token::Plus)) + && self.look_ahead(2, |t| !t.is_lit()) + { + err.note("Rust has no dedicated increment and decrement operators"); + err.help("try using `+= 1` instead"); + } err } diff --git a/src/test/ui/parser/increment.rs b/src/test/ui/parser/increment.rs new file mode 100644 index 0000000000000..8fbeef0fe39fe --- /dev/null +++ b/src/test/ui/parser/increment.rs @@ -0,0 +1,11 @@ +fn test1() { + let i = 0; + i++; //~ ERROR +} + +fn test2() { + let i = 0; + ++i; //~ ERROR +} + +fn main() {} diff --git a/src/test/ui/parser/increment.stderr b/src/test/ui/parser/increment.stderr new file mode 100644 index 0000000000000..c0110dca92939 --- /dev/null +++ b/src/test/ui/parser/increment.stderr @@ -0,0 +1,23 @@ +error: expected expression, found `+` + --> $DIR/increment.rs:3:7 + | +LL | i++; + | ^ expected expression + | + = note: Rust has no dedicated increment and decrement operators +help: try using `+= 1` instead + | +LL | i += 1; + | ^^^^ + +error: expected expression, found `+` + --> $DIR/increment.rs:8:5 + | +LL | ++i; + | ^ expected expression + | + = note: Rust has no dedicated increment and decrement operators + = help: try using `+= 1` instead + +error: aborting due to 2 previous errors +