Fixed some Clippy lints
This commit is contained in:
parent
3ffcdb54ed
commit
b401aaad47
@ -200,6 +200,7 @@ impl Cmd for Bootstrap {
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::module_name_repetitions)]
|
||||
pub trait BootstrapCmd {
|
||||
fn completion(&self, outdir: &Path, gen: &str) -> Result<(), io::Error>;
|
||||
fn linkpath(&self, prefix: &str, usr: bool) -> Option<PathBuf>;
|
||||
|
@ -123,57 +123,6 @@ fn get_ranges(raw_ranges: ValuesRef<String>) -> Result<Vec<ParsedRange>, Box<dyn
|
||||
Ok(ranges)
|
||||
}
|
||||
|
||||
fn print_bytes(line: &str, ranges: &[ParsedRange]) -> Result<(), Box<dyn Error>> {
|
||||
let combined_ranges = combine_ranges(ranges, line.len());
|
||||
let mut writer = BufWriter::new(std::io::stdout());
|
||||
for (idx, byte) in line.as_bytes().iter().enumerate() {
|
||||
if combined_ranges.contains(&idx) {
|
||||
write!(writer, "{}", *byte as char)?;
|
||||
}
|
||||
}
|
||||
write!(writer, "\n")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn print_chars(line: &str, ranges: &[ParsedRange]) -> Result<(), Box<dyn Error>> {
|
||||
let combined_ranges = combine_ranges(ranges, line.len());
|
||||
let mut writer = BufWriter::new(std::io::stdout());
|
||||
for (idx, ch) in line.chars().enumerate() {
|
||||
if combined_ranges.contains(&idx) {
|
||||
write!(writer, "{}", &ch)?;
|
||||
}
|
||||
}
|
||||
write!(writer, "\n")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn print_fields(
|
||||
line: &str,
|
||||
ranges: &[ParsedRange],
|
||||
suppress: bool,
|
||||
delimiter: Option<&String>,
|
||||
) -> Result<(), Box<dyn Error>> {
|
||||
let combined_ranges = combine_ranges(ranges, line.len());
|
||||
let mut writer = BufWriter::new(std::io::stdout());
|
||||
let delimiter = match delimiter {
|
||||
Some(d) => d,
|
||||
None => "\t",
|
||||
};
|
||||
if suppress {
|
||||
if !line.contains(delimiter) {
|
||||
return Ok(());
|
||||
}
|
||||
}
|
||||
let fields = line.split(delimiter);
|
||||
for (idx, field) in fields.enumerate() {
|
||||
if combined_ranges.contains(&idx) {
|
||||
write!(writer, "{field}")?;
|
||||
}
|
||||
}
|
||||
write!(writer, "\n")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
enum ParsedRange {
|
||||
Bounded(Range<usize>),
|
||||
LowerBounded(RangeFrom<usize>),
|
||||
@ -233,9 +182,9 @@ fn combine_ranges(ranges: &[ParsedRange], max: usize) -> Vec<usize> {
|
||||
}
|
||||
|
||||
fn parse_range(range: &str) -> Result<ParsedRange, Box<dyn Error>> {
|
||||
if range.starts_with('-') {
|
||||
if let Some(stripped) = range.strip_prefix('-') {
|
||||
if range.len() > 1 {
|
||||
let end: usize = range[1..].parse()?;
|
||||
let end: usize = stripped.parse()?;
|
||||
if end >= 1 {
|
||||
Ok((..end - 1).into())
|
||||
} else {
|
||||
@ -283,3 +232,52 @@ fn parse_range(range: &str) -> Result<ParsedRange, Box<dyn Error>> {
|
||||
Ok(range.into())
|
||||
}
|
||||
}
|
||||
|
||||
fn print_bytes(line: &str, ranges: &[ParsedRange]) -> Result<(), Box<dyn Error>> {
|
||||
let combined_ranges = combine_ranges(ranges, line.len());
|
||||
let mut writer = BufWriter::new(std::io::stdout());
|
||||
for (idx, byte) in line.as_bytes().iter().enumerate() {
|
||||
if combined_ranges.contains(&idx) {
|
||||
write!(writer, "{}", *byte as char)?;
|
||||
}
|
||||
}
|
||||
writeln!(writer)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn print_chars(line: &str, ranges: &[ParsedRange]) -> Result<(), Box<dyn Error>> {
|
||||
let combined_ranges = combine_ranges(ranges, line.len());
|
||||
let mut writer = BufWriter::new(std::io::stdout());
|
||||
for (idx, ch) in line.chars().enumerate() {
|
||||
if combined_ranges.contains(&idx) {
|
||||
write!(writer, "{}", &ch)?;
|
||||
}
|
||||
}
|
||||
writeln!(writer)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn print_fields(
|
||||
line: &str,
|
||||
ranges: &[ParsedRange],
|
||||
suppress: bool,
|
||||
delimiter: Option<&String>,
|
||||
) -> Result<(), Box<dyn Error>> {
|
||||
let combined_ranges = combine_ranges(ranges, line.len());
|
||||
let mut writer = BufWriter::new(std::io::stdout());
|
||||
let delimiter = match delimiter {
|
||||
Some(d) => d,
|
||||
None => "\t",
|
||||
};
|
||||
if suppress && !line.contains(delimiter) {
|
||||
return Ok(());
|
||||
}
|
||||
let fields = line.split(delimiter);
|
||||
for (idx, field) in fields.enumerate() {
|
||||
if combined_ranges.contains(&idx) {
|
||||
write!(writer, "{field}")?;
|
||||
}
|
||||
}
|
||||
writeln!(writer)?;
|
||||
Ok(())
|
||||
}
|
||||
|
@ -97,7 +97,7 @@ fn wrap_line(line: &str, args: &ArgMatches) {
|
||||
.map(|c| c.iter().collect::<String>())
|
||||
.collect::<Vec<String>>();
|
||||
for line in &line {
|
||||
println!("{}", line);
|
||||
println!("{line}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ impl Cmd for Groups {
|
||||
return Err(Box::new(io::Error::new(io::ErrorKind::Other, "no input")))
|
||||
};
|
||||
let groups = match matches.get_one::<String>("user") {
|
||||
Some(u) => pw::get_group_names_for_name(&u)?,
|
||||
Some(u) => pw::get_group_names_for_name(u)?,
|
||||
None => pw::get_group_names()?,
|
||||
};
|
||||
let len = groups.len();
|
||||
|
@ -68,9 +68,9 @@ impl Cmd for Head {
|
||||
};
|
||||
let mut lines = 10;
|
||||
if args.len() > idx {
|
||||
let arg1 = &args[idx];
|
||||
if arg1.starts_with('-') && arg1.len() > 1 {
|
||||
if let Ok(lines) = arg1[1..].parse::<usize>() {
|
||||
let one = &args[idx];
|
||||
if one.starts_with('-') && one.len() > 1 {
|
||||
if let Ok(lines) = one[1..].parse::<usize>() {
|
||||
let files: Vec<_> = if args.len() > idx + 1 {
|
||||
args[idx + 1..].iter().map(String::as_str).collect()
|
||||
} else {
|
||||
|
@ -40,6 +40,7 @@ pub mod which;
|
||||
pub mod whoami;
|
||||
pub mod yes;
|
||||
|
||||
#[allow(clippy::module_name_repetitions)]
|
||||
pub use {
|
||||
self::hostname::Hostname, base32::Base32, base64::Base64, basename::Basename,
|
||||
bootstrap::Bootstrap, clear::Clear, cut::Cut, dirname::Dirname, echo::Echo, factor::Factor,
|
||||
@ -55,6 +56,7 @@ pub trait Cmd: fmt::Debug + Sync {
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
#[allow(clippy::box_default)]
|
||||
pub fn get(name: &str) -> Option<Box<dyn Cmd>> {
|
||||
match name {
|
||||
"base64" => Some(Box::new(Base64::default())),
|
||||
@ -86,7 +88,7 @@ pub fn get(name: &str) -> Option<Box<dyn Cmd>> {
|
||||
}
|
||||
}
|
||||
|
||||
pub static COMMANDS: [&'static str; 26] = [
|
||||
pub static COMMANDS: [&str; 26] = [
|
||||
"base32",
|
||||
"base64",
|
||||
"basename",
|
||||
|
@ -1,5 +1,5 @@
|
||||
#![warn(clippy::all, clippy::pedantic)]
|
||||
use std::{env, error::Error, path::PathBuf, process, string::ToString};
|
||||
use std::{env, path::PathBuf, process, string::ToString};
|
||||
|
||||
pub mod cmd;
|
||||
pub use cmd::Cmd;
|
||||
@ -47,7 +47,7 @@ pub fn progpath() -> Option<PathBuf> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn run() -> Result<(), Box<dyn Error>> {
|
||||
pub fn run() {
|
||||
if let Some(progname) = progname() {
|
||||
if let Some(command) = cmd::get(&progname) {
|
||||
let cli = command.cli();
|
||||
@ -60,5 +60,4 @@ pub fn run() -> Result<(), Box<dyn Error>> {
|
||||
process::exit(1);
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
@ -1,8 +1,3 @@
|
||||
use std::process;
|
||||
|
||||
fn main() {
|
||||
if let Err(e) = shitbox::run() {
|
||||
eprintln!("{e}");
|
||||
process::exit(1);
|
||||
}
|
||||
shitbox::run();
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ pub fn get_eusername<'a>() -> Result<&'a str, std::str::Utf8Error> {
|
||||
user.to_str()
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
pub fn get_uid_for_name(name: &str) -> Option<u32> {
|
||||
let Ok(user) = CString::new(name.as_bytes()) else { return None };
|
||||
unsafe {
|
||||
@ -69,6 +70,10 @@ pub fn get_egrpname<'a>() -> Result<&'a str, std::str::Utf8Error> {
|
||||
group.to_str()
|
||||
}
|
||||
|
||||
/// Gets the group ids for all groups the current effective user belongs to
|
||||
/// # Errors
|
||||
/// Can only error if unable to make a valid usize from the number
|
||||
/// of groups returned via `libc::getgroups`
|
||||
pub fn get_gids() -> Result<Vec<u32>, num::TryFromIntError> {
|
||||
let mut buf: Vec<libc::gid_t>;
|
||||
unsafe {
|
||||
@ -82,6 +87,10 @@ pub fn get_gids() -> Result<Vec<u32>, num::TryFromIntError> {
|
||||
Ok(buf)
|
||||
}
|
||||
|
||||
/// Gets the group ids for all groups the named user belongs to
|
||||
/// # Errors
|
||||
/// Errors if a valid `CString` cannot be made
|
||||
/// Errors if a user belongs to more than 1024 groups
|
||||
#[allow(clippy::cast_sign_loss)]
|
||||
pub fn get_gids_for_name(name: &str) -> Result<Vec<u32>, Box<dyn Error>> {
|
||||
let gid = match get_pgid_for_name(name) {
|
||||
@ -108,6 +117,10 @@ pub fn get_gids_for_name(name: &str) -> Result<Vec<u32>, Box<dyn Error>> {
|
||||
Ok(buf[0..ct as usize].to_vec())
|
||||
}
|
||||
|
||||
/// Gets a list of group names for the current effective user
|
||||
/// # Errors
|
||||
/// Bubbles up errors from `get_gids`
|
||||
/// Can error if a group name is not valid utf8
|
||||
pub fn get_group_names() -> Result<Vec<String>, Box<dyn Error>> {
|
||||
let gids = get_gids()?;
|
||||
let mut names = vec![];
|
||||
@ -128,6 +141,10 @@ pub fn get_group_names() -> Result<Vec<String>, Box<dyn Error>> {
|
||||
Ok(names)
|
||||
}
|
||||
|
||||
/// Gets a list of group names for the given user name
|
||||
/// # Errors
|
||||
/// Bubbles up errors from `get_gids_for_name`
|
||||
/// Can error if a group name is not valid utf8
|
||||
pub fn get_group_names_for_name(name: &str) -> Result<Vec<String>, Box<dyn Error>> {
|
||||
let gids = get_gids_for_name(name)?;
|
||||
let mut names = vec![];
|
||||
|
Loading…
Reference in New Issue
Block a user