diff --git a/clippy_lints/src/literal_representation.rs b/clippy_lints/src/literal_representation.rs index b40ddca5cbf..dacfd7c8983 100644 --- a/clippy_lints/src/literal_representation.rs +++ b/clippy_lints/src/literal_representation.rs @@ -204,10 +204,9 @@ impl<'a> DigitInfo<'a> { .collect::>() .join("_"); // Forces hexadecimal values to be grouped by 4 being filled with zeroes (e.g 0x00ab_cdef) - let nb_digits_to_fill = self.digits.len() % 4; + let nb_digits_to_fill = self.digits.chars().filter(|&c| c != '_').collect::>().len() % 4; if self.radix == Radix::Hexadecimal && nb_digits_to_fill != 0 { - let filled_digits = format!("{:0>1$}", &hint[..nb_digits_to_fill], 4); - hint = format!("{}{}", filled_digits, &hint[nb_digits_to_fill..]); + hint = format!("{:0>4}{}", &hint[..nb_digits_to_fill], &hint[nb_digits_to_fill..]); } format!( "{}{}{}", diff --git a/tests/ui/literals.rs b/tests/ui/literals.rs index 7be11072b0b..581fbbb70c9 100644 --- a/tests/ui/literals.rs +++ b/tests/ui/literals.rs @@ -30,9 +30,15 @@ fn main() { let ok11 = 0o123; let ok12 = 0b10_1010; - let ok6 = 0xab_abcd; - let ok7 = 0xBAFE_BAFE; + let ok13 = 0xab_abcd; + let ok14 = 0xBAFE_BAFE; + let ok15 = 0xab_cabc_abca_bcab_cabc; + let ok16 = 0xFE_BAFE_ABAB_ABCD; + let ok17 = 0x123_4567_8901_usize; + let fail9 = 0xabcdef; let fail10 = 0xBAFEBAFE; let fail11 = 0xabcdeff; + let fail12 = 0xabcabcabcabcabcabc; + let fail13 = 0x1_23456_78901_usize; }