Skip to content

Commit 2dbd34f

Browse files
author
Michael Wright
committed
literal representation restructure 2
Consolidate warning handling using "poor man's try".
1 parent 8f5b4f3 commit 2dbd34f

File tree

1 file changed

+42
-46
lines changed

1 file changed

+42
-46
lines changed

clippy_lints/src/literal_representation.rs

Lines changed: 42 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -365,54 +365,50 @@ impl LiteralDigitGrouping {
365365
if char::is_digit(firstch, 10);
366366
then {
367367

368+
let digit_info = match lit.kind {
369+
LitKind::Int(..) => DigitInfo::new(&src, false),
370+
LitKind::Float(..) => DigitInfo::new(&src, true),
371+
_ => return,
372+
};
368373

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 {
374410
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+
}
416412
}
417413
}
418414
}

0 commit comments

Comments
 (0)