Skip to content

Commit

Permalink
Merge pull request #6505 from Its-Just-Nans/fix-clippy-errors
Browse files Browse the repository at this point in the history
Fix clippy errors
  • Loading branch information
sylvestre authored Jun 30, 2024
2 parents 3a0261c + ab67947 commit 9c0f2f8
Show file tree
Hide file tree
Showing 40 changed files with 1,341 additions and 901 deletions.
2 changes: 2 additions & 0 deletions .clippy.toml
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
msrv = "1.70.0"
cognitive-complexity-threshold = 24
missing-docs-in-crate-items = true
check-private-items = true
4 changes: 4 additions & 0 deletions .vscode/cspell.dictionaries/jargon.wordlist.txt
Original file line number Diff line number Diff line change
Expand Up @@ -155,3 +155,7 @@ retval
subdir
val
vals

# * clippy
uninlined
nonminimal
9 changes: 9 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -556,3 +556,12 @@ inherits = "release"
opt-level = "z"
panic = "abort"
strip = true

[lints.clippy]
multiple_crate_versions = { level = "allow", priority = 1 }
cargo_common_metadata = { level = "allow", priority = 1 }
uninlined_format_args = { level = "allow", priority = 1 }
missing_panics_doc = { level = "allow", priority = 1 }
all = "deny"
cargo = "warn"
pedantic = "deny"
9 changes: 5 additions & 4 deletions build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -46,6 +46,7 @@ pub fn main() {
"type UtilityMap<T> = phf::OrderedMap<&'static str, (fn(T) -> i32, fn() -> Command)>;\n\
\n\
#[allow(clippy::too_many_lines)]
#[allow(clippy::unreadable_literal)]
fn util_map<T: uucore::Args>() -> UtilityMap<T> {\n"
.as_bytes(),
)
Expand Down
18 changes: 12 additions & 6 deletions src/bin/coreutils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ fn usage<T>(utils: &UtilityMap<T>, name: &str) {
);
}

/// # Panics
/// Panics if the binary path cannot be determined
fn binary_path(args: &mut impl Iterator<Item = OsString>) -> PathBuf {
match args.next() {
Some(ref s) if !s.is_empty() => PathBuf::from(s),
Expand Down Expand Up @@ -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 {
Expand All @@ -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) {
Expand Down Expand Up @@ -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<T: uucore::Args>(
args: impl Iterator<Item = OsString>,
util_map: &UtilityMap<T>,
Expand Down Expand Up @@ -183,6 +185,8 @@ fn gen_completions<T: uucore::Args>(
}

/// Generate the manpage for the utility in the first parameter
/// # Panics
/// Panics if the utility map is empty
fn gen_manpage<T: uucore::Args>(
args: impl Iterator<Item = OsString>,
util_map: &UtilityMap<T>,
Expand Down Expand Up @@ -215,6 +219,8 @@ fn gen_manpage<T: uucore::Args>(
process::exit(0);
}

/// # Panics
/// Panics if the utility map is empty
fn gen_coreutils_app<T: uucore::Args>(util_map: &UtilityMap<T>) -> Command {
let mut command = Command::new("coreutils");
for (name, (_, sub_app)) in util_map {
Expand Down
25 changes: 25 additions & 0 deletions src/bin/uudoc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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()?;
Expand All @@ -180,13 +185,17 @@ 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, "<div class=\"additional\">")?;
self.platforms()?;
self.version()?;
writeln!(self.w, "</div>")
}

/// # Errors
/// Returns an error if the writer fails.
fn platforms(&mut self) -> io::Result<()> {
writeln!(self.w, "<div class=\"platforms\">")?;
for (feature, icon) in [
Expand All @@ -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,
Expand All @@ -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);
Expand All @@ -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))
Expand All @@ -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) {
Expand All @@ -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) =
Expand Down Expand Up @@ -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, "<h2>Options</h2>")?;
write!(self.w, "<dl>")?;
Expand Down Expand Up @@ -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<impl Read + Seek>, name: &str) -> Option<String> {
let mut s = String::new();
archive.by_name(name).ok()?.read_to_string(&mut s).unwrap();
Expand Down
2 changes: 2 additions & 0 deletions src/uu/nohup/src/nohup.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}
16 changes: 16 additions & 0 deletions src/uu/sync/src/sync.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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")]
Expand All @@ -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<String>) -> isize {
for path in files {
let f = File::open(path).unwrap();
Expand All @@ -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<String>) -> isize {
for path in files {
let f = File::open(path).unwrap();
Expand All @@ -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 {
Expand All @@ -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);
Expand All @@ -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<String> {
let (first_volume, next_volume_handle) = find_first_volume();
let mut volumes = vec![first_volume];
Expand All @@ -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 {
Expand All @@ -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<String>) -> isize {
for path in files {
flush_volume(
Expand Down
10 changes: 7 additions & 3 deletions src/uucore/src/lib/features/entries.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> {
if ptr.is_null() {
Expand All @@ -172,7 +174,8 @@ unsafe fn cstr2string(ptr: *const c_char) -> Option<String> {
}

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 {
Expand Down Expand Up @@ -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 {
Expand Down
2 changes: 1 addition & 1 deletion tests/by-util/test_cat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -485,7 +485,7 @@ fn test_dev_random() {
}

/// Reading from /dev/full should return an infinite amount of zero bytes.
/// Wikipedia says there is support on Linux, FreeBSD, and NetBSD.
/// Wikipedia says there is support on Linux, FreeBSD, and `NetBSD`.
#[test]
#[cfg(any(target_os = "linux", target_os = "freebsd", target_os = "netbsd"))]
fn test_dev_full() {
Expand Down
2 changes: 1 addition & 1 deletion tests/by-util/test_chcon.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
// For the full copyright and license information, please view the LICENSE
// file that was distributed with this source code.
// spell-checker:ignore (jargon) xattributes

#![allow(clippy::missing_errors_doc, clippy::similar_names)]
#![cfg(feature = "feat_selinux")]

use std::ffi::CString;
Expand Down
26 changes: 17 additions & 9 deletions tests/by-util/test_chmod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
//
// For the full copyright and license information, please view the LICENSE
// file that was distributed with this source code.

use crate::common::util::{AtPath, TestScenario, UCommand};
use std::fs::{metadata, set_permissions, OpenOptions, Permissions};
use std::os::unix::fs::{OpenOptionsExt, PermissionsExt};
Expand Down Expand Up @@ -32,12 +33,14 @@ fn make_file(file: &str, mode: u32) {
fn run_single_test(test: &TestCase, at: &AtPath, mut ucmd: UCommand) {
make_file(&at.plus_as_string(TEST_FILE), test.before);
let perms = at.metadata(TEST_FILE).permissions().mode();
if perms != test.before {
panic!(
"{}: expected: {:o} got: {:o}",
"setting permissions on test files before actual test run failed", test.after, perms
);
}

assert!(
perms == test.before,
"{}: expected: {:o} got: {:o}",
"setting permissions on test files before actual test run failed",
test.after,
perms
);

for arg in &test.args {
ucmd.arg(arg);
Expand All @@ -52,9 +55,13 @@ fn run_single_test(test: &TestCase, at: &AtPath, mut ucmd: UCommand) {
}

let perms = at.metadata(TEST_FILE).permissions().mode();
if perms != test.after {
panic!("{}: expected: {:o} got: {:o}", ucmd, test.after, perms);
}
assert!(
perms == test.after,
"{}: expected: {:o} got: {:o}",
ucmd,
test.after,
perms
);
}

fn run_tests(tests: Vec<TestCase>) {
Expand Down Expand Up @@ -128,6 +135,7 @@ fn test_chmod_octal() {

#[test]
#[allow(clippy::unreadable_literal)]
#[allow(clippy::too_many_lines)]
// spell-checker:disable-next-line
fn test_chmod_ugoa() {
let tests = vec![
Expand Down
Loading

0 comments on commit 9c0f2f8

Please sign in to comment.