@@ -365,54 +365,50 @@ impl LiteralDigitGrouping {
365
365
if char :: is_digit( firstch, 10 ) ;
366
366
then {
367
367
368
+ let digit_info = match lit. kind {
369
+ LitKind :: Int ( ..) => DigitInfo :: new( & src, false ) ,
370
+ LitKind :: Float ( ..) => DigitInfo :: new( & src, true ) ,
371
+ _ => return ,
372
+ } ;
368
373
369
- match lit. kind {
370
- LitKind :: Int ( ..) => {
371
- // Lint integral literals.
372
- let digit_info = DigitInfo :: new( & src, false ) ;
373
- let _ = Self :: do_lint( digit_info. digits, digit_info. suffix, in_macro) . map_err( |warning_type| {
374
+ let result = ( || {
375
+ match lit. kind {
376
+ LitKind :: Int ( ..) => {
377
+ Self :: do_lint( digit_info. digits, digit_info. suffix, in_macro) ?;
378
+ } ,
379
+ LitKind :: Float ( ..) => {
380
+ // Separate digits into integral and fractional parts.
381
+ let parts: Vec <& str > = digit_info
382
+ . digits
383
+ . split_terminator( '.' )
384
+ . collect( ) ;
385
+
386
+ // Lint integral and fractional parts separately, and then check consistency of digit
387
+ // groups if both pass.
388
+ let integral_group_size = Self :: do_lint( parts[ 0 ] , digit_info. suffix, in_macro) ?;
389
+ if parts. len( ) > 1 {
390
+ // Lint the fractional part of literal just like integral part, but reversed.
391
+ let fractional_part = & parts[ 1 ] . chars( ) . rev( ) . collect:: <String >( ) ;
392
+ let fractional_group_size = Self :: do_lint( fractional_part, None , in_macro) ?;
393
+ let consistent = Self :: parts_consistent( integral_group_size,
394
+ fractional_group_size,
395
+ parts[ 0 ] . len( ) ,
396
+ parts[ 1 ] . len( ) ) ;
397
+ if !consistent {
398
+ return Err ( WarningType :: InconsistentDigitGrouping ) ;
399
+ } ;
400
+ } ;
401
+ } ,
402
+ _ => ( ) ,
403
+ }
404
+
405
+ Ok ( ( ) )
406
+ } ) ( ) ;
407
+
408
+
409
+ if let Err ( warning_type) = result {
374
410
warning_type. display( & digit_info. grouping_hint( ) , cx, lit. span)
375
- } ) ;
376
- } ,
377
- LitKind :: Float ( ..) => {
378
- // Lint floating-point literals.
379
- let digit_info = DigitInfo :: new( & src, true ) ;
380
- // Separate digits into integral and fractional parts.
381
- let parts: Vec <& str > = digit_info
382
- . digits
383
- . split_terminator( '.' )
384
- . collect( ) ;
385
-
386
- // Lint integral and fractional parts separately, and then check consistency of digit
387
- // groups if both pass.
388
- let _ = Self :: do_lint( parts[ 0 ] , digit_info. suffix, in_macro)
389
- . map( |integral_group_size| {
390
- if parts. len( ) > 1 {
391
- // Lint the fractional part of literal just like integral part, but reversed.
392
- let fractional_part = & parts[ 1 ] . chars( ) . rev( ) . collect:: <String >( ) ;
393
- let _ = Self :: do_lint( fractional_part, None , in_macro)
394
- . map( |fractional_group_size| {
395
- let consistent = Self :: parts_consistent( integral_group_size,
396
- fractional_group_size,
397
- parts[ 0 ] . len( ) ,
398
- parts[ 1 ] . len( ) ) ;
399
- if !consistent {
400
- WarningType :: InconsistentDigitGrouping . display(
401
- & digit_info. grouping_hint( ) ,
402
- cx,
403
- lit. span,
404
- ) ;
405
- }
406
- } )
407
- . map_err( |warning_type| warning_type. display( & digit_info. grouping_hint( ) ,
408
- cx,
409
- lit. span) ) ;
410
- }
411
- } )
412
- . map_err( |warning_type| warning_type. display( & digit_info. grouping_hint( ) , cx, lit. span) ) ;
413
- } ,
414
- _ => ( ) ,
415
- }
411
+ }
416
412
}
417
413
}
418
414
}
0 commit comments