Skip to content

Commit

Permalink
Bring back suggestion for splitting <- into < -
Browse files Browse the repository at this point in the history
Closes #62632
  • Loading branch information
iluuu1994 committed Aug 12, 2019
1 parent 72f8043 commit 91af5c2
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 8 deletions.
17 changes: 17 additions & 0 deletions src/libsyntax/parse/parser/expr.rs
Expand Up @@ -224,6 +224,10 @@ impl<'a> Parser<'a> {
self.err_dotdotdot_syntax(self.token.span);
}

if self.token == token::LArrow {
self.err_larrow_operator(self.token.span);
}

self.bump();
if op.is_comparison() {
self.check_no_chained_comparison(&lhs, &op);
Expand Down Expand Up @@ -1702,6 +1706,19 @@ impl<'a> Parser<'a> {
.emit();
}

fn err_larrow_operator(&self, span: Span) {
self.struct_span_err(
span,
"unexpected token: `<-`"
).span_suggestion(
span,
"if you meant to write a comparison against a negative value, add a \
space in between `<` and `-`",
"< -".to_string(),
Applicability::MaybeIncorrect
).emit();
}

fn mk_assign_op(&self, binop: BinOp, lhs: P<Expr>, rhs: P<Expr>) -> ExprKind {
ExprKind::AssignOp(binop, lhs, rhs)
}
Expand Down
2 changes: 2 additions & 0 deletions src/libsyntax/util/parser.rs
Expand Up @@ -97,6 +97,8 @@ impl AssocOp {
// DotDotDot is no longer supported, but we need some way to display the error
token::DotDotDot => Some(DotDotEq),
token::Colon => Some(Colon),
// `<-` should probably be `< -`
token::LArrow => Some(Less),
_ if t.is_keyword(kw::As) => Some(As),
_ => None
}
Expand Down
2 changes: 1 addition & 1 deletion src/test/ui/obsolete-in-place/bad.rs
Expand Up @@ -2,7 +2,7 @@

fn foo() {
let (x, y) = (0, 0);
x <- y; //~ ERROR expected one of
x <- y; //~ ERROR unexpected token: `<-`
}

fn main() {
Expand Down
8 changes: 6 additions & 2 deletions src/test/ui/obsolete-in-place/bad.stderr
@@ -1,8 +1,12 @@
error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found `<-`
error: unexpected token: `<-`
--> $DIR/bad.rs:5:7
|
LL | x <- y;
| ^^ expected one of 8 possible tokens here
| ^^
help: if you meant to write a comparison against a negative value, add a space in between `<` and `-`
|
LL | x < - y;
| ^^^

error: expected expression, found keyword `in`
--> $DIR/bad.rs:10:5
Expand Down
2 changes: 1 addition & 1 deletion src/test/ui/placement-syntax.rs
@@ -1,6 +1,6 @@
fn main() {
let x = -5;
if x<-1 { //~ ERROR expected `{`, found `<-`
if x<-1 { //~ ERROR unexpected token: `<-`
println!("ok");
}
}
10 changes: 6 additions & 4 deletions src/test/ui/placement-syntax.stderr
@@ -1,10 +1,12 @@
error: expected `{`, found `<-`
error: unexpected token: `<-`
--> $DIR/placement-syntax.rs:3:9
|
LL | if x<-1 {
| -- ^^ expected `{`
| |
| this `if` statement has a condition, but no block
| ^^
help: if you meant to write a comparison against a negative value, add a space in between `<` and `-`
|
LL | if x< -1 {
| ^^^

error: aborting due to previous error

0 comments on commit 91af5c2

Please sign in to comment.