Skip to content

Commit efdea63

Browse files
committed
extract parse_prefix_expr
1 parent 4cfcfe9 commit efdea63

File tree

1 file changed

+17
-16
lines changed

1 file changed

+17
-16
lines changed

src/librustc_parse/parser/expr.rs

+17-16
Original file line numberDiff line numberDiff line change
@@ -453,22 +453,7 @@ impl<'a> Parser<'a> {
453453
let (span, e) = self.interpolated_or_expr_span(e)?;
454454
(lo.to(span), self.mk_unary(UnOp::Not, e))
455455
}
456-
// Suggest `!` for bitwise negation when encountering a `~`
457-
token::Tilde => {
458-
self.bump();
459-
let e = self.parse_prefix_expr(None);
460-
let (span, e) = self.interpolated_or_expr_span(e)?;
461-
let span_of_tilde = lo;
462-
self.struct_span_err(span_of_tilde, "`~` cannot be used as a unary operator")
463-
.span_suggestion_short(
464-
span_of_tilde,
465-
"use `!` to perform bitwise not",
466-
"!".to_owned(),
467-
Applicability::MachineApplicable,
468-
)
469-
.emit();
470-
(lo.to(span), self.mk_unary(UnOp::Not, e))
471-
}
456+
token::Tilde => self.recover_tilde_expr(lo)?,
472457
token::BinOp(token::Minus) => self.parse_neg_expr(lo)?,
473458
token::BinOp(token::Star) => self.parse_deref_expr(lo)?,
474459
token::BinOp(token::And) | token::AndAnd => self.parse_borrow_expr(lo)?,
@@ -481,6 +466,22 @@ impl<'a> Parser<'a> {
481466
return Ok(self.mk_expr(lo.to(hi), ex, attrs));
482467
}
483468

469+
// Recover on `!` suggesting for bitwise negation instead.
470+
fn recover_tilde_expr(&mut self, lo: Span) -> PResult<'a, (Span, ExprKind)> {
471+
self.bump();
472+
let expr = self.parse_prefix_expr(None);
473+
let (span, expr) = self.interpolated_or_expr_span(expr)?;
474+
self.struct_span_err(lo, "`~` cannot be used as a unary operator")
475+
.span_suggestion_short(
476+
lo,
477+
"use `!` to perform bitwise not",
478+
"!".to_owned(),
479+
Applicability::MachineApplicable,
480+
)
481+
.emit();
482+
Ok((lo.to(span), self.mk_unary(UnOp::Not, expr)))
483+
}
484+
484485
/// Parse `-expr`.
485486
fn parse_neg_expr(&mut self, lo: Span) -> PResult<'a, (Span, ExprKind)> {
486487
self.bump(); // `-`

0 commit comments

Comments
 (0)