From a7fa98b4266c3b3d67c4a69c57362f6aee883027 Mon Sep 17 00:00:00 2001 From: Yuri Astrakhan Date: Wed, 4 Feb 2026 03:20:24 -0500 Subject: [PATCH 1/5] chore: fix `redundant_closure_for_method_calls` Address `clippy::redundant_closure_for_method_calls` --- Cargo.toml | 1 - src/uu/checksum_common/src/lib.rs | 2 +- src/uu/chgrp/src/chgrp.rs | 2 +- src/uu/chroot/src/chroot.rs | 2 +- src/uu/cp/src/copydir.rs | 4 ++-- src/uu/csplit/src/patterns.rs | 6 +++--- src/uu/cut/src/cut.rs | 2 +- src/uu/date/src/date.rs | 2 +- src/uu/date/src/locale.rs | 2 +- src/uu/dd/src/blocks.rs | 2 +- src/uu/df/src/columns.rs | 2 +- src/uu/dircolors/src/dircolors.rs | 2 +- src/uu/du/src/du.rs | 2 +- src/uu/env/src/env.rs | 8 ++++---- src/uu/env/src/native_int_str.rs | 4 ++-- src/uu/expand/src/expand.rs | 2 +- src/uu/fmt/src/fmt.rs | 2 +- src/uu/fmt/src/parasplit.rs | 4 ++-- src/uu/id/src/id.rs | 2 +- src/uu/join/src/join.rs | 2 +- src/uu/kill/src/kill.rs | 2 +- src/uu/ls/src/colors.rs | 4 ++-- src/uu/ls/src/ls.rs | 16 ++++++++-------- src/uu/mktemp/src/mktemp.rs | 2 +- src/uu/mv/benches/mv_bench.rs | 2 +- src/uu/mv/src/hardlink.rs | 2 +- src/uu/mv/src/mv.rs | 2 +- src/uu/numfmt/benches/numfmt_bench.rs | 14 +++++++------- src/uu/numfmt/src/numfmt.rs | 4 ++-- src/uu/od/src/parse_inputs.rs | 2 +- src/uu/pr/src/pr.rs | 2 +- src/uu/rm/benches/rm_bench.rs | 4 ++-- src/uu/seq/src/seq.rs | 2 +- src/uu/sleep/src/sleep.rs | 4 ++-- src/uu/sort/src/ext_sort.rs | 3 +-- src/uu/sort/src/sort.rs | 12 ++++++------ src/uu/stty/src/stty.rs | 4 ++-- src/uu/tail/src/args.rs | 8 ++++---- src/uu/test/src/test.rs | 6 +++--- src/uu/touch/src/touch.rs | 4 ++-- src/uu/tr/src/tr.rs | 2 +- src/uu/uname/src/uname.rs | 2 +- src/uu/unexpand/src/unexpand.rs | 2 +- src/uu/users/src/users.rs | 2 +- src/uu/who/src/platform/unix.rs | 2 +- src/uucore/src/lib/features/checksum/validate.rs | 2 +- src/uucore/src/lib/features/fs.rs | 4 ++-- src/uucore/src/lib/features/parser/num_parser.rs | 4 ++-- .../lib/features/parser/shortcut_value_parser.rs | 2 +- src/uucore/src/lib/features/systemd_logind.rs | 2 +- src/uucore/src/lib/features/utmpx.rs | 6 +++--- src/uucore/src/lib/features/version_cmp.rs | 4 ++-- tests/by-util/test_sort.rs | 2 +- 53 files changed, 94 insertions(+), 96 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index c358721eb5d..687181b79dc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -655,7 +655,6 @@ missing_errors_doc = "allow" # 1572 missing_panics_doc = "allow" # 946 must_use_candidate = "allow" # 322 match_same_arms = "allow" # 204 -redundant_closure_for_method_calls = "allow" # 125 cast_possible_truncation = "allow" # 122 too_many_lines = "allow" # 101 cast_possible_wrap = "allow" # 78 diff --git a/src/uu/checksum_common/src/lib.rs b/src/uu/checksum_common/src/lib.rs index 1d5a2726520..f751870061a 100644 --- a/src/uu/checksum_common/src/lib.rs +++ b/src/uu/checksum_common/src/lib.rs @@ -159,7 +159,7 @@ pub fn checksum_main( let files = matches .get_many::(options::FILE) .unwrap() - .map(|s| s.as_os_str()); + .map(OsString::as_os_str); if check { // cksum does not support '--check'ing legacy algorithms diff --git a/src/uu/chgrp/src/chgrp.rs b/src/uu/chgrp/src/chgrp.rs index f681da37eed..cd890e49a6f 100644 --- a/src/uu/chgrp/src/chgrp.rs +++ b/src/uu/chgrp/src/chgrp.rs @@ -51,7 +51,7 @@ fn get_dest_gid(matches: &ArgMatches) -> UResult<(Option, String)> { } else { let group = matches .get_one::(options::ARG_GROUP) - .map(|s| s.as_str()) + .map(String::as_str) .unwrap_or_default(); raw_group = group.to_string(); if group.is_empty() { diff --git a/src/uu/chroot/src/chroot.rs b/src/uu/chroot/src/chroot.rs index e6c4ee70192..7828d2377d5 100644 --- a/src/uu/chroot/src/chroot.rs +++ b/src/uu/chroot/src/chroot.rs @@ -187,7 +187,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { } let commands = match matches.get_many::(options::COMMAND) { - Some(v) => v.map(|s| s.as_str()).collect(), + Some(v) => v.map(String::as_str).collect(), None => vec![], }; diff --git a/src/uu/cp/src/copydir.rs b/src/uu/cp/src/copydir.rs index 7f63b5e7e05..e12769e500e 100644 --- a/src/uu/cp/src/copydir.rs +++ b/src/uu/cp/src/copydir.rs @@ -94,7 +94,7 @@ fn get_local_to_root_parent( /// Given an iterator, return all its items except the last. fn skip_last(mut iter: impl Iterator) -> impl Iterator { let last = iter.next(); - iter.scan(last, |state, item| state.replace(item)) + iter.scan(last, Option::replace) } /// Paths that are invariant throughout the traversal when copying a directory. @@ -121,7 +121,7 @@ impl<'a> Context<'a> { let root_path = current_dir.join(root); let target_is_file = target.is_file(); let root_parent = if target.exists() && !root.to_str().unwrap().ends_with("/.") { - root_path.parent().map(|p| p.to_path_buf()) + root_path.parent().map(Path::to_path_buf) } else if root == Path::new(".") && target.is_dir() { // Special case: when copying current directory (.) to an existing directory, // we don't want to use the parent path as root_parent because we want to diff --git a/src/uu/csplit/src/patterns.rs b/src/uu/csplit/src/patterns.rs index 6710484e9e5..505036fee0f 100644 --- a/src/uu/csplit/src/patterns.rs +++ b/src/uu/csplit/src/patterns.rs @@ -193,7 +193,7 @@ mod tests { fn up_to_line_pattern() { let input: Vec = vec!["24", "42", "{*}", "50", "{4}"] .into_iter() - .map(|v| v.to_string()) + .map(ToString::to_string) .collect(); let patterns = get_patterns(input.as_slice()).unwrap(); assert_eq!(patterns.len(), 3); @@ -225,7 +225,7 @@ mod tests { "/test6.*end$/-3", ] .into_iter() - .map(|v| v.to_string()) + .map(ToString::to_string) .collect(); let patterns = get_patterns(input.as_slice()).unwrap(); assert_eq!(patterns.len(), 6); @@ -287,7 +287,7 @@ mod tests { "%test6.*end$%-3", ] .into_iter() - .map(|v| v.to_string()) + .map(ToString::to_string) .collect(); let patterns = get_patterns(input.as_slice()).unwrap(); assert_eq!(patterns.len(), 6); diff --git a/src/uu/cut/src/cut.rs b/src/uu/cut/src/cut.rs index dd0ea9d8ad9..7819683f4d8 100644 --- a/src/uu/cut/src/cut.rs +++ b/src/uu/cut/src/cut.rs @@ -264,7 +264,7 @@ fn cut_fields_newline_char_delim( ) -> UResult<()> { let buf_in = BufReader::new(reader); - let segments: Vec<_> = buf_in.split(newline_char).filter_map(|x| x.ok()).collect(); + let segments: Vec<_> = buf_in.split(newline_char).filter_map(Result::ok).collect(); let mut print_delim = false; for &Range { low, high } in ranges { diff --git a/src/uu/date/src/date.rs b/src/uu/date/src/date.rs index 2a22ee50a75..b7b94fd8a58 100644 --- a/src/uu/date/src/date.rs +++ b/src/uu/date/src/date.rs @@ -747,7 +747,7 @@ fn build_tz_abbrev_map() -> HashMap { /// Uses lazy-loaded cache with preferred mappings for disambiguation. fn tz_abbrev_to_iana(abbrev: &str) -> Option<&str> { let cache = TZ_ABBREV_CACHE.get_or_init(build_tz_abbrev_map); - cache.get(abbrev).map(|s| s.as_str()) + cache.get(abbrev).map(String::as_str) } /// Attempts to parse a date string that contains a timezone abbreviation (e.g. "EST"). diff --git a/src/uu/date/src/locale.rs b/src/uu/date/src/locale.rs index c190c1a0dad..fe96cb6058a 100644 --- a/src/uu/date/src/locale.rs +++ b/src/uu/date/src/locale.rs @@ -188,7 +188,7 @@ mod tests { if ptr.is_null() { None } else { - CStr::from_ptr(ptr).to_str().ok().map(|s| s.to_string()) + CStr::from_ptr(ptr).to_str().ok().map(ToString::to_string) } }; diff --git a/src/uu/dd/src/blocks.rs b/src/uu/dd/src/blocks.rs index b7449c98be7..86d36c0e91d 100644 --- a/src/uu/dd/src/blocks.rs +++ b/src/uu/dd/src/blocks.rs @@ -25,7 +25,7 @@ const SPACE: u8 = b' '; fn block(buf: &[u8], cbs: usize, sync: bool, rstat: &mut ReadStat) -> Vec> { let mut blocks = buf .split(|&e| e == NEWLINE) - .map(|split| split.to_vec()) + .map(<[u8]>::to_vec) .fold(Vec::new(), |mut blocks, mut split| { if split.len() > cbs { rstat.records_truncated += 1; diff --git a/src/uu/df/src/columns.rs b/src/uu/df/src/columns.rs index 0fcd20865d5..fe3c0155a54 100644 --- a/src/uu/df/src/columns.rs +++ b/src/uu/df/src/columns.rs @@ -99,7 +99,7 @@ impl Column { let names = matches .get_many::(OPT_OUTPUT) .unwrap() - .map(|s| s.as_str()); + .map(String::as_str); let mut seen: Vec<&str> = vec![]; let mut columns = vec![]; for name in names { diff --git a/src/uu/dircolors/src/dircolors.rs b/src/uu/dircolors/src/dircolors.rs index 72e18d55d4f..815c3422e42 100644 --- a/src/uu/dircolors/src/dircolors.rs +++ b/src/uu/dircolors/src/dircolors.rs @@ -122,7 +122,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { let files = matches .get_many::(options::FILE) - .map_or(vec![], |file_values| file_values.collect()); + .map_or(vec![], Iterator::collect); // clap provides .conflicts_with / .conflicts_with_all, but we want to // manually handle conflicts so we can match the output of GNU coreutils diff --git a/src/uu/du/src/du.rs b/src/uu/du/src/du.rs index 46c51440d31..4844f5cc694 100644 --- a/src/uu/du/src/du.rs +++ b/src/uu/du/src/du.rs @@ -1032,7 +1032,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { let max_depth = parse_depth( matches .get_one::(options::MAX_DEPTH) - .map(|s| s.as_str()), + .map(String::as_str), summarize, )?; diff --git a/src/uu/env/src/env.rs b/src/uu/env/src/env.rs index aab1ef48296..553ace2a8db 100644 --- a/src/uu/env/src/env.rs +++ b/src/uu/env/src/env.rs @@ -892,16 +892,16 @@ fn apply_removal_of_all_env_vars(opts: &Options<'_>) { fn make_options(matches: &clap::ArgMatches) -> UResult> { let ignore_env = matches.get_flag("ignore-environment"); let line_ending = LineEnding::from_zero_flag(matches.get_flag("null")); - let running_directory = matches.get_one::("chdir").map(|s| s.as_os_str()); + let running_directory = matches.get_one::("chdir").map(OsString::as_os_str); let files = match matches.get_many::("file") { - Some(v) => v.map(|s| s.as_os_str()).collect(), + Some(v) => v.map(OsString::as_os_str).collect(), None => Vec::with_capacity(0), }; let unsets = match matches.get_many::("unset") { - Some(v) => v.map(|s| s.as_os_str()).collect(), + Some(v) => v.map(OsString::as_os_str).collect(), None => Vec::with_capacity(0), }; - let argv0 = matches.get_one::("argv0").map(|s| s.as_os_str()); + let argv0 = matches.get_one::("argv0").map(OsString::as_os_str); #[cfg(unix)] let ignore_signal = build_signal_request(matches, options::IGNORE_SIGNAL)?; diff --git a/src/uu/env/src/native_int_str.rs b/src/uu/env/src/native_int_str.rs index 3e26dad0740..5ae6952364e 100644 --- a/src/uu/env/src/native_int_str.rs +++ b/src/uu/env/src/native_int_str.rs @@ -257,7 +257,7 @@ impl<'a> NativeStr<'a> { let n_prefix = to_native_int_representation(prefix); let result = self.match_cow( |b| b.strip_prefix(&*n_prefix).ok_or(()), - |o| o.strip_prefix(&*n_prefix).map(|x| x.to_vec()).ok_or(()), + |o| o.strip_prefix(&*n_prefix).map(<[u8]>::to_vec).ok_or(()), ); result.ok() } @@ -266,7 +266,7 @@ impl<'a> NativeStr<'a> { let n_prefix = to_native_int_representation(prefix); let result = self.match_cow_native( |b| b.strip_prefix(&*n_prefix).ok_or(()), - |o| o.strip_prefix(&*n_prefix).map(|x| x.to_vec()).ok_or(()), + |o| o.strip_prefix(&*n_prefix).map(<[u8]>::to_vec).ok_or(()), ); result.ok() } diff --git a/src/uu/expand/src/expand.rs b/src/uu/expand/src/expand.rs index 685cb44ac98..96ed5181dac 100644 --- a/src/uu/expand/src/expand.rs +++ b/src/uu/expand/src/expand.rs @@ -184,7 +184,7 @@ struct Options { impl Options { fn new(matches: &ArgMatches) -> Result { let (remaining_mode, tabstops) = match matches.get_many::(options::TABS) { - Some(s) => tabstops_parse(&s.map(|s| s.as_str()).collect::>().join(","))?, + Some(s) => tabstops_parse(&s.map(String::as_str).collect::>().join(","))?, None => (RemainingMode::None, vec![DEFAULT_TABSTOP]), }; diff --git a/src/uu/fmt/src/fmt.rs b/src/uu/fmt/src/fmt.rs index c06c5702b41..42f92d6437f 100644 --- a/src/uu/fmt/src/fmt.rs +++ b/src/uu/fmt/src/fmt.rs @@ -288,7 +288,7 @@ fn extract_files(matches: &ArgMatches) -> UResult> { }) .collect(); - if files.as_ref().is_ok_and(|f| f.is_empty()) { + if files.as_ref().is_ok_and(Vec::is_empty) { Ok(vec![OsString::from("-")]) } else { files diff --git a/src/uu/fmt/src/parasplit.rs b/src/uu/fmt/src/parasplit.rs index d6a50ef5f42..67673747dd3 100644 --- a/src/uu/fmt/src/parasplit.rs +++ b/src/uu/fmt/src/parasplit.rs @@ -290,7 +290,7 @@ impl Iterator for FileLines<'_> { // not truly blank we will not allow mail headers on the // following line) if pmatch - && n[poffset + self.opts.prefix.as_ref().map_or(0, |s| s.len())..] + && n[poffset + self.opts.prefix.as_ref().map_or(0, String::len)..] .iter() .all(|&b| is_fmt_whitespace_byte(b)) { @@ -304,7 +304,7 @@ impl Iterator for FileLines<'_> { } // figure out the indent, prefix, and prefixindent ending points - let prefix_end = poffset + self.opts.prefix.as_ref().map_or(0, |s| s.len()); + let prefix_end = poffset + self.opts.prefix.as_ref().map_or(0, String::len); let (indent_end, prefix_len, indent_len) = self.compute_indent(&n[..], prefix_end); Some(Line::FormatLine(FileLine { diff --git a/src/uu/id/src/id.rs b/src/uu/id/src/id.rs index 5bd27bc3e59..d15101a46a4 100644 --- a/src/uu/id/src/id.rs +++ b/src/uu/id/src/id.rs @@ -311,7 +311,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { let groups = entries::get_groups_gnu(Some(gid))?; let groups = if state.user_specified { - possible_pw.as_ref().map(|p| p.belongs_to()).unwrap() + possible_pw.as_ref().map(Passwd::belongs_to).unwrap() } else { groups.clone() }; diff --git a/src/uu/join/src/join.rs b/src/uu/join/src/join.rs index 45aa79cef7d..1d6801ba47f 100644 --- a/src/uu/join/src/join.rs +++ b/src/uu/join/src/join.rs @@ -765,7 +765,7 @@ fn parse_print_settings(matches: &clap::ArgMatches) -> UResult<(bool, bool, bool } fn get_and_parse_field_number(matches: &clap::ArgMatches, key: &str) -> UResult> { - let value = matches.get_one::(key).map(|s| s.as_str()); + let value = matches.get_one::(key).map(String::as_str); parse_field_number_option(value) } diff --git a/src/uu/kill/src/kill.rs b/src/uu/kill/src/kill.rs index 94aa81964b6..ac40fa8cb6f 100644 --- a/src/uu/kill/src/kill.rs +++ b/src/uu/kill/src/kill.rs @@ -143,7 +143,7 @@ fn handle_obsolete(args: &mut Vec) -> Option { let slice = args[1].as_str(); if let Some(signal) = slice.strip_prefix('-') { // With '-', a signal name must start with an uppercase char - if signal.chars().next().is_some_and(|c| c.is_lowercase()) { + if signal.chars().next().is_some_and(char::is_lowercase) { return None; } // Check if it is a valid signal diff --git a/src/uu/ls/src/colors.rs b/src/uu/ls/src/colors.rs index fa9a8903bb8..958b3c62581 100644 --- a/src/uu/ls/src/colors.rs +++ b/src/uu/ls/src/colors.rs @@ -388,7 +388,7 @@ impl<'a> StyleManager<'a> { if target_missing { let orphan_raw = self.indicator_codes.get(&Indicator::OrphanedSymbolicLink); - let orphan_raw_is_empty = orphan_raw.is_some_and(|value| value.is_empty()); + let orphan_raw_is_empty = orphan_raw.is_some_and(String::is_empty); if orphan_enabled && (!orphan_raw_is_empty || self.ln_color_from_target) { return Some(Indicator::OrphanedSymbolicLink); } @@ -541,7 +541,7 @@ pub(crate) fn color_name( } } - if target_symlink.is_none() && path.file_type().is_some_and(|ft| ft.is_symlink()) { + if target_symlink.is_none() && path.file_type().is_some_and(fs::FileType::is_symlink) { if let Some(colored) = style_manager.color_symlink_name(path, name.clone(), wrap) { return colored; } diff --git a/src/uu/ls/src/ls.rs b/src/uu/ls/src/ls.rs index f2f9cc30137..96f07820320 100644 --- a/src/uu/ls/src/ls.rs +++ b/src/uu/ls/src/ls.rs @@ -269,7 +269,7 @@ fn parse_time_style(options: &clap::ArgMatches) -> Result<(String, Option(options::TIME_STYLE) - .map(|s| s.to_owned()) + .map(ToOwned::to_owned) .or_else(|| std::env::var("TIME_STYLE").ok()) { //If both FULL_TIME and TIME_STYLE are present @@ -1953,7 +1953,7 @@ impl PathData { } else { dir_entry .as_ref() - .map(|inner| inner.file_name()) + .map(DirEntry::file_name) .unwrap_or_default() }; @@ -2048,7 +2048,7 @@ impl PathData { fn file_type(&self) -> Option<&FileType> { self.ft - .get_or_init(|| self.metadata().map(|md| md.file_type())) + .get_or_init(|| self.metadata().map(Metadata::file_type)) .as_ref() } @@ -2059,7 +2059,7 @@ impl PathData { #[cfg(unix)] fn is_executable_file(&self) -> bool { - self.file_type().is_some_and(|f| f.is_file()) + self.file_type().is_some_and(FileType::is_file) && self.metadata().is_some_and(file_is_executable) } @@ -2331,7 +2331,7 @@ fn sort_entries(entries: &mut [PathData], config: &Config) { ) }), Sort::Size => { - entries.sort_by_key(|k| Reverse(k.metadata().map_or(0, |md| md.len()))); + entries.sort_by_key(|k| Reverse(k.metadata().map_or(0, Metadata::len))); } // The default sort in GNU ls is case insensitive Sort::Name => entries.sort_by(|a, b| a.display_name().cmp(b.display_name())), @@ -2504,7 +2504,7 @@ fn enter_directory( for e in entries .iter() .skip(if config.files == Files::All { 2 } else { 0 }) - .filter(|p| p.file_type().is_some_and(|ft| ft.is_dir())) + .filter(|p| p.file_type().is_some_and(FileType::is_dir)) { match fs::read_dir(e.path()) { Err(err) => { @@ -3381,7 +3381,7 @@ fn display_item_name( } if config.format == Format::Long - && path.file_type().is_some_and(|ft| ft.is_symlink()) + && path.file_type().is_some_and(FileType::is_symlink) && !path.must_dereference { match path.path().read_link() { @@ -3407,7 +3407,7 @@ fn display_item_name( let target_data = PathData::new( resolved_target, None, - target_path.file_name().map(|s| s.to_os_string()), + target_path.file_name().map(OsStr::to_os_string), config, false, ); diff --git a/src/uu/mktemp/src/mktemp.rs b/src/uu/mktemp/src/mktemp.rs index d22f7500a85..1a6ea61b348 100644 --- a/src/uu/mktemp/src/mktemp.rs +++ b/src/uu/mktemp/src/mktemp.rs @@ -132,7 +132,7 @@ impl Options { } Some(template) => { let tmpdir = if env::var(TMPDIR_ENV_VAR).is_ok() && matches.get_flag(OPT_T) { - env::var_os(TMPDIR_ENV_VAR).map(|t| t.into()) + env::var_os(TMPDIR_ENV_VAR).map(Into::into) } else if tmpdir.is_some() { tmpdir } else if matches.get_flag(OPT_T) || matches.contains_id(OPT_TMPDIR) { diff --git a/src/uu/mv/benches/mv_bench.rs b/src/uu/mv/benches/mv_bench.rs index 80c5500fb00..f6e82c79de9 100644 --- a/src/uu/mv/benches/mv_bench.rs +++ b/src/uu/mv/benches/mv_bench.rs @@ -59,7 +59,7 @@ fn mv_multiple_to_dir(bencher: Bencher) { (temp_dir, args) }) .bench_values(|(temp_dir, args)| { - let arg_refs: Vec<&str> = args.iter().map(|s| s.as_str()).collect(); + let arg_refs: Vec<&str> = args.iter().map(String::as_str).collect(); black_box(run_util_function(uumain, &arg_refs)); drop(temp_dir); }); diff --git a/src/uu/mv/src/hardlink.rs b/src/uu/mv/src/hardlink.rs index 61ad74d4742..775d3b3c490 100644 --- a/src/uu/mv/src/hardlink.rs +++ b/src/uu/mv/src/hardlink.rs @@ -265,7 +265,7 @@ impl HardlinkGroupScanner { #[cfg(unix)] pub fn stats(&self) -> ScannerStats { let total_groups = self.hardlink_groups.len(); - let total_files = self.hardlink_groups.values().map(|group| group.len()).sum(); + let total_files = self.hardlink_groups.values().map(Vec::len).sum(); ScannerStats { total_groups, diff --git a/src/uu/mv/src/mv.rs b/src/uu/mv/src/mv.rs index 9970c1e426e..03d8b7b0e48 100644 --- a/src/uu/mv/src/mv.rs +++ b/src/uu/mv/src/mv.rs @@ -360,7 +360,7 @@ fn parse_paths(files: &[OsString], opts: &Options) -> Vec { .map(|p| p.components().as_path().to_owned()) .collect::>() } else { - paths.map(|p| p.to_owned()).collect::>() + paths.map(ToOwned::to_owned).collect::>() } } diff --git a/src/uu/numfmt/benches/numfmt_bench.rs b/src/uu/numfmt/benches/numfmt_bench.rs index aed3fb03583..e51cb5caffb 100644 --- a/src/uu/numfmt/benches/numfmt_bench.rs +++ b/src/uu/numfmt/benches/numfmt_bench.rs @@ -18,7 +18,7 @@ fn numfmt_to_si(bencher: Bencher, count: usize) { args }) .bench_values(|args| { - let arg_refs: Vec<&str> = args.iter().map(|s| s.as_str()).collect(); + let arg_refs: Vec<&str> = args.iter().map(String::as_str).collect(); black_box(run_util_function(uumain, &arg_refs)); }); } @@ -34,7 +34,7 @@ fn numfmt_to_si_precision(bencher: Bencher, count: usize) { args }) .bench_values(|args| { - let arg_refs: Vec<&str> = args.iter().map(|s| s.as_str()).collect(); + let arg_refs: Vec<&str> = args.iter().map(String::as_str).collect(); black_box(run_util_function(uumain, &arg_refs)); }); } @@ -50,7 +50,7 @@ fn numfmt_to_iec(bencher: Bencher, count: usize) { args }) .bench_values(|args| { - let arg_refs: Vec<&str> = args.iter().map(|s| s.as_str()).collect(); + let arg_refs: Vec<&str> = args.iter().map(String::as_str).collect(); black_box(run_util_function(uumain, &arg_refs)); }); } @@ -67,7 +67,7 @@ fn numfmt_from_si(bencher: Bencher, count: usize) { args }) .bench_values(|args| { - let arg_refs: Vec<&str> = args.iter().map(|s| s.as_str()).collect(); + let arg_refs: Vec<&str> = args.iter().map(String::as_str).collect(); black_box(run_util_function(uumain, &arg_refs)); }); } @@ -88,7 +88,7 @@ fn numfmt_large_numbers_si(bencher: Bencher, count: usize) { args }) .bench_values(|args| { - let arg_refs: Vec<&str> = args.iter().map(|s| s.as_str()).collect(); + let arg_refs: Vec<&str> = args.iter().map(String::as_str).collect(); black_box(run_util_function(uumain, &arg_refs)); }); } @@ -104,7 +104,7 @@ fn numfmt_padding(bencher: Bencher, (count, padding): (usize, usize)) { args }) .bench_values(|args| { - let arg_refs: Vec<&str> = args.iter().map(|s| s.as_str()).collect(); + let arg_refs: Vec<&str> = args.iter().map(String::as_str).collect(); black_box(run_util_function(uumain, &arg_refs)); }); } @@ -121,7 +121,7 @@ fn numfmt_round_modes(bencher: Bencher, (round_mode, count): (&str, usize)) { args }) .bench_values(|args| { - let arg_refs: Vec<&str> = args.iter().map(|s| s.as_str()).collect(); + let arg_refs: Vec<&str> = args.iter().map(String::as_str).collect(); black_box(run_util_function(uumain, &arg_refs)); }); } diff --git a/src/uu/numfmt/src/numfmt.rs b/src/uu/numfmt/src/numfmt.rs index 69f1257f6cf..4a19fa8a722 100644 --- a/src/uu/numfmt/src/numfmt.rs +++ b/src/uu/numfmt/src/numfmt.rs @@ -341,9 +341,9 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { } pub fn uu_app() -> Command { - Command::new(util_name()) + Command::new(uucore::util_name()) .version(uucore::crate_version!()) - .help_template(uucore::localized_help_template(util_name())) + .help_template(uucore::localized_help_template(uucore::util_name())) .about(translate!("numfmt-about")) .after_help(translate!("numfmt-after-help")) .override_usage(format_usage(&translate!("numfmt-usage"))) diff --git a/src/uu/od/src/parse_inputs.rs b/src/uu/od/src/parse_inputs.rs index 3d6263e56dc..414e11768ab 100644 --- a/src/uu/od/src/parse_inputs.rs +++ b/src/uu/od/src/parse_inputs.rs @@ -18,7 +18,7 @@ pub trait CommandLineOpts { impl CommandLineOpts for ArgMatches { fn inputs(&self) -> Vec<&str> { self.get_many::(options::FILENAME) - .map(|values| values.map(|s| s.as_str()).collect()) + .map(|values| values.map(String::as_str).collect()) .unwrap_or_default() } diff --git a/src/uu/pr/src/pr.rs b/src/uu/pr/src/pr.rs index f000abbd72f..6fc52334632 100644 --- a/src/uu/pr/src/pr.rs +++ b/src/uu/pr/src/pr.rs @@ -339,7 +339,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { let mut files = matches .get_many::(options::FILES) - .map(|v| v.map(|s| s.as_str()).collect::>()) + .map(|v| v.map(String::as_str).collect::>()) .unwrap_or_default() .clone(); if files.is_empty() { diff --git a/src/uu/rm/benches/rm_bench.rs b/src/uu/rm/benches/rm_bench.rs index 1e37bb130ff..31b62072a5f 100644 --- a/src/uu/rm/benches/rm_bench.rs +++ b/src/uu/rm/benches/rm_bench.rs @@ -55,7 +55,7 @@ fn rm_multiple_files(bencher: Bencher) { (temp_dir, paths) }) .bench_values(|(temp_dir, paths)| { - let args: Vec<&str> = paths.iter().map(|s| s.as_str()).collect(); + let args: Vec<&str> = paths.iter().map(String::as_str).collect(); black_box(run_util_function(uumain, &args)); drop(temp_dir); }); @@ -100,7 +100,7 @@ fn rm_force_files(bencher: Bencher) { }) .bench_values(|(temp_dir, paths)| { let mut args = vec!["-f"]; - let path_refs: Vec<&str> = paths.iter().map(|s| s.as_str()).collect(); + let path_refs: Vec<&str> = paths.iter().map(String::as_str).collect(); args.extend(path_refs); black_box(run_util_function(uumain, &args)); drop(temp_dir); diff --git a/src/uu/seq/src/seq.rs b/src/uu/seq/src/seq.rs index 24f76423b56..0f32cf01f7c 100644 --- a/src/uu/seq/src/seq.rs +++ b/src/uu/seq/src/seq.rs @@ -115,7 +115,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { .cloned() .unwrap_or_else(|| OsString::from("\n")), equal_width: matches.get_flag(OPT_EQUAL_WIDTH), - format: matches.get_one::(OPT_FORMAT).map(|s| s.as_str()), + format: matches.get_one::(OPT_FORMAT).map(String::as_str), }; if options.equal_width && options.format.is_some() { diff --git a/src/uu/sleep/src/sleep.rs b/src/uu/sleep/src/sleep.rs index dd29d92b36e..5b1a1f510a0 100644 --- a/src/uu/sleep/src/sleep.rs +++ b/src/uu/sleep/src/sleep.rs @@ -30,7 +30,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { translate!("sleep-error-missing-operand", "program" => uucore::execution_phrase()), ) })? - .map(|s| s.as_str()) + .map(String::as_str) .collect::>(); sleep(&numbers) @@ -65,7 +65,7 @@ fn sleep(args: &[&str]) -> UResult<()> { None } }) - .fold(Duration::ZERO, |acc, n| acc.saturating_add(n)); + .fold(Duration::ZERO, Duration::saturating_add); if arg_error { return Err(UUsageError::new(1, "")); diff --git a/src/uu/sort/src/ext_sort.rs b/src/uu/sort/src/ext_sort.rs index 6e4e98a58a6..74a6e1fd7eb 100644 --- a/src/uu/sort/src/ext_sort.rs +++ b/src/uu/sort/src/ext_sort.rs @@ -24,7 +24,6 @@ use uucore::error::{UResult, strip_errno}; use crate::Output; use crate::chunks::RecycledChunk; -use crate::merge::ClosedTmpFile; use crate::merge::WriteableCompressedTmpFile; use crate::merge::WriteablePlainTmpFile; use crate::merge::WriteableTmpFile; @@ -133,7 +132,7 @@ fn reader_writer< match read_result { ReadResult::WroteChunksToFile { tmp_files } => { merge::merge_with_file_limit::<_, _, Tmp>( - tmp_files.into_iter().map(|c| c.reopen()), + tmp_files.into_iter().map(merge::ClosedTmpFile::reopen), settings, output, tmp_dir, diff --git a/src/uu/sort/src/sort.rs b/src/uu/sort/src/sort.rs index 4ea294ee6de..ba5d34a5660 100644 --- a/src/uu/sort/src/sort.rs +++ b/src/uu/sort/src/sort.rs @@ -1506,7 +1506,7 @@ impl GlobalOptionFlags { fn from_matches(matches: &ArgMatches) -> Self { let sort_value = matches .get_one::(options::modes::SORT) - .map(|s| s.as_str()); + .map(String::as_str); Self { keys_specified: matches.contains_id(options::KEY), ignore_leading_blanks: matches.get_flag(options::IGNORE_LEADING_BLANKS), @@ -1537,7 +1537,7 @@ fn parse_usize_or_max(num: &str) -> Option { } fn parse_legacy_part(spec: &str) -> Option { - let idx = spec.chars().take_while(|c| c.is_ascii_digit()).count(); + let idx = spec.chars().take_while(char::is_ascii_digit).count(); if idx == 0 { return None; } @@ -1547,7 +1547,7 @@ fn parse_legacy_part(spec: &str) -> Option { let mut rest = &spec[idx..]; if let Some(stripped) = rest.strip_prefix('.') { - let char_idx = stripped.chars().take_while(|c| c.is_ascii_digit()).count(); + let char_idx = stripped.chars().take_while(char::is_ascii_digit).count(); if char_idx == 0 { return None; } @@ -2000,7 +2000,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { let mut files: Vec = if matches.contains_id(options::FILES0_FROM) { let files0_from: PathBuf = matches .get_one::(options::FILES0_FROM) - .map(|v| v.into()) + .map(Into::into) .unwrap_or_default(); // Cannot combine FILES with FILES0_FROM @@ -2190,7 +2190,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { || matches!( matches .get_one::(options::check::CHECK) - .map(|s| s.as_str()), + .map(String::as_str), Some(options::check::SILENT | options::check::QUIET) ) { @@ -2978,7 +2978,7 @@ enum Month { fn month_parse(line: &[u8]) -> Month { let line = line.trim_ascii_start(); - match line.get(..3).map(|x| x.to_ascii_uppercase()).as_deref() { + match line.get(..3).map(<[u8]>::to_ascii_uppercase).as_deref() { Some(b"JAN") => Month::January, Some(b"FEB") => Month::February, Some(b"MAR") => Month::March, diff --git a/src/uu/stty/src/stty.rs b/src/uu/stty/src/stty.rs index e6336aab16f..1ffec1ad2ce 100644 --- a/src/uu/stty/src/stty.rs +++ b/src/uu/stty/src/stty.rs @@ -212,7 +212,7 @@ impl<'a> Options<'a> { device_name, settings: matches .get_many::(options::SETTINGS) - .map(|v| v.map(|s| s.as_ref()).collect()), + .map(|v| v.map(AsRef::as_ref).collect()), }) } } @@ -713,7 +713,7 @@ fn parse_baud_with_rounding(normalized: &str) -> Option { // Validate all remaining chars are digits let rest: Vec<_> = chars.collect(); - if !rest.iter().all(|c| c.is_ascii_digit()) { + if !rest.iter().all(char::is_ascii_digit) { return None; } diff --git a/src/uu/tail/src/args.rs b/src/uu/tail/src/args.rs index 63bd2b0da01..e1c1fe9aee1 100644 --- a/src/uu/tail/src/args.rs +++ b/src/uu/tail/src/args.rs @@ -196,7 +196,7 @@ impl Settings { follow_retry, matches .get_one::(options::FOLLOW) - .map(|s| s.as_str()), + .map(String::as_str), ) { // -F and --follow if -F is specified after --follow. We don't need to care about the // value of --follow. @@ -287,11 +287,11 @@ impl Settings { } pub fn has_only_stdin(&self) -> bool { - self.inputs.iter().all(|input| input.is_stdin()) + self.inputs.iter().all(Input::is_stdin) } pub fn has_stdin(&self) -> bool { - self.inputs.iter().any(|input| input.is_stdin()) + self.inputs.iter().any(Input::is_stdin) } pub fn num_inputs(&self) -> usize { @@ -344,7 +344,7 @@ impl Settings { /// process. pub fn verify(&self) -> VerificationResult { // Mimic GNU's tail for `tail -F` - if self.inputs.iter().any(|i| i.is_stdin()) && self.follow == Some(FollowMode::Name) { + if self.inputs.iter().any(Input::is_stdin) && self.follow == Some(FollowMode::Name) { return VerificationResult::CannotFollowStdinByName; } diff --git a/src/uu/test/src/test.rs b/src/uu/test/src/test.rs index 48d691a39dc..58cff2684a5 100644 --- a/src/uu/test/src/test.rs +++ b/src/uu/test/src/test.rs @@ -183,13 +183,13 @@ fn integers(a: &OsStr, b: &OsStr, op: &OsStr) -> ParseResult { // Parse the two inputs let a: i128 = a .to_str() - .map(|s| s.trim()) + .map(str::trim) .and_then(|s| s.parse().ok()) .ok_or_else(|| ParseError::InvalidInteger(a.quote().to_string()))?; let b: i128 = b .to_str() - .map(|s| s.trim()) + .map(str::trim) .and_then(|s| s.parse().ok()) .ok_or_else(|| ParseError::InvalidInteger(b.quote().to_string()))?; @@ -231,7 +231,7 @@ fn files(a: &OsStr, b: &OsStr, op: &OsStr) -> ParseResult { fn isatty(fd: &OsStr) -> ParseResult { fd.to_str() - .map(|s| s.trim()) + .map(str::trim) .and_then(|s| s.parse().ok()) .ok_or_else(|| ParseError::InvalidInteger(fd.quote().to_string())) .map(|i| unsafe { libc::isatty(i) == 1 }) diff --git a/src/uu/touch/src/touch.rs b/src/uu/touch/src/touch.rs index e50686417e2..102a60d06de 100644 --- a/src/uu/touch/src/touch.rs +++ b/src/uu/touch/src/touch.rs @@ -203,11 +203,11 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { let reference = matches.get_one::(options::sources::REFERENCE); let date = matches .get_one::(options::sources::DATE) - .map(|date| date.to_owned()); + .map(ToOwned::to_owned); let mut timestamp = matches .get_one::(options::sources::TIMESTAMP) - .map(|t| t.to_owned()); + .map(ToOwned::to_owned); if is_first_filename_timestamp(reference, date.as_deref(), timestamp.as_deref(), &filenames) { let first_file = filenames[0].to_str().unwrap(); diff --git a/src/uu/tr/src/tr.rs b/src/uu/tr/src/tr.rs index 3a0ee625371..33f61d17fe6 100644 --- a/src/uu/tr/src/tr.rs +++ b/src/uu/tr/src/tr.rs @@ -102,7 +102,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { // According to the man page: translating only happens if deleting or if a second set is given let translating = !delete_flag && sets.len() > 1; - let mut sets_iter = sets.iter().map(|c| c.as_os_str()); + let mut sets_iter = sets.iter().map(OsString::as_os_str); let (set1, set2) = Sequence::solve_set_characters( os_str_as_bytes(sets_iter.next().unwrap_or_default())?, os_str_as_bytes(sets_iter.next().unwrap_or_default())?, diff --git a/src/uu/uname/src/uname.rs b/src/uu/uname/src/uname.rs index 862257339b4..a6658207201 100644 --- a/src/uu/uname/src/uname.rs +++ b/src/uu/uname/src/uname.rs @@ -53,7 +53,7 @@ impl UNameOutput { ] .into_iter() .flatten() - .map(|name| name.as_os_str()) + .map(OsString::as_os_str) .collect::>() .join(OsStr::new(" ")) } diff --git a/src/uu/unexpand/src/unexpand.rs b/src/uu/unexpand/src/unexpand.rs index cfedbe367f6..e90b4f70c67 100644 --- a/src/uu/unexpand/src/unexpand.rs +++ b/src/uu/unexpand/src/unexpand.rs @@ -165,7 +165,7 @@ impl Options { increment_size: None, extend_size: None, }, - Some(s) => parse_tabstops(&s.map(|s| s.as_str()).collect::>().join(","))?, + Some(s) => parse_tabstops(&s.map(String::as_str).collect::>().join(","))?, }; let aflag = (matches.get_flag(options::ALL) || matches.contains_id(options::TABS)) diff --git a/src/uu/users/src/users.rs b/src/uu/users/src/users.rs index 6586c879f8b..2a14ca3bf25 100644 --- a/src/uu/users/src/users.rs +++ b/src/uu/users/src/users.rs @@ -67,7 +67,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { let filename = maybe_file.unwrap_or(utmpx::DEFAULT_FILE.as_ref()); users = Utmpx::iter_all_records_from(filename) - .filter(|ut| ut.is_user_process()) + .filter(utmpx::UtmpxRecord::is_user_process) .map(|ut| ut.user()) .collect::>(); }; diff --git a/src/uu/who/src/platform/unix.rs b/src/uu/who/src/platform/unix.rs index 5db18f23e03..22519ad4ae2 100644 --- a/src/uu/who/src/platform/unix.rs +++ b/src/uu/who/src/platform/unix.rs @@ -207,7 +207,7 @@ impl Who { }; if self.short_list { let users = utmpx::Utmpx::iter_all_records_from(f) - .filter(|ut| ut.is_user_process()) + .filter(UtmpxRecord::is_user_process) .map(|ut| ut.user()) .collect::>(); println!("{}", users.join(" ")); diff --git a/src/uucore/src/lib/features/checksum/validate.rs b/src/uucore/src/lib/features/checksum/validate.rs index 64dc476312b..b3fca0b75b6 100644 --- a/src/uucore/src/lib/features/checksum/validate.rs +++ b/src/uucore/src/lib/features/checksum/validate.rs @@ -1045,7 +1045,7 @@ mod tests { line_info .algo_bit_len .map(|m| m.to_string().as_bytes().to_owned()), - bits.map(|b| b.to_owned()), + bits.map(ToOwned::to_owned), "failed for {}", String::from_utf8_lossy(filename) ); diff --git a/src/uucore/src/lib/features/fs.rs b/src/uucore/src/lib/features/fs.rs index 615316238bc..fd1f3030307 100644 --- a/src/uucore/src/lib/features/fs.rs +++ b/src/uucore/src/lib/features/fs.rs @@ -361,7 +361,7 @@ pub fn canonicalize>( } else { original }; - let mut parts: VecDeque = path.components().map(|part| part.into()).collect(); + let mut parts: VecDeque = path.components().map(Into::into).collect(); let mut result = PathBuf::new(); let mut followed_symlinks = 0; let mut visited_files = HashSet::new(); @@ -593,7 +593,7 @@ pub fn make_path_relative_to, P2: AsRef>(path: P1, to: P2) let path_suffix = path .components() .skip(common_prefix_size) - .map(|x| x.as_os_str()); + .map(Component::as_os_str); let mut components: Vec<_> = to .components() .skip(common_prefix_size) diff --git a/src/uucore/src/lib/features/parser/num_parser.rs b/src/uucore/src/lib/features/parser/num_parser.rs index f87be3052b4..7550e8dd79f 100644 --- a/src/uucore/src/lib/features/parser/num_parser.rs +++ b/src/uucore/src/lib/features/parser/num_parser.rs @@ -150,7 +150,7 @@ where where U: Zero, { - v.unwrap_or_else(|e| e.extract()) + v.unwrap_or_else(ExtendedParserError::extract) } match self { @@ -556,7 +556,7 @@ pub(crate) fn parse( ebd_result } else { Err(ExtendedParserError::PartialMatch( - ebd_result.unwrap_or_else(|e| e.extract()), + ebd_result.unwrap_or_else(ExtendedParserError::extract), rest.to_string(), )) } diff --git a/src/uucore/src/lib/features/parser/shortcut_value_parser.rs b/src/uucore/src/lib/features/parser/shortcut_value_parser.rs index 5800a91f8a2..60e7847442c 100644 --- a/src/uucore/src/lib/features/parser/shortcut_value_parser.rs +++ b/src/uucore/src/lib/features/parser/shortcut_value_parser.rs @@ -128,7 +128,7 @@ where T: Into, { fn from(values: I) -> Self { - Self(values.into_iter().map(|t| t.into()).collect()) + Self(values.into_iter().map(Into::into).collect()) } } diff --git a/src/uucore/src/lib/features/systemd_logind.rs b/src/uucore/src/lib/features/systemd_logind.rs index 9efd46a3945..12c119a12f4 100644 --- a/src/uucore/src/lib/features/systemd_logind.rs +++ b/src/uucore/src/lib/features/systemd_logind.rs @@ -310,7 +310,7 @@ impl SystemdLoginRecord { .unwrap_or_default(); let ts_nanos: i128 = (duration.as_nanos()).try_into().unwrap_or(0); let local_offset = - time::OffsetDateTime::now_local().map_or_else(|_| time::UtcOffset::UTC, |v| v.offset()); + time::OffsetDateTime::now_local().map_or_else(|_| time::UtcOffset::UTC, time::OffsetDateTime::offset); time::OffsetDateTime::from_unix_timestamp_nanos(ts_nanos) .unwrap_or_else(|_| { time::OffsetDateTime::now_local() diff --git a/src/uucore/src/lib/features/utmpx.rs b/src/uucore/src/lib/features/utmpx.rs index 8a6d03fd546..93cc61e3ad6 100644 --- a/src/uucore/src/lib/features/utmpx.rs +++ b/src/uucore/src/lib/features/utmpx.rs @@ -240,7 +240,7 @@ impl Utmpx { + 1_000_i64 * self.inner.ut_tv.tv_usec as i64) .into(); let local_offset = - time::OffsetDateTime::now_local().map_or_else(|_| time::UtcOffset::UTC, |v| v.offset()); + time::OffsetDateTime::now_local().map_or_else(|_| time::UtcOffset::UTC, time::OffsetDateTime::offset); time::OffsetDateTime::from_unix_timestamp_nanos(ts_nanos) .unwrap() .to_offset(local_offset) @@ -396,7 +396,7 @@ pub struct UtmpxIter { impl UtmpxIter { fn new() -> Self { // PoisonErrors can safely be ignored - let guard = LOCK.lock().unwrap_or_else(|err| err.into_inner()); + let guard = LOCK.lock().unwrap_or_else(std::sync::PoisonError::into_inner); Self { guard, phantom: PhantomData, @@ -408,7 +408,7 @@ impl UtmpxIter { #[cfg(feature = "feat_systemd_logind")] fn new_systemd() -> Self { // PoisonErrors can safely be ignored - let guard = LOCK.lock().unwrap_or_else(|err| err.into_inner()); + let guard = LOCK.lock().unwrap_or_else(std::sync::PoisonError::into_inner); let systemd_iter = match systemd_logind::SystemdUtmpxIter::new() { Ok(iter) => iter, Err(_) => { diff --git a/src/uucore/src/lib/features/version_cmp.rs b/src/uucore/src/lib/features/version_cmp.rs index e5552b7055d..cf4bf581ba0 100644 --- a/src/uucore/src/lib/features/version_cmp.rs +++ b/src/uucore/src/lib/features/version_cmp.rs @@ -115,8 +115,8 @@ pub fn version_cmp(mut a: &[u8], mut b: &[u8]) -> Ordering { // 2. Compare leading numerical part // 3. Repeat while !a.is_empty() || !b.is_empty() { - let a_numerical_start = a.iter().position(|c| c.is_ascii_digit()).unwrap_or(a.len()); - let b_numerical_start = b.iter().position(|c| c.is_ascii_digit()).unwrap_or(b.len()); + let a_numerical_start = a.iter().position(u8::is_ascii_digit).unwrap_or(a.len()); + let b_numerical_start = b.iter().position(u8::is_ascii_digit).unwrap_or(b.len()); let a_str = &a[..a_numerical_start]; let b_str = &b[..b_numerical_start]; diff --git a/tests/by-util/test_sort.rs b/tests/by-util/test_sort.rs index 34a80636f51..c180f0d3305 100644 --- a/tests/by-util/test_sort.rs +++ b/tests/by-util/test_sort.rs @@ -1718,7 +1718,7 @@ fn test_human_numeric_blank_thousands_sep_locale() { } let sep = String::from_utf8_lossy(&output.stdout); let sep = sep.trim_end_matches(&['\n', '\r'][..]); - if sep.is_empty() || sep.len() != 1 || !sep.chars().all(|c| c.is_whitespace()) { + if sep.is_empty() || sep.len() != 1 || !sep.chars().all(char::is_whitespace) { return None; } Some(sep.to_string()) From f16ff335f5ecd706b156003bdb9da36ee2528ef7 Mon Sep 17 00:00:00 2001 From: Yuri Astrakhan Date: Wed, 4 Feb 2026 03:29:45 -0500 Subject: [PATCH 2/5] fmt --- src/uu/dd/src/blocks.rs | 10 +++++----- src/uu/env/src/env.rs | 8 ++++++-- src/uucore/src/lib/features/systemd_logind.rs | 4 ++-- src/uucore/src/lib/features/utmpx.rs | 12 ++++++++---- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/uu/dd/src/blocks.rs b/src/uu/dd/src/blocks.rs index 86d36c0e91d..41ed8b484dc 100644 --- a/src/uu/dd/src/blocks.rs +++ b/src/uu/dd/src/blocks.rs @@ -23,10 +23,9 @@ const SPACE: u8 = b' '; /// all-spaces block at the end. Otherwise, remove the last block if /// it is all spaces. fn block(buf: &[u8], cbs: usize, sync: bool, rstat: &mut ReadStat) -> Vec> { - let mut blocks = buf - .split(|&e| e == NEWLINE) - .map(<[u8]>::to_vec) - .fold(Vec::new(), |mut blocks, mut split| { + let mut blocks = buf.split(|&e| e == NEWLINE).map(<[u8]>::to_vec).fold( + Vec::new(), + |mut blocks, mut split| { if split.len() > cbs { rstat.records_truncated += 1; } @@ -34,7 +33,8 @@ fn block(buf: &[u8], cbs: usize, sync: bool, rstat: &mut ReadStat) -> Vec) { fn make_options(matches: &clap::ArgMatches) -> UResult> { let ignore_env = matches.get_flag("ignore-environment"); let line_ending = LineEnding::from_zero_flag(matches.get_flag("null")); - let running_directory = matches.get_one::("chdir").map(OsString::as_os_str); + let running_directory = matches + .get_one::("chdir") + .map(OsString::as_os_str); let files = match matches.get_many::("file") { Some(v) => v.map(OsString::as_os_str).collect(), None => Vec::with_capacity(0), @@ -901,7 +903,9 @@ fn make_options(matches: &clap::ArgMatches) -> UResult> { Some(v) => v.map(OsString::as_os_str).collect(), None => Vec::with_capacity(0), }; - let argv0 = matches.get_one::("argv0").map(OsString::as_os_str); + let argv0 = matches + .get_one::("argv0") + .map(OsString::as_os_str); #[cfg(unix)] let ignore_signal = build_signal_request(matches, options::IGNORE_SIGNAL)?; diff --git a/src/uucore/src/lib/features/systemd_logind.rs b/src/uucore/src/lib/features/systemd_logind.rs index 12c119a12f4..c1ba6df0a07 100644 --- a/src/uucore/src/lib/features/systemd_logind.rs +++ b/src/uucore/src/lib/features/systemd_logind.rs @@ -309,8 +309,8 @@ impl SystemdLoginRecord { .duration_since(UNIX_EPOCH) .unwrap_or_default(); let ts_nanos: i128 = (duration.as_nanos()).try_into().unwrap_or(0); - let local_offset = - time::OffsetDateTime::now_local().map_or_else(|_| time::UtcOffset::UTC, time::OffsetDateTime::offset); + let local_offset = time::OffsetDateTime::now_local() + .map_or_else(|_| time::UtcOffset::UTC, time::OffsetDateTime::offset); time::OffsetDateTime::from_unix_timestamp_nanos(ts_nanos) .unwrap_or_else(|_| { time::OffsetDateTime::now_local() diff --git a/src/uucore/src/lib/features/utmpx.rs b/src/uucore/src/lib/features/utmpx.rs index 93cc61e3ad6..1f33b55b6ff 100644 --- a/src/uucore/src/lib/features/utmpx.rs +++ b/src/uucore/src/lib/features/utmpx.rs @@ -239,8 +239,8 @@ impl Utmpx { let ts_nanos: i128 = (1_000_000_000_i64 * self.inner.ut_tv.tv_sec as i64 + 1_000_i64 * self.inner.ut_tv.tv_usec as i64) .into(); - let local_offset = - time::OffsetDateTime::now_local().map_or_else(|_| time::UtcOffset::UTC, time::OffsetDateTime::offset); + let local_offset = time::OffsetDateTime::now_local() + .map_or_else(|_| time::UtcOffset::UTC, time::OffsetDateTime::offset); time::OffsetDateTime::from_unix_timestamp_nanos(ts_nanos) .unwrap() .to_offset(local_offset) @@ -396,7 +396,9 @@ pub struct UtmpxIter { impl UtmpxIter { fn new() -> Self { // PoisonErrors can safely be ignored - let guard = LOCK.lock().unwrap_or_else(std::sync::PoisonError::into_inner); + let guard = LOCK + .lock() + .unwrap_or_else(std::sync::PoisonError::into_inner); Self { guard, phantom: PhantomData, @@ -408,7 +410,9 @@ impl UtmpxIter { #[cfg(feature = "feat_systemd_logind")] fn new_systemd() -> Self { // PoisonErrors can safely be ignored - let guard = LOCK.lock().unwrap_or_else(std::sync::PoisonError::into_inner); + let guard = LOCK + .lock() + .unwrap_or_else(std::sync::PoisonError::into_inner); let systemd_iter = match systemd_logind::SystemdUtmpxIter::new() { Ok(iter) => iter, Err(_) => { From fc40e5c256f0af9169c0026b697d6c3730d89814 Mon Sep 17 00:00:00 2001 From: Yuri Astrakhan Date: Wed, 4 Feb 2026 03:38:53 -0500 Subject: [PATCH 3/5] fix windows --- src/uucore/src/lib/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/uucore/src/lib/lib.rs b/src/uucore/src/lib/lib.rs index 5b89829288e..4b2cb9b502b 100644 --- a/src/uucore/src/lib/lib.rs +++ b/src/uucore/src/lib/lib.rs @@ -445,7 +445,7 @@ pub fn os_str_as_bytes(os_string: &OsStr) -> Result<&[u8], NonUtf8OsStrError> { .ok_or_else(|| NonUtf8OsStrError { input_lossy_string: os_string.to_string_lossy().into_owned(), }) - .map(|s| s.as_bytes()) + .map(str::as_bytes) } /// Performs a potentially lossy conversion from `OsStr` to UTF-8 bytes. From f96d22faecc53c1890d7088b26a39d9ee126faf4 Mon Sep 17 00:00:00 2001 From: Yuri Astrakhan Date: Wed, 4 Feb 2026 04:04:08 -0500 Subject: [PATCH 4/5] windows chars --- src/uu/env/src/native_int_str.rs | 4 ++-- src/uu/numfmt/src/numfmt.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/uu/env/src/native_int_str.rs b/src/uu/env/src/native_int_str.rs index 5ae6952364e..4d04a440a05 100644 --- a/src/uu/env/src/native_int_str.rs +++ b/src/uu/env/src/native_int_str.rs @@ -257,7 +257,7 @@ impl<'a> NativeStr<'a> { let n_prefix = to_native_int_representation(prefix); let result = self.match_cow( |b| b.strip_prefix(&*n_prefix).ok_or(()), - |o| o.strip_prefix(&*n_prefix).map(<[u8]>::to_vec).ok_or(()), + |o| o.strip_prefix(&*n_prefix).map(<[_]>::to_vec).ok_or(()), ); result.ok() } @@ -266,7 +266,7 @@ impl<'a> NativeStr<'a> { let n_prefix = to_native_int_representation(prefix); let result = self.match_cow_native( |b| b.strip_prefix(&*n_prefix).ok_or(()), - |o| o.strip_prefix(&*n_prefix).map(<[u8]>::to_vec).ok_or(()), + |o| o.strip_prefix(&*n_prefix).map(<[_]>::to_vec).ok_or(()), ); result.ok() } diff --git a/src/uu/numfmt/src/numfmt.rs b/src/uu/numfmt/src/numfmt.rs index 4a19fa8a722..69f1257f6cf 100644 --- a/src/uu/numfmt/src/numfmt.rs +++ b/src/uu/numfmt/src/numfmt.rs @@ -341,9 +341,9 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { } pub fn uu_app() -> Command { - Command::new(uucore::util_name()) + Command::new(util_name()) .version(uucore::crate_version!()) - .help_template(uucore::localized_help_template(uucore::util_name())) + .help_template(uucore::localized_help_template(util_name())) .about(translate!("numfmt-about")) .after_help(translate!("numfmt-after-help")) .override_usage(format_usage(&translate!("numfmt-usage"))) From d2239f290d47cc40169a1974507491491eba0552 Mon Sep 17 00:00:00 2001 From: Yuri Astrakhan Date: Wed, 4 Feb 2026 11:40:48 -0500 Subject: [PATCH 5/5] address feedback --- src/uu/checksum_common/src/lib.rs | 3 ++- src/uu/cp/src/copydir.rs | 2 +- src/uu/csplit/src/patterns.rs | 2 +- src/uu/env/src/native_int_str.rs | 4 ++-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/uu/checksum_common/src/lib.rs b/src/uu/checksum_common/src/lib.rs index f751870061a..4de122d7e12 100644 --- a/src/uu/checksum_common/src/lib.rs +++ b/src/uu/checksum_common/src/lib.rs @@ -5,6 +5,7 @@ // spell-checker:ignore (ToDO) algo +use std::borrow::Borrow; use std::ffi::OsString; use clap::builder::ValueParser; @@ -159,7 +160,7 @@ pub fn checksum_main( let files = matches .get_many::(options::FILE) .unwrap() - .map(OsString::as_os_str); + .map(Borrow::borrow); if check { // cksum does not support '--check'ing legacy algorithms diff --git a/src/uu/cp/src/copydir.rs b/src/uu/cp/src/copydir.rs index e12769e500e..991f4ceb78c 100644 --- a/src/uu/cp/src/copydir.rs +++ b/src/uu/cp/src/copydir.rs @@ -121,7 +121,7 @@ impl<'a> Context<'a> { let root_path = current_dir.join(root); let target_is_file = target.is_file(); let root_parent = if target.exists() && !root.to_str().unwrap().ends_with("/.") { - root_path.parent().map(Path::to_path_buf) + root_path.parent().map(ToOwned::to_owned) } else if root == Path::new(".") && target.is_dir() { // Special case: when copying current directory (.) to an existing directory, // we don't want to use the parent path as root_parent because we want to diff --git a/src/uu/csplit/src/patterns.rs b/src/uu/csplit/src/patterns.rs index 505036fee0f..065800b28da 100644 --- a/src/uu/csplit/src/patterns.rs +++ b/src/uu/csplit/src/patterns.rs @@ -193,7 +193,7 @@ mod tests { fn up_to_line_pattern() { let input: Vec = vec!["24", "42", "{*}", "50", "{4}"] .into_iter() - .map(ToString::to_string) + .map(ToOwned::to_owned) .collect(); let patterns = get_patterns(input.as_slice()).unwrap(); assert_eq!(patterns.len(), 3); diff --git a/src/uu/env/src/native_int_str.rs b/src/uu/env/src/native_int_str.rs index 4d04a440a05..a52686b9dc1 100644 --- a/src/uu/env/src/native_int_str.rs +++ b/src/uu/env/src/native_int_str.rs @@ -257,7 +257,7 @@ impl<'a> NativeStr<'a> { let n_prefix = to_native_int_representation(prefix); let result = self.match_cow( |b| b.strip_prefix(&*n_prefix).ok_or(()), - |o| o.strip_prefix(&*n_prefix).map(<[_]>::to_vec).ok_or(()), + |o| o.strip_prefix(&*n_prefix).map(ToOwned::to_owned).ok_or(()), ); result.ok() } @@ -266,7 +266,7 @@ impl<'a> NativeStr<'a> { let n_prefix = to_native_int_representation(prefix); let result = self.match_cow_native( |b| b.strip_prefix(&*n_prefix).ok_or(()), - |o| o.strip_prefix(&*n_prefix).map(<[_]>::to_vec).ok_or(()), + |o| o.strip_prefix(&*n_prefix).map(ToOwned::to_owned).ok_or(()), ); result.ok() }