From 986c772c24315cd3d9edc5d6820c95dceebd5eaa Mon Sep 17 00:00:00 2001 From: "Michael A. Plikk" Date: Thu, 6 Sep 2018 16:26:17 +0200 Subject: [PATCH] Reduce number of split_at calls --- clippy_lints/src/literal_representation.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/clippy_lints/src/literal_representation.rs b/clippy_lints/src/literal_representation.rs index 349878960f4e..bff58ed5d331 100644 --- a/clippy_lints/src/literal_representation.rs +++ b/clippy_lints/src/literal_representation.rs @@ -155,6 +155,7 @@ impl<'a> DigitInfo<'a> { (Some(p), s) }; + let len = sans_prefix.len(); let mut last_d = '\0'; for (d_idx, d) in sans_prefix.char_indices() { let suffix_start = if last_d == '_' { @@ -162,10 +163,10 @@ impl<'a> DigitInfo<'a> { } else { d_idx }; - let (digits, suffix) = sans_prefix.split_at(suffix_start); if !float && (d == 'i' || d == 'u') || float && (d == 'f' || d == 'e' || d == 'E') || - !float && is_mistyped_suffix(suffix) { + !float && is_possible_suffix_index(&sans_prefix, suffix_start, len) { + let (digits, suffix) = sans_prefix.split_at(suffix_start); return Self { digits, radix, @@ -557,3 +558,8 @@ impl LiteralRepresentation { fn is_mistyped_suffix(suffix: &str) -> bool { ["_8", "_16", "_32", "_64"].contains(&suffix) } + +fn is_possible_suffix_index(lit: &str, idx: usize, len: usize) -> bool { + ((len > 3 && idx == len - 3) || (len > 2 && idx == len - 2)) && + is_mistyped_suffix(lit.split_at(idx).1) +}