From bd43a7ed99d86fe0e687b90e9b8f9ef803c59997 Mon Sep 17 00:00:00 2001 From: kralo Date: Sat, 27 Jan 2024 18:27:13 +0100 Subject: [PATCH 1/5] nl: fix redundant clone (clippy warning) --- src/uu/nl/src/helper.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/uu/nl/src/helper.rs b/src/uu/nl/src/helper.rs index e617010c1..ee3f3a0a9 100644 --- a/src/uu/nl/src/helper.rs +++ b/src/uu/nl/src/helper.rs @@ -36,7 +36,7 @@ pub fn parse_options(settings: &mut crate::Settings, opts: &clap::ArgMatches) -> { None => {} Some(Ok(style)) => settings.header_numbering = style, - Some(Err(message)) => errs.push(message.to_string()), + Some(Err(message)) => errs.push(message), } match opts .get_one::(options::BODY_NUMBERING) @@ -45,7 +45,7 @@ pub fn parse_options(settings: &mut crate::Settings, opts: &clap::ArgMatches) -> { None => {} Some(Ok(style)) => settings.body_numbering = style, - Some(Err(message)) => errs.push(message.to_string()), + Some(Err(message)) => errs.push(message), } match opts .get_one::(options::FOOTER_NUMBERING) @@ -54,7 +54,7 @@ pub fn parse_options(settings: &mut crate::Settings, opts: &clap::ArgMatches) -> { None => {} Some(Ok(style)) => settings.footer_numbering = style, - Some(Err(message)) => errs.push(message.to_string()), + Some(Err(message)) => errs.push(message), } match opts.get_one::(options::NUMBER_WIDTH) { None => {} From 9906e66096ae3fadb55e509f58dfe861ca187653 Mon Sep 17 00:00:00 2001 From: kralo Date: Sat, 27 Jan 2024 19:53:34 +0100 Subject: [PATCH 2/5] uucore: remove unneccessary closues This adresses only those where the fix has less letters than the original and is "trivial" (There are possibly a lot of std::string::ToString::to_string and those may only be shortened with additional imports). Found with clippy::redundant-closure-for-method-calls --- src/uu/numfmt/src/format.rs | 8 ++------ src/uu/sort/src/numeric_str_cmp.rs | 4 ++-- src/uu/sort/src/sort.rs | 2 +- src/uu/uniq/src/uniq.rs | 4 ++-- src/uu/wc/src/wc.rs | 2 +- src/uucore/src/lib/parser/parse_size.rs | 6 +++--- 6 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/uu/numfmt/src/format.rs b/src/uu/numfmt/src/format.rs index 034d900e9..5933092f6 100644 --- a/src/uu/numfmt/src/format.rs +++ b/src/uu/numfmt/src/format.rs @@ -53,11 +53,7 @@ impl<'a> Iterator for WhitespaceSplitter<'a> { .unwrap_or(haystack.len()), ); - let (field, rest) = field.split_at( - field - .find(|c: char| c.is_whitespace()) - .unwrap_or(field.len()), - ); + let (field, rest) = field.split_at(field.find(char::is_whitespace).unwrap_or(field.len())); self.s = if rest.is_empty() { None } else { Some(rest) }; @@ -107,7 +103,7 @@ fn parse_implicit_precision(s: &str) -> usize { match s.split_once('.') { Some((_, decimal_part)) => decimal_part .chars() - .take_while(|c| c.is_ascii_digit()) + .take_while(char::is_ascii_digit) .count(), None => 0, } diff --git a/src/uu/sort/src/numeric_str_cmp.rs b/src/uu/sort/src/numeric_str_cmp.rs index c6af856c2..54950f2db 100644 --- a/src/uu/sort/src/numeric_str_cmp.rs +++ b/src/uu/sort/src/numeric_str_cmp.rs @@ -221,8 +221,8 @@ pub fn numeric_str_cmp((a, a_info): (&str, &NumInfo), (b, b_info): (&str, &NumIn a_info.exponent.cmp(&b_info.exponent) } else { // walk the characters from the front until we find a difference - let mut a_chars = a.chars().filter(|c| c.is_ascii_digit()); - let mut b_chars = b.chars().filter(|c| c.is_ascii_digit()); + let mut a_chars = a.chars().filter(char::is_ascii_digit); + let mut b_chars = b.chars().filter(char::is_ascii_digit); loop { let a_next = a_chars.next(); let b_next = b_chars.next(); diff --git a/src/uu/sort/src/sort.rs b/src/uu/sort/src/sort.rs index 5fcfe2c82..4d288c940 100644 --- a/src/uu/sort/src/sort.rs +++ b/src/uu/sort/src/sort.rs @@ -985,7 +985,7 @@ impl FieldSelector { let mut range = match to { Some(Resolution::StartOfChar(mut to)) => { // We need to include the character at `to`. - to += line[to..].chars().next().map_or(1, |c| c.len_utf8()); + to += line[to..].chars().next().map_or(1, char::len_utf8); from..to } Some(Resolution::EndOfChar(to)) => from..to, diff --git a/src/uu/uniq/src/uniq.rs b/src/uu/uniq/src/uniq.rs index 72338bf96..dd8c9f5b6 100644 --- a/src/uu/uniq/src/uniq.rs +++ b/src/uu/uniq/src/uniq.rs @@ -160,7 +160,7 @@ impl Uniq { // fast path: avoid skipping if self.ignore_case && slice_start == 0 && slice_stop == len { - return closure(&mut fields_to_check.chars().flat_map(|c| c.to_uppercase())); + return closure(&mut fields_to_check.chars().flat_map(char::to_uppercase)); } // fast path: we can avoid mapping chars to upper-case, if we don't want to ignore the case @@ -173,7 +173,7 @@ impl Uniq { .chars() .skip(slice_start) .take(slice_stop) - .flat_map(|c| c.to_uppercase()), + .flat_map(char::to_uppercase), ) } else { closure(&mut fields_to_check.chars()) diff --git a/src/uu/wc/src/wc.rs b/src/uu/wc/src/wc.rs index d69647c38..cc2fd28af 100644 --- a/src/uu/wc/src/wc.rs +++ b/src/uu/wc/src/wc.rs @@ -190,7 +190,7 @@ impl<'a> Inputs<'a> { // The 1-based index of each yielded item must be tracked for error reporting. let mut with_idx = base.enumerate().map(|(i, v)| (i + 1, v)); - let files0_from_path = settings.files0_from.as_ref().map(|p| p.as_borrowed()); + let files0_from_path = settings.files0_from.as_ref().map(Input::as_borrowed); let iter = iter::from_fn(move || { let (idx, next) = with_idx.next()?; diff --git a/src/uucore/src/lib/parser/parse_size.rs b/src/uucore/src/lib/parser/parse_size.rs index 163c8942f..da1fca534 100644 --- a/src/uucore/src/lib/parser/parse_size.rs +++ b/src/uucore/src/lib/parser/parse_size.rs @@ -90,9 +90,9 @@ impl<'parser> Parser<'parser> { NumberSystem::Hexadecimal => size .chars() .take(2) - .chain(size.chars().skip(2).take_while(|c| c.is_ascii_hexdigit())) + .chain(size.chars().skip(2).take_while(char::is_ascii_hexdigit)) .collect(), - _ => size.chars().take_while(|c| c.is_ascii_digit()).collect(), + _ => size.chars().take_while(char::is_ascii_digit).collect(), }; let mut unit: &str = &size[numeric_string.len()..]; @@ -243,7 +243,7 @@ impl<'parser> Parser<'parser> { let num_digits: usize = size .chars() - .take_while(|c| c.is_ascii_digit()) + .take_while(char::is_ascii_digit) .collect::() .len(); let all_zeros = size.chars().all(|c| c == '0'); From d046d33bee94d89509c4b42ae0ee5946e2e33016 Mon Sep 17 00:00:00 2001 From: kralo Date: Sat, 27 Jan 2024 22:56:28 +0100 Subject: [PATCH 3/5] split: use inclusive range as suggested by clippy::range-plus-one --- src/uu/split/src/split.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/uu/split/src/split.rs b/src/uu/split/src/split.rs index a837bcb21..b77a6186a 100644 --- a/src/uu/split/src/split.rs +++ b/src/uu/split/src/split.rs @@ -918,8 +918,7 @@ impl<'a> Write for LineChunkWriter<'a> { // Write the line, starting from *after* the previous // separator character and ending *after* the current // separator character. - let num_bytes_written = - custom_write(&buf[prev..i + 1], &mut self.inner, self.settings)?; + let num_bytes_written = custom_write(&buf[prev..=i], &mut self.inner, self.settings)?; total_bytes_written += num_bytes_written; prev = i + 1; self.num_lines_remaining_in_current_chunk -= 1; @@ -1090,7 +1089,7 @@ impl<'a> Write for LineBytesChunkWriter<'a> { // example comment above.) Some(i) if i < self.num_bytes_remaining_in_current_chunk => { let num_bytes_written = - custom_write(&buf[..i + 1], &mut self.inner, self.settings)?; + custom_write(&buf[..=i], &mut self.inner, self.settings)?; self.num_bytes_remaining_in_current_chunk -= num_bytes_written; total_bytes_written += num_bytes_written; buf = &buf[num_bytes_written..]; From ee7f99aad0f638536b7a42f9339c8eadaf963340 Mon Sep 17 00:00:00 2001 From: kralo Date: Sat, 27 Jan 2024 23:00:14 +0100 Subject: [PATCH 4/5] cp: use inclusive range as suggested by clippy::range-plus-one --- src/uu/cp/src/cp.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/uu/cp/src/cp.rs b/src/uu/cp/src/cp.rs index 91aa28c93..796120248 100644 --- a/src/uu/cp/src/cp.rs +++ b/src/uu/cp/src/cp.rs @@ -1622,7 +1622,7 @@ fn aligned_ancestors<'a>(source: &'a Path, dest: &'a Path) -> Vec<(&'a Path, &'a // Get the matching number of elements from the ancestors of the // destination path (for example, get "d/a" and "d/a/b"). let k = source_ancestors.len(); - let dest_ancestors = &dest_ancestors[1..1 + k]; + let dest_ancestors = &dest_ancestors[1..=k]; // Now we have two slices of the same length, so we zip them. let mut result = vec![]; From 43212c6d895602f69fa26ed5ee68cf36be16d2df Mon Sep 17 00:00:00 2001 From: kralo Date: Sun, 28 Jan 2024 08:37:23 +0100 Subject: [PATCH 5/5] ci: include more clippy complaints --- .github/workflows/code-quality.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml index 289830f81..a3cf9f455 100644 --- a/.github/workflows/code-quality.yml +++ b/.github/workflows/code-quality.yml @@ -121,7 +121,7 @@ jobs: run: | ## `cargo clippy` lint testing unset fault - CLIPPY_FLAGS="-W clippy::default_trait_access -W clippy::manual_string_new -W clippy::cognitive_complexity -W clippy::implicit_clone" + CLIPPY_FLAGS="-W clippy::default_trait_access -W clippy::manual_string_new -W clippy::cognitive_complexity -W clippy::implicit_clone -W clippy::range-plus-one -W clippy::redundant-clone" fault_type="${{ steps.vars.outputs.FAULT_TYPE }}" fault_prefix=$(echo "$fault_type" | tr '[:lower:]' '[:upper:]') # * convert any warnings to GHA UI annotations; ref: