diff --git a/clippy_lints/src/literal_digit_grouping.rs b/clippy_lints/src/literal_digit_grouping.rs index 9b26cc53d471..5bc9190b1f56 100644 --- a/clippy_lints/src/literal_digit_grouping.rs +++ b/clippy_lints/src/literal_digit_grouping.rs @@ -140,6 +140,49 @@ impl<'a> DigitInfo<'a> { float: float, } } + + /// Returns digits grouped in a sensible way. + fn grouping_hint(&self) -> String { + let group_size = self.radix.suggest_grouping(); + if self.digits.contains('.') { + let mut parts = self.digits.split("."); + let int_part_hint = parts + .next() + .unwrap() + .chars() + .rev() + .filter(|&c| c != '_') + .collect::>() + .chunks(group_size) + .map(|chunk| chunk.into_iter().rev().collect()) + .rev() + .collect::>() + .join("_"); + let frac_part_hint = parts + .next() + .unwrap() + .chars() + .filter(|&c| c != '_') + .collect::>() + .chunks(group_size) + .map(|chunk| chunk.into_iter().collect()) + .collect::>() + .join("_"); + format!("{}.{}{}", int_part_hint, frac_part_hint, self.suffix.unwrap_or("")) + } else { + let hint = self.digits + .chars() + .rev() + .filter(|&c| c != '_') + .collect::>() + .chunks(group_size) + .map(|chunk| chunk.into_iter().rev().collect()) + .rev() + .collect::>() + .join("_"); + format!("{}{}{}", self.prefix.unwrap_or(""), hint, self.suffix.unwrap_or("")) + } + } } enum WarningType {