@@ -357,26 +357,23 @@ impl<'a> Parser<'a> {
357
357
return None ;
358
358
}
359
359
360
- // Returns `true` iff `token` is `x.y` float
360
+ // Returns `true` iff `token` is a `x.y` float
361
361
let is_float_literal = |that : & Self , token : & Token | -> bool {
362
362
use token:: { Lit , LitKind } ;
363
363
364
- if let token:: Literal ( Lit { kind : LitKind :: Float , symbol, suffix : None } ) = token. kind {
365
- if let DestructuredFloat :: MiddleDot ( ..) = that. break_up_float ( symbol, token. span ) {
366
- return true ;
367
- }
368
- }
364
+ let token:: Literal ( Lit { kind : LitKind :: Float , symbol, suffix : None } ) = token. kind else {
365
+ return false ;
366
+ } ;
369
367
370
- false
368
+ matches ! ( that . break_up_float ( symbol , token . span ) , DestructuredFloat :: MiddleDot ( .. ) )
371
369
} ;
372
370
373
- // Check for `.hello` or `.0`
374
- let has_dot_expr = self . check_noexpect ( & token:: Dot )
371
+ // Check for `.hello` or `.0`.
372
+ let has_dot_expr = self . check_noexpect ( & token:: Dot ) // `.`
375
373
&& self . look_ahead ( 1 , |tok| {
376
- tok. is_ident ( )
377
- || tok. is_integer_lit ( )
378
- // `0.0` get lexed as a float literal
379
- || is_float_literal ( & self , & tok)
374
+ tok. is_ident ( ) // `hello`
375
+ || tok. is_integer_lit ( ) // `0`
376
+ || is_float_literal ( & self , & tok) // `0.0`
380
377
} ) ;
381
378
382
379
// Check for operators.
@@ -388,7 +385,7 @@ impl<'a> Parser<'a> {
388
385
let has_trailing_operator = matches ! ( self . token. kind, token:: BinOp ( op) if op != BinOpToken :: Or )
389
386
|| self . token . kind == token:: Question
390
387
|| ( self . token . kind == token:: OpenDelim ( Delimiter :: Bracket )
391
- && self . look_ahead ( 1 , |tok| tok. kind != token:: CloseDelim ( Delimiter :: Bracket ) ) )
388
+ && self . look_ahead ( 1 , |tok| tok. kind != token:: CloseDelim ( Delimiter :: Bracket ) ) ) // excludes `[]`
392
389
|| self . token . is_keyword ( kw:: As ) ;
393
390
394
391
if !has_dot_expr && !has_trailing_operator {
@@ -431,13 +428,15 @@ impl<'a> Parser<'a> {
431
428
432
429
let span = expr. span ;
433
430
434
- let mut diag = self . dcx ( ) . create_err ( UnexpectedExpressionInPattern {
431
+ let mut err = self . dcx ( ) . create_err ( UnexpectedExpressionInPattern {
435
432
span,
436
433
is_bound,
437
434
is_method_call,
438
435
} ) ;
436
+
437
+ // FIXME(inline_const): once stabilized, remove this check and remove the `(requires #[feature(inline_const])` note from the message
439
438
if self . psess . unstable_features . is_nightly_build ( ) {
440
- diag . subdiagnostic (
439
+ err . subdiagnostic (
441
440
& self . dcx ( ) ,
442
441
UnexpectedExpressionInPatternConstPatSugg {
443
442
start_span : span. shrink_to_lo ( ) ,
@@ -446,7 +445,7 @@ impl<'a> Parser<'a> {
446
445
) ;
447
446
}
448
447
449
- return Some ( ( diag . stash ( span, StashKey :: ExprInPat ) . unwrap ( ) , span) ) ;
448
+ return Some ( ( err . stash ( span, StashKey :: ExprInPat ) . unwrap ( ) , span) ) ;
450
449
}
451
450
}
452
451
0 commit comments