From 81de2be5ab717e676f2eb73835b1127d37ab5f72 Mon Sep 17 00:00:00 2001 From: n4n5 Date: Sun, 30 Jun 2024 16:27:00 +0200 Subject: [PATCH] fix clippy src/ --- build.rs | 9 +++++---- src/bin/coreutils.rs | 18 ++++++++++++------ src/bin/uudoc.rs | 25 +++++++++++++++++++++++++ src/uu/nohup/src/nohup.rs | 2 ++ src/uu/sync/src/sync.rs | 16 ++++++++++++++++ src/uucore/src/lib/features/entries.rs | 10 +++++++--- 6 files changed, 67 insertions(+), 13 deletions(-) diff --git a/build.rs b/build.rs index bb4e2b536..66e638d83 100644 --- a/build.rs +++ b/build.rs @@ -11,14 +11,14 @@ use std::io::Write; use std::path::Path; pub fn main() { - if let Ok(profile) = env::var("PROFILE") { - println!("cargo:rustc-cfg=build={profile:?}"); - } - const ENV_FEATURE_PREFIX: &str = "CARGO_FEATURE_"; const FEATURE_PREFIX: &str = "feat_"; const OVERRIDE_PREFIX: &str = "uu_"; + if let Ok(profile) = env::var("PROFILE") { + println!("cargo:rustc-cfg=build={profile:?}"); + } + let out_dir = env::var("OUT_DIR").unwrap(); let mut crates = Vec::new(); @@ -46,6 +46,7 @@ pub fn main() { "type UtilityMap = phf::OrderedMap<&'static str, (fn(T) -> i32, fn() -> Command)>;\n\ \n\ #[allow(clippy::too_many_lines)] + #[allow(clippy::unreadable_literal)] fn util_map() -> UtilityMap {\n" .as_bytes(), ) diff --git a/src/bin/coreutils.rs b/src/bin/coreutils.rs index 6edb70821..5d5a9978b 100644 --- a/src/bin/coreutils.rs +++ b/src/bin/coreutils.rs @@ -34,6 +34,8 @@ fn usage(utils: &UtilityMap, name: &str) { ); } +/// # Panics +/// Panics if the binary path cannot be determined fn binary_path(args: &mut impl Iterator) -> PathBuf { match args.next() { Some(ref s) if !s.is_empty() => PathBuf::from(s), @@ -85,9 +87,8 @@ fn main() { process::exit(1); } - let util = match util_os.to_str() { - Some(util) => util, - None => not_found(&util_os), + let Some(util) = util_os.to_str() else { + not_found(&util_os) }; match util { @@ -113,9 +114,8 @@ fn main() { if util == "--help" || util == "-h" { // see if they want help on a specific util if let Some(util_os) = args.next() { - let util = match util_os.to_str() { - Some(util) => util, - None => not_found(&util_os), + let Some(util) = util_os.to_str() else { + not_found(&util_os) }; match utils.get(util) { @@ -145,6 +145,8 @@ fn main() { } /// Prints completions for the utility in the first parameter for the shell in the second parameter to stdout +/// # Panics +/// Panics if the utility map is empty fn gen_completions( args: impl Iterator, util_map: &UtilityMap, @@ -183,6 +185,8 @@ fn gen_completions( } /// Generate the manpage for the utility in the first parameter +/// # Panics +/// Panics if the utility map is empty fn gen_manpage( args: impl Iterator, util_map: &UtilityMap, @@ -215,6 +219,8 @@ fn gen_manpage( process::exit(0); } +/// # Panics +/// Panics if the utility map is empty fn gen_coreutils_app(util_map: &UtilityMap) -> Command { let mut command = Command::new("coreutils"); for (name, (_, sub_app)) in util_map { diff --git a/src/bin/uudoc.rs b/src/bin/uudoc.rs index 77c7a2fcf..8ea11ed4d 100644 --- a/src/bin/uudoc.rs +++ b/src/bin/uudoc.rs @@ -13,6 +13,9 @@ use zip::ZipArchive; include!(concat!(env!("OUT_DIR"), "/uutils_map.rs")); +/// # Errors +/// Returns an error if the writer fails. +#[allow(clippy::too_many_lines)] fn main() -> io::Result<()> { let mut tldr_zip = File::open("docs/tldr.zip") .ok() @@ -170,6 +173,8 @@ struct MDWriter<'a, 'b> { } impl<'a, 'b> MDWriter<'a, 'b> { + /// # Errors + /// Returns an error if the writer fails. fn markdown(&mut self) -> io::Result<()> { write!(self.w, "# {}\n\n", self.name)?; self.additional()?; @@ -180,6 +185,8 @@ impl<'a, 'b> MDWriter<'a, 'b> { self.examples() } + /// # Errors + /// Returns an error if the writer fails. fn additional(&mut self) -> io::Result<()> { writeln!(self.w, "
")?; self.platforms()?; @@ -187,6 +194,8 @@ impl<'a, 'b> MDWriter<'a, 'b> { writeln!(self.w, "
") } + /// # Errors + /// Returns an error if the writer fails. fn platforms(&mut self) -> io::Result<()> { writeln!(self.w, "
")?; for (feature, icon) in [ @@ -209,6 +218,10 @@ impl<'a, 'b> MDWriter<'a, 'b> { Ok(()) } + /// # Errors + /// Returns an error if the writer fails. + /// # Panics + /// Panics if the version is not found. fn version(&mut self) -> io::Result<()> { writeln!( self.w, @@ -217,6 +230,8 @@ impl<'a, 'b> MDWriter<'a, 'b> { ) } + /// # Errors + /// Returns an error if the writer fails. fn usage(&mut self) -> io::Result<()> { if let Some(markdown) = &self.markdown { let usage = uuhelp_parser::parse_usage(markdown); @@ -230,6 +245,8 @@ impl<'a, 'b> MDWriter<'a, 'b> { } } + /// # Errors + /// Returns an error if the writer fails. fn about(&mut self) -> io::Result<()> { if let Some(markdown) = &self.markdown { writeln!(self.w, "{}", uuhelp_parser::parse_about(markdown)) @@ -238,6 +255,8 @@ impl<'a, 'b> MDWriter<'a, 'b> { } } + /// # Errors + /// Returns an error if the writer fails. fn after_help(&mut self) -> io::Result<()> { if let Some(markdown) = &self.markdown { if let Some(after_help) = uuhelp_parser::parse_section("after help", markdown) { @@ -248,6 +267,8 @@ impl<'a, 'b> MDWriter<'a, 'b> { Ok(()) } + /// # Errors + /// Returns an error if the writer fails. fn examples(&mut self) -> io::Result<()> { if let Some(zip) = self.tldr_zip { let content = if let Some(f) = @@ -292,6 +313,8 @@ impl<'a, 'b> MDWriter<'a, 'b> { Ok(()) } + /// # Errors + /// Returns an error if the writer fails. fn options(&mut self) -> io::Result<()> { writeln!(self.w, "

Options

")?; write!(self.w, "
")?; @@ -354,6 +377,8 @@ impl<'a, 'b> MDWriter<'a, 'b> { } } +/// # Panics +/// Panics if the archive is not ok fn get_zip_content(archive: &mut ZipArchive, name: &str) -> Option { let mut s = String::new(); archive.by_name(name).ok()?.read_to_string(&mut s).unwrap(); diff --git a/src/uu/nohup/src/nohup.rs b/src/uu/nohup/src/nohup.rs index 486518342..60ad979bb 100644 --- a/src/uu/nohup/src/nohup.rs +++ b/src/uu/nohup/src/nohup.rs @@ -198,6 +198,8 @@ extern "C" { target_os = "freebsd", target_os = "openbsd" ))] +/// # Safety +/// This function is unsafe because it dereferences a raw pointer. unsafe fn _vprocmgr_detach_from_console(_: u32) -> *const libc::c_int { std::ptr::null() } diff --git a/src/uu/sync/src/sync.rs b/src/uu/sync/src/sync.rs index c0b8f3d00..a769f3488 100644 --- a/src/uu/sync/src/sync.rs +++ b/src/uu/sync/src/sync.rs @@ -36,6 +36,8 @@ mod platform { #[cfg(any(target_os = "linux", target_os = "android"))] use std::os::unix::io::AsRawFd; + /// # Safety + /// This function is unsafe because it calls `libc::sync` or `libc::syscall` which are unsafe. pub unsafe fn do_sync() -> isize { // see https://github.com/rust-lang/libc/pull/2161 #[cfg(target_os = "android")] @@ -46,6 +48,8 @@ mod platform { } #[cfg(any(target_os = "linux", target_os = "android"))] + /// # Safety + /// This function is unsafe because it calls `libc::syscall` which is unsafe. pub unsafe fn do_syncfs(files: Vec) -> isize { for path in files { let f = File::open(path).unwrap(); @@ -56,6 +60,8 @@ mod platform { } #[cfg(any(target_os = "linux", target_os = "android"))] + /// # Safety + /// This function is unsafe because it calls `libc::syscall` which is unsafe. pub unsafe fn do_fdatasync(files: Vec) -> isize { for path in files { let f = File::open(path).unwrap(); @@ -81,6 +87,8 @@ mod platform { }; use windows_sys::Win32::System::WindowsProgramming::DRIVE_FIXED; + /// # Safety + /// This function is unsafe because it calls an unsafe function. unsafe fn flush_volume(name: &str) { let name_wide = name.to_wide_null(); if GetDriveTypeW(name_wide.as_ptr()) == DRIVE_FIXED { @@ -99,6 +107,8 @@ mod platform { } } + /// # Safety + /// This function is unsafe because it calls an unsafe function. unsafe fn find_first_volume() -> (String, HANDLE) { let mut name: [u16; MAX_PATH as usize] = [0; MAX_PATH as usize]; let handle = FindFirstVolumeW(name.as_mut_ptr(), name.len() as u32); @@ -108,6 +118,8 @@ mod platform { (String::from_wide_null(&name), handle) } + /// # Safety + /// This function is unsafe because it calls an unsafe function. unsafe fn find_all_volumes() -> Vec { let (first_volume, next_volume_handle) = find_first_volume(); let mut volumes = vec![first_volume]; @@ -127,6 +139,8 @@ mod platform { } } + /// # Safety + /// This function is unsafe because it calls `find_all_volumes` which is unsafe. pub unsafe fn do_sync() -> isize { let volumes = find_all_volumes(); for vol in &volumes { @@ -135,6 +149,8 @@ mod platform { 0 } + /// # Safety + /// This function is unsafe because it calls `find_all_volumes` which is unsafe. pub unsafe fn do_syncfs(files: Vec) -> isize { for path in files { flush_volume( diff --git a/src/uucore/src/lib/features/entries.rs b/src/uucore/src/lib/features/entries.rs index e2cbafa59..d1c9f9c04 100644 --- a/src/uucore/src/lib/features/entries.rs +++ b/src/uucore/src/lib/features/entries.rs @@ -161,7 +161,9 @@ pub struct Passwd { pub expiration: time_t, } -/// SAFETY: ptr must point to a valid C string. +/// # Safety +/// ptr must point to a valid C string. +/// /// Returns None if ptr is null. unsafe fn cstr2string(ptr: *const c_char) -> Option { if ptr.is_null() { @@ -172,7 +174,8 @@ unsafe fn cstr2string(ptr: *const c_char) -> Option { } impl Passwd { - /// SAFETY: All the pointed-to strings must be valid and not change while + /// # Safety + /// All the pointed-to strings must be valid and not change while /// the function runs. That means PW_LOCK must be held. unsafe fn from_raw(raw: passwd) -> Self { Self { @@ -246,7 +249,8 @@ pub struct Group { } impl Group { - /// SAFETY: gr_name must be valid and not change while + /// # Safety + /// gr_name must be valid and not change while /// the function runs. That means PW_LOCK must be held. unsafe fn from_raw(raw: group) -> Self { Self {