diff --git a/crates/bashkit/src/builtins/archive.rs b/crates/bashkit/src/builtins/archive.rs index 5ce56200..c72b82a8 100644 --- a/crates/bashkit/src/builtins/archive.rs +++ b/crates/bashkit/src/builtins/archive.rs @@ -905,7 +905,6 @@ impl Builtin for Gunzip { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/assert.rs b/crates/bashkit/src/builtins/assert.rs index d900ca16..f298ecf6 100644 --- a/crates/bashkit/src/builtins/assert.rs +++ b/crates/bashkit/src/builtins/assert.rs @@ -181,7 +181,6 @@ impl Builtin for Assert { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/awk.rs b/crates/bashkit/src/builtins/awk.rs index 47e65ddd..2cebb9ec 100644 --- a/crates/bashkit/src/builtins/awk.rs +++ b/crates/bashkit/src/builtins/awk.rs @@ -3126,7 +3126,6 @@ impl Awk { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::fs::{FileSystem, InMemoryFs}; diff --git a/crates/bashkit/src/builtins/bc.rs b/crates/bashkit/src/builtins/bc.rs index e0a465a0..b1178315 100644 --- a/crates/bashkit/src/builtins/bc.rs +++ b/crates/bashkit/src/builtins/bc.rs @@ -498,7 +498,6 @@ impl<'a> ExprParser<'a> { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/checksum.rs b/crates/bashkit/src/builtins/checksum.rs index c2016dbf..8b8ff59d 100644 --- a/crates/bashkit/src/builtins/checksum.rs +++ b/crates/bashkit/src/builtins/checksum.rs @@ -82,7 +82,6 @@ fn hex_digest(data: &[u8]) -> String { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/column.rs b/crates/bashkit/src/builtins/column.rs index fae2e53e..9edfd643 100644 --- a/crates/bashkit/src/builtins/column.rs +++ b/crates/bashkit/src/builtins/column.rs @@ -195,7 +195,6 @@ impl Builtin for Column { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/comm.rs b/crates/bashkit/src/builtins/comm.rs index 54ea122c..a56f9941 100644 --- a/crates/bashkit/src/builtins/comm.rs +++ b/crates/bashkit/src/builtins/comm.rs @@ -174,7 +174,6 @@ impl Builtin for Comm { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/compgen.rs b/crates/bashkit/src/builtins/compgen.rs index eed725a3..05dffb97 100644 --- a/crates/bashkit/src/builtins/compgen.rs +++ b/crates/bashkit/src/builtins/compgen.rs @@ -195,7 +195,6 @@ impl Builtin for Compgen { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/csv.rs b/crates/bashkit/src/builtins/csv.rs index 4988d6e8..0cd28768 100644 --- a/crates/bashkit/src/builtins/csv.rs +++ b/crates/bashkit/src/builtins/csv.rs @@ -381,7 +381,6 @@ impl Builtin for Csv { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/curl.rs b/crates/bashkit/src/builtins/curl.rs index ee5171d9..91b9a7e9 100644 --- a/crates/bashkit/src/builtins/curl.rs +++ b/crates/bashkit/src/builtins/curl.rs @@ -1009,7 +1009,6 @@ fn extract_host_from_url(url: &str) -> String { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/cuttr.rs b/crates/bashkit/src/builtins/cuttr.rs index e7b1fba6..0982d698 100644 --- a/crates/bashkit/src/builtins/cuttr.rs +++ b/crates/bashkit/src/builtins/cuttr.rs @@ -530,7 +530,6 @@ fn expand_char_set(spec: &str) -> Vec { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/date.rs b/crates/bashkit/src/builtins/date.rs index e7542a19..65ce199e 100644 --- a/crates/bashkit/src/builtins/date.rs +++ b/crates/bashkit/src/builtins/date.rs @@ -428,7 +428,6 @@ impl Builtin for Date { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/diff.rs b/crates/bashkit/src/builtins/diff.rs index 5030a713..c444357b 100644 --- a/crates/bashkit/src/builtins/diff.rs +++ b/crates/bashkit/src/builtins/diff.rs @@ -294,7 +294,6 @@ impl Builtin for Diff { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/dirstack.rs b/crates/bashkit/src/builtins/dirstack.rs index 8d9187e2..62ad9711 100644 --- a/crates/bashkit/src/builtins/dirstack.rs +++ b/crates/bashkit/src/builtins/dirstack.rs @@ -221,7 +221,6 @@ fn format_stack(ctx: &Context<'_>) -> String { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/disk.rs b/crates/bashkit/src/builtins/disk.rs index 335ca30f..418e23c1 100644 --- a/crates/bashkit/src/builtins/disk.rs +++ b/crates/bashkit/src/builtins/disk.rs @@ -250,7 +250,6 @@ impl Builtin for Df { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::fs::{FileSystem, FsLimits, InMemoryFs}; diff --git a/crates/bashkit/src/builtins/dotenv.rs b/crates/bashkit/src/builtins/dotenv.rs index e49dd95b..032edd32 100644 --- a/crates/bashkit/src/builtins/dotenv.rs +++ b/crates/bashkit/src/builtins/dotenv.rs @@ -157,7 +157,6 @@ impl Builtin for Dotenv { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/echo.rs b/crates/bashkit/src/builtins/echo.rs index 02b1154d..5fa9058a 100644 --- a/crates/bashkit/src/builtins/echo.rs +++ b/crates/bashkit/src/builtins/echo.rs @@ -71,8 +71,6 @@ impl Builtin for Echo { } } -// to_digit().unwrap() is safe: only called after is_ascii_hexdigit() check -#[allow(clippy::unwrap_used)] fn interpret_escape_sequences(s: &str) -> String { let mut result = String::new(); let mut chars = s.chars().peekable(); @@ -109,7 +107,10 @@ fn interpret_escape_sequences(s: &str) -> String { for _ in 0..2 { if let Some(&digit) = chars.peek() { if digit.is_ascii_hexdigit() { - value = value * 16 + digit.to_digit(16).unwrap() as u8; + value = value * 16 + + digit.to_digit(16).expect( + "to_digit(16) valid: guarded by is_ascii_hexdigit()", + ) as u8; chars.next(); } else { break; @@ -137,7 +138,6 @@ fn interpret_escape_sequences(s: &str) -> String { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; diff --git a/crates/bashkit/src/builtins/environ.rs b/crates/bashkit/src/builtins/environ.rs index dcda8aea..5b73e1f1 100644 --- a/crates/bashkit/src/builtins/environ.rs +++ b/crates/bashkit/src/builtins/environ.rs @@ -168,7 +168,6 @@ impl Builtin for History { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/expand.rs b/crates/bashkit/src/builtins/expand.rs index 556bdbd0..a21062df 100644 --- a/crates/bashkit/src/builtins/expand.rs +++ b/crates/bashkit/src/builtins/expand.rs @@ -239,7 +239,6 @@ fn next_tab_stop(col: usize, tab_stops: &[usize]) -> usize { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::fs::InMemoryFs; diff --git a/crates/bashkit/src/builtins/expr.rs b/crates/bashkit/src/builtins/expr.rs index cd3cc238..461ad22d 100644 --- a/crates/bashkit/src/builtins/expr.rs +++ b/crates/bashkit/src/builtins/expr.rs @@ -254,7 +254,6 @@ fn char_matches(c: char, pattern: char) -> bool { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/fc.rs b/crates/bashkit/src/builtins/fc.rs index 9724591a..42600526 100644 --- a/crates/bashkit/src/builtins/fc.rs +++ b/crates/bashkit/src/builtins/fc.rs @@ -153,7 +153,6 @@ impl Builtin for Fc { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/fileops.rs b/crates/bashkit/src/builtins/fileops.rs index 8b8a1a83..36077655 100644 --- a/crates/bashkit/src/builtins/fileops.rs +++ b/crates/bashkit/src/builtins/fileops.rs @@ -150,8 +150,6 @@ pub struct Cp; #[async_trait] impl Builtin for Cp { - // files.last().unwrap() is safe: guarded by files.len() < 2 check above - #[allow(clippy::unwrap_used)] async fn execute(&self, ctx: Context<'_>) -> Result { if ctx.args.len() < 2 { return Ok(ExecResult::err("cp: missing file operand\n".to_string(), 1)); @@ -167,7 +165,9 @@ impl Builtin for Cp { )); } - let dest = files.last().unwrap(); + let dest = files + .last() + .expect("files.last() valid: guarded by files.len() < 2 check above"); let sources = &files[..files.len() - 1]; let dest_path = resolve_path(ctx.cwd, dest); @@ -218,8 +218,6 @@ pub struct Mv; #[async_trait] impl Builtin for Mv { - // files.last().unwrap() is safe: guarded by files.len() < 2 check above - #[allow(clippy::unwrap_used)] async fn execute(&self, ctx: Context<'_>) -> Result { if ctx.args.len() < 2 { return Ok(ExecResult::err("mv: missing file operand\n".to_string(), 1)); @@ -234,7 +232,9 @@ impl Builtin for Mv { )); } - let dest = files.last().unwrap(); + let dest = files + .last() + .expect("files.last() valid: guarded by files.len() < 2 check above"); let sources = &files[..files.len() - 1]; let dest_path = resolve_path(ctx.cwd, dest); @@ -426,8 +426,6 @@ fn apply_symbolic_mode(mode_str: &str, current_mode: u32) -> Option { #[async_trait] impl Builtin for Chmod { - // from_str_radix().unwrap() is safe: is_ok() check on same value above - #[allow(clippy::unwrap_used)] async fn execute(&self, ctx: Context<'_>) -> Result { if ctx.args.len() < 2 { return Ok(ExecResult::err("chmod: missing operand\n".to_string(), 1)); @@ -453,7 +451,8 @@ impl Builtin for Chmod { } let mode = if is_octal { - u32::from_str_radix(mode_str, 8).unwrap() + u32::from_str_radix(mode_str, 8) + .expect("from_str_radix valid: is_octal confirmed by is_ok() check above") } else { // Symbolic mode - need current permissions let current_mode = match ctx.fs.stat(&path).await { @@ -735,7 +734,6 @@ impl Builtin for Mktemp { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/flow.rs b/crates/bashkit/src/builtins/flow.rs index e02328db..cffad1e5 100644 --- a/crates/bashkit/src/builtins/flow.rs +++ b/crates/bashkit/src/builtins/flow.rs @@ -115,7 +115,6 @@ impl Builtin for Return { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/fold.rs b/crates/bashkit/src/builtins/fold.rs index 569f0a84..bb8507e4 100644 --- a/crates/bashkit/src/builtins/fold.rs +++ b/crates/bashkit/src/builtins/fold.rs @@ -135,7 +135,6 @@ fn fold_line(line: &str, width: usize, break_at_spaces: bool, output: &mut Strin } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::fs::InMemoryFs; diff --git a/crates/bashkit/src/builtins/glob_cmd.rs b/crates/bashkit/src/builtins/glob_cmd.rs index f4d11763..3e13d8f1 100644 --- a/crates/bashkit/src/builtins/glob_cmd.rs +++ b/crates/bashkit/src/builtins/glob_cmd.rs @@ -150,7 +150,6 @@ impl GlobCmd { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/grep.rs b/crates/bashkit/src/builtins/grep.rs index 829077fb..15f2a9f0 100644 --- a/crates/bashkit/src/builtins/grep.rs +++ b/crates/bashkit/src/builtins/grep.rs @@ -786,7 +786,6 @@ impl Builtin for Grep { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::fs::{FileSystem, InMemoryFs}; diff --git a/crates/bashkit/src/builtins/headtail.rs b/crates/bashkit/src/builtins/headtail.rs index a97a29e4..12782cb8 100644 --- a/crates/bashkit/src/builtins/headtail.rs +++ b/crates/bashkit/src/builtins/headtail.rs @@ -287,7 +287,6 @@ fn take_last_lines(text: &str, n: usize) -> String { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/help.rs b/crates/bashkit/src/builtins/help.rs index aba140a8..9cd63739 100644 --- a/crates/bashkit/src/builtins/help.rs +++ b/crates/bashkit/src/builtins/help.rs @@ -506,7 +506,6 @@ impl Builtin for Help { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/hextools.rs b/crates/bashkit/src/builtins/hextools.rs index c8b06a36..0fe032a7 100644 --- a/crates/bashkit/src/builtins/hextools.rs +++ b/crates/bashkit/src/builtins/hextools.rs @@ -550,7 +550,6 @@ async fn collect_input( } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/http.rs b/crates/bashkit/src/builtins/http.rs index 9ea45c8e..8d732c6c 100644 --- a/crates/bashkit/src/builtins/http.rs +++ b/crates/bashkit/src/builtins/http.rs @@ -434,7 +434,6 @@ async fn execute_http_request( } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/iconv.rs b/crates/bashkit/src/builtins/iconv.rs index d2b01a52..1a1ca5e2 100644 --- a/crates/bashkit/src/builtins/iconv.rs +++ b/crates/bashkit/src/builtins/iconv.rs @@ -291,7 +291,6 @@ impl Builtin for Iconv { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/inspect.rs b/crates/bashkit/src/builtins/inspect.rs index 6a74bfe3..5c03132f 100644 --- a/crates/bashkit/src/builtins/inspect.rs +++ b/crates/bashkit/src/builtins/inspect.rs @@ -400,7 +400,6 @@ fn default_stat_format(name: &str, metadata: &crate::fs::Metadata) -> String { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/join.rs b/crates/bashkit/src/builtins/join.rs index 1f694a85..6594d1a6 100644 --- a/crates/bashkit/src/builtins/join.rs +++ b/crates/bashkit/src/builtins/join.rs @@ -160,7 +160,6 @@ async fn read_input( } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::fs::{FileSystem, InMemoryFs}; diff --git a/crates/bashkit/src/builtins/jq.rs b/crates/bashkit/src/builtins/jq.rs index 3fba14f7..6749bad6 100644 --- a/crates/bashkit/src/builtins/jq.rs +++ b/crates/bashkit/src/builtins/jq.rs @@ -568,7 +568,6 @@ impl Builtin for Jq { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::fs::{FileSystem, InMemoryFs}; diff --git a/crates/bashkit/src/builtins/json.rs b/crates/bashkit/src/builtins/json.rs index 646846b0..ea43a759 100644 --- a/crates/bashkit/src/builtins/json.rs +++ b/crates/bashkit/src/builtins/json.rs @@ -301,7 +301,6 @@ impl Builtin for Json { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/log.rs b/crates/bashkit/src/builtins/log.rs index 502471f1..19bd858d 100644 --- a/crates/bashkit/src/builtins/log.rs +++ b/crates/bashkit/src/builtins/log.rs @@ -143,7 +143,6 @@ impl Builtin for Log { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/ls.rs b/crates/bashkit/src/builtins/ls.rs index ff67f4b2..665b05c6 100644 --- a/crates/bashkit/src/builtins/ls.rs +++ b/crates/bashkit/src/builtins/ls.rs @@ -930,7 +930,6 @@ impl Builtin for Rmdir { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/mkfifo.rs b/crates/bashkit/src/builtins/mkfifo.rs index e4235fc7..dd4a8110 100644 --- a/crates/bashkit/src/builtins/mkfifo.rs +++ b/crates/bashkit/src/builtins/mkfifo.rs @@ -115,7 +115,6 @@ impl Builtin for Mkfifo { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::fs::{FileSystem, InMemoryFs}; diff --git a/crates/bashkit/src/builtins/nl.rs b/crates/bashkit/src/builtins/nl.rs index 37ebbc6f..4812c83d 100644 --- a/crates/bashkit/src/builtins/nl.rs +++ b/crates/bashkit/src/builtins/nl.rs @@ -228,7 +228,6 @@ impl Builtin for Nl { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/parallel.rs b/crates/bashkit/src/builtins/parallel.rs index fbb103fa..4eea46da 100644 --- a/crates/bashkit/src/builtins/parallel.rs +++ b/crates/bashkit/src/builtins/parallel.rs @@ -227,7 +227,6 @@ impl Builtin for Parallel { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/paste.rs b/crates/bashkit/src/builtins/paste.rs index 68b93314..e107cacb 100644 --- a/crates/bashkit/src/builtins/paste.rs +++ b/crates/bashkit/src/builtins/paste.rs @@ -149,7 +149,6 @@ impl Builtin for Paste { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/patch.rs b/crates/bashkit/src/builtins/patch.rs index 1d260ef9..a4066a5a 100644 --- a/crates/bashkit/src/builtins/patch.rs +++ b/crates/bashkit/src/builtins/patch.rs @@ -372,7 +372,6 @@ impl Builtin for Patch { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::fs::{FileSystem, InMemoryFs}; diff --git a/crates/bashkit/src/builtins/path.rs b/crates/bashkit/src/builtins/path.rs index 5538d453..04958df2 100644 --- a/crates/bashkit/src/builtins/path.rs +++ b/crates/bashkit/src/builtins/path.rs @@ -18,8 +18,6 @@ pub struct Basename; #[async_trait] impl Builtin for Basename { - // args_iter.next().unwrap() is safe: guarded by is_empty() check above - #[allow(clippy::unwrap_used)] async fn execute(&self, ctx: Context<'_>) -> Result { if ctx.args.is_empty() { return Ok(ExecResult::err( @@ -32,7 +30,9 @@ impl Builtin for Basename { let mut args_iter = ctx.args.iter(); // Get the path argument - let path_arg = args_iter.next().unwrap(); + let path_arg = args_iter + .next() + .expect("args_iter.next() valid: guarded by is_empty() check above"); let path = Path::new(path_arg); // Get the basename @@ -282,7 +282,6 @@ enum ReadlinkMode { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/pipeline.rs b/crates/bashkit/src/builtins/pipeline.rs index b4ad80bd..b6dc3515 100644 --- a/crates/bashkit/src/builtins/pipeline.rs +++ b/crates/bashkit/src/builtins/pipeline.rs @@ -322,7 +322,6 @@ impl Builtin for Watch { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/printf.rs b/crates/bashkit/src/builtins/printf.rs index d96130fa..8533fa65 100644 --- a/crates/bashkit/src/builtins/printf.rs +++ b/crates/bashkit/src/builtins/printf.rs @@ -71,8 +71,6 @@ struct FormatSpec { } impl FormatSpec { - // chars.next().unwrap() is safe: only called after peek() confirms char exists - #[allow(clippy::unwrap_used)] fn parse(spec: &str) -> Self { let mut left_align = false; let mut zero_pad = false; @@ -106,7 +104,11 @@ impl FormatSpec { let mut width_str = String::new(); while let Some(&c) = chars.peek() { if c.is_ascii_digit() { - width_str.push(chars.next().unwrap()); + width_str.push( + chars + .next() + .expect("chars.next() valid: peek() confirmed char exists"), + ); } else { break; } @@ -123,7 +125,11 @@ impl FormatSpec { let mut prec_str = String::new(); while let Some(&c) = chars.peek() { if c.is_ascii_digit() { - prec_str.push(chars.next().unwrap()); + prec_str.push( + chars + .next() + .expect("chars.next() valid: peek() confirmed char exists"), + ); } else { break; } @@ -210,8 +216,7 @@ impl FormatSpec { } /// Format a string using printf-style format specifiers -// chars.next().unwrap() is safe: only called after peek() confirms char exists -#[allow(clippy::unwrap_used, clippy::collapsible_if)] +#[allow(clippy::collapsible_if)] fn format_string(format: &str, args: &[String], arg_index: &mut usize) -> String { let mut output = String::new(); let mut chars = format.chars().peekable(); @@ -232,7 +237,7 @@ fn format_string(format: &str, args: &[String], arg_index: &mut usize) -> String let mut octal = String::from("0"); while let Some(&c) = chars.peek() { if c.is_ascii_digit() && c != '8' && c != '9' && octal.len() < 4 { - octal.push(chars.next().unwrap()); + octal.push(chars.next().expect("chars.next() valid: peek() confirmed char exists")); } else { break; } @@ -247,7 +252,7 @@ fn format_string(format: &str, args: &[String], arg_index: &mut usize) -> String for _ in 0..2 { if let Some(&c) = chars.peek() { if c.is_ascii_hexdigit() { - hex.push(chars.next().unwrap()); + hex.push(chars.next().expect("chars.next() valid: peek() confirmed char exists")); } else { break; } @@ -299,7 +304,7 @@ fn format_string(format: &str, args: &[String], arg_index: &mut usize) -> String || c == '#' || c == '.' { - spec.push(chars.next().unwrap()); + spec.push(chars.next().expect("chars.next() valid: peek() confirmed char exists")); } else { break; } @@ -465,8 +470,7 @@ fn shell_quote(s: &str) -> String { } /// Expand escape sequences in a string -// chars.next().unwrap() is safe: only called after peek() confirms char exists -#[allow(clippy::unwrap_used, clippy::collapsible_if)] +#[allow(clippy::collapsible_if)] fn expand_escapes(s: &str) -> String { let mut output = String::new(); let mut chars = s.chars().peekable(); @@ -484,7 +488,7 @@ fn expand_escapes(s: &str) -> String { let mut octal = String::from("0"); while let Some(&c) = chars.peek() { if c.is_ascii_digit() && c != '8' && c != '9' && octal.len() < 4 { - octal.push(chars.next().unwrap()); + octal.push(chars.next().expect("chars.next() valid: peek() confirmed char exists")); } else { break; } @@ -499,7 +503,7 @@ fn expand_escapes(s: &str) -> String { for _ in 0..2 { if let Some(&c) = chars.peek() { if c.is_ascii_hexdigit() { - hex.push(chars.next().unwrap()); + hex.push(chars.next().expect("chars.next() valid: peek() confirmed char exists")); } else { break; } @@ -542,8 +546,6 @@ fn expand_escapes(s: &str) -> String { /// Parse a unicode escape sequence (\uHHHH or \UHHHHHHHH) from a char iterator. /// `max_digits` is 4 for \u and 8 for \U. -// chars.next().unwrap() is safe: only called after peek() confirms char exists -#[allow(clippy::unwrap_used)] fn parse_unicode_escape( chars: &mut std::iter::Peekable>, max_digits: usize, @@ -552,7 +554,11 @@ fn parse_unicode_escape( for _ in 0..max_digits { if let Some(&c) = chars.peek() { if c.is_ascii_hexdigit() { - hex.push(chars.next().unwrap()); + hex.push( + chars + .next() + .expect("chars.next() valid: peek() confirmed char exists"), + ); } else { break; } diff --git a/crates/bashkit/src/builtins/python.rs b/crates/bashkit/src/builtins/python.rs index 8fd7945b..20ef290d 100644 --- a/crates/bashkit/src/builtins/python.rs +++ b/crates/bashkit/src/builtins/python.rs @@ -767,7 +767,6 @@ fn format_exception_with_output(e: MontyException, printed: &str) -> ExecResult } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::builtins::Context; diff --git a/crates/bashkit/src/builtins/read.rs b/crates/bashkit/src/builtins/read.rs index 1a141075..557f7d04 100644 --- a/crates/bashkit/src/builtins/read.rs +++ b/crates/bashkit/src/builtins/read.rs @@ -183,7 +183,6 @@ impl Builtin for Read { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/retry.rs b/crates/bashkit/src/builtins/retry.rs index d39e6aff..0cd5d363 100644 --- a/crates/bashkit/src/builtins/retry.rs +++ b/crates/bashkit/src/builtins/retry.rs @@ -155,7 +155,6 @@ impl Builtin for Retry { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/rg.rs b/crates/bashkit/src/builtins/rg.rs index bafc7357..6fbd66a8 100644 --- a/crates/bashkit/src/builtins/rg.rs +++ b/crates/bashkit/src/builtins/rg.rs @@ -241,7 +241,6 @@ impl Builtin for Rg { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::fs::{FileSystem, InMemoryFs}; diff --git a/crates/bashkit/src/builtins/sed.rs b/crates/bashkit/src/builtins/sed.rs index f5e971c7..236d4026 100644 --- a/crates/bashkit/src/builtins/sed.rs +++ b/crates/bashkit/src/builtins/sed.rs @@ -968,7 +968,6 @@ fn find_label(cmds: &[(Option
, bool, SedCommand)], target: &str) -> Opt } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::fs::InMemoryFs; diff --git a/crates/bashkit/src/builtins/semver.rs b/crates/bashkit/src/builtins/semver.rs index 88b3d961..313565f8 100644 --- a/crates/bashkit/src/builtins/semver.rs +++ b/crates/bashkit/src/builtins/semver.rs @@ -209,7 +209,6 @@ impl Builtin for Semver { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/seq.rs b/crates/bashkit/src/builtins/seq.rs index 606e2420..21a25339 100644 --- a/crates/bashkit/src/builtins/seq.rs +++ b/crates/bashkit/src/builtins/seq.rs @@ -183,7 +183,6 @@ impl Builtin for Seq { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/sleep.rs b/crates/bashkit/src/builtins/sleep.rs index 50fe25e1..7fc99d52 100644 --- a/crates/bashkit/src/builtins/sleep.rs +++ b/crates/bashkit/src/builtins/sleep.rs @@ -56,7 +56,6 @@ impl Builtin for Sleep { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/sortuniq.rs b/crates/bashkit/src/builtins/sortuniq.rs index c374e44b..f38805bd 100644 --- a/crates/bashkit/src/builtins/sortuniq.rs +++ b/crates/bashkit/src/builtins/sortuniq.rs @@ -511,7 +511,6 @@ impl Builtin for Uniq { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/split.rs b/crates/bashkit/src/builtins/split.rs index f4f28f07..b11a8362 100644 --- a/crates/bashkit/src/builtins/split.rs +++ b/crates/bashkit/src/builtins/split.rs @@ -157,7 +157,6 @@ fn parse_size(s: &str) -> Option { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::fs::{FileSystem, InMemoryFs}; diff --git a/crates/bashkit/src/builtins/strings.rs b/crates/bashkit/src/builtins/strings.rs index 35522cbb..4e0c9ee2 100644 --- a/crates/bashkit/src/builtins/strings.rs +++ b/crates/bashkit/src/builtins/strings.rs @@ -183,7 +183,6 @@ impl Builtin for Strings { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/system.rs b/crates/bashkit/src/builtins/system.rs index a0f404c7..5c2e4ad8 100644 --- a/crates/bashkit/src/builtins/system.rs +++ b/crates/bashkit/src/builtins/system.rs @@ -296,7 +296,6 @@ impl Builtin for Id { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::fs::InMemoryFs; diff --git a/crates/bashkit/src/builtins/template.rs b/crates/bashkit/src/builtins/template.rs index d1264b77..0efcfaf2 100644 --- a/crates/bashkit/src/builtins/template.rs +++ b/crates/bashkit/src/builtins/template.rs @@ -359,7 +359,6 @@ impl Builtin for Template { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/test.rs b/crates/bashkit/src/builtins/test.rs index 4f24f523..3be04778 100644 --- a/crates/bashkit/src/builtins/test.rs +++ b/crates/bashkit/src/builtins/test.rs @@ -278,7 +278,6 @@ fn parse_int(s: &str) -> i64 { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/timeout.rs b/crates/bashkit/src/builtins/timeout.rs index 8febc62f..fd7ddab2 100644 --- a/crates/bashkit/src/builtins/timeout.rs +++ b/crates/bashkit/src/builtins/timeout.rs @@ -172,7 +172,6 @@ impl Builtin for Timeout { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/tomlq.rs b/crates/bashkit/src/builtins/tomlq.rs index a19b4096..c94a49f3 100644 --- a/crates/bashkit/src/builtins/tomlq.rs +++ b/crates/bashkit/src/builtins/tomlq.rs @@ -335,7 +335,6 @@ impl Builtin for Tomlq { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/tree.rs b/crates/bashkit/src/builtins/tree.rs index 035f4a64..4d514a04 100644 --- a/crates/bashkit/src/builtins/tree.rs +++ b/crates/bashkit/src/builtins/tree.rs @@ -218,7 +218,6 @@ async fn build_tree( } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::fs::{FileSystem, InMemoryFs}; diff --git a/crates/bashkit/src/builtins/verify.rs b/crates/bashkit/src/builtins/verify.rs index a763fb10..0228621b 100644 --- a/crates/bashkit/src/builtins/verify.rs +++ b/crates/bashkit/src/builtins/verify.rs @@ -121,7 +121,6 @@ impl Builtin for Verify { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/wait.rs b/crates/bashkit/src/builtins/wait.rs index a1509ecb..192fb02e 100644 --- a/crates/bashkit/src/builtins/wait.rs +++ b/crates/bashkit/src/builtins/wait.rs @@ -42,7 +42,6 @@ impl Builtin for Wait { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/wc.rs b/crates/bashkit/src/builtins/wc.rs index 8422bdce..6f3672ed 100644 --- a/crates/bashkit/src/builtins/wc.rs +++ b/crates/bashkit/src/builtins/wc.rs @@ -244,7 +244,6 @@ fn format_counts( } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/yaml.rs b/crates/bashkit/src/builtins/yaml.rs index 07593dc3..5870334d 100644 --- a/crates/bashkit/src/builtins/yaml.rs +++ b/crates/bashkit/src/builtins/yaml.rs @@ -516,7 +516,6 @@ impl Builtin for Yaml { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::collections::HashMap; diff --git a/crates/bashkit/src/builtins/zip_cmd.rs b/crates/bashkit/src/builtins/zip_cmd.rs index 9a265497..3175a8e1 100644 --- a/crates/bashkit/src/builtins/zip_cmd.rs +++ b/crates/bashkit/src/builtins/zip_cmd.rs @@ -369,7 +369,6 @@ impl Builtin for Unzip { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::fs::{FileSystem, InMemoryFs}; diff --git a/crates/bashkit/src/fs/backend.rs b/crates/bashkit/src/fs/backend.rs index e7f65a80..fa453a7a 100644 --- a/crates/bashkit/src/fs/backend.rs +++ b/crates/bashkit/src/fs/backend.rs @@ -205,7 +205,6 @@ pub trait FsBackend: Send + Sync { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::error::Result; diff --git a/crates/bashkit/src/fs/limits.rs b/crates/bashkit/src/fs/limits.rs index d52605ea..189194f4 100644 --- a/crates/bashkit/src/fs/limits.rs +++ b/crates/bashkit/src/fs/limits.rs @@ -493,7 +493,6 @@ impl FsUsage { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::path::PathBuf; diff --git a/crates/bashkit/src/fs/memory.rs b/crates/bashkit/src/fs/memory.rs index 80285d55..260caeec 100644 --- a/crates/bashkit/src/fs/memory.rs +++ b/crates/bashkit/src/fs/memory.rs @@ -1378,7 +1378,6 @@ impl FileSystem for InMemoryFs { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; diff --git a/crates/bashkit/src/fs/mountable.rs b/crates/bashkit/src/fs/mountable.rs index 2f16624a..d1eadbbc 100644 --- a/crates/bashkit/src/fs/mountable.rs +++ b/crates/bashkit/src/fs/mountable.rs @@ -490,7 +490,6 @@ impl FileSystem for MountableFs { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::fs::InMemoryFs; diff --git a/crates/bashkit/src/fs/overlay.rs b/crates/bashkit/src/fs/overlay.rs index eced9891..0735a7c2 100644 --- a/crates/bashkit/src/fs/overlay.rs +++ b/crates/bashkit/src/fs/overlay.rs @@ -806,7 +806,6 @@ impl FileSystem for OverlayFs { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; diff --git a/crates/bashkit/src/fs/realfs.rs b/crates/bashkit/src/fs/realfs.rs index 19689510..95553e2a 100644 --- a/crates/bashkit/src/fs/realfs.rs +++ b/crates/bashkit/src/fs/realfs.rs @@ -421,7 +421,6 @@ impl FsBackend for RealFs { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use tempfile::TempDir; diff --git a/crates/bashkit/src/fs/traits.rs b/crates/bashkit/src/fs/traits.rs index a904a60d..9213be39 100644 --- a/crates/bashkit/src/fs/traits.rs +++ b/crates/bashkit/src/fs/traits.rs @@ -484,7 +484,6 @@ pub struct DirEntry { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; diff --git a/crates/bashkit/src/git/client.rs b/crates/bashkit/src/git/client.rs index 549ad618..3c66b23c 100644 --- a/crates/bashkit/src/git/client.rs +++ b/crates/bashkit/src/git/client.rs @@ -1617,7 +1617,6 @@ impl GitClient { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use crate::fs::InMemoryFs; diff --git a/crates/bashkit/src/interpreter/jobs.rs b/crates/bashkit/src/interpreter/jobs.rs index 3eeeb47a..197ea22d 100644 --- a/crates/bashkit/src/interpreter/jobs.rs +++ b/crates/bashkit/src/interpreter/jobs.rs @@ -113,7 +113,6 @@ pub fn new_shared_job_table() -> SharedJobTable { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; diff --git a/crates/bashkit/src/interpreter/state.rs b/crates/bashkit/src/interpreter/state.rs index eef851bb..d1da94eb 100644 --- a/crates/bashkit/src/interpreter/state.rs +++ b/crates/bashkit/src/interpreter/state.rs @@ -99,7 +99,6 @@ impl ExecResult { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; diff --git a/crates/bashkit/src/lib.rs b/crates/bashkit/src/lib.rs index eca63bea..f0757601 100644 --- a/crates/bashkit/src/lib.rs +++ b/crates/bashkit/src/lib.rs @@ -394,6 +394,7 @@ // Stricter panic prevention - prefer proper error handling over unwrap() #![warn(clippy::unwrap_used)] +#![cfg_attr(test, allow(clippy::unwrap_used))] mod builtins; mod error; @@ -1761,7 +1762,6 @@ pub mod python_guide {} pub mod logging_guide {} #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; use std::sync::{Arc, Mutex}; diff --git a/crates/bashkit/src/limits.rs b/crates/bashkit/src/limits.rs index 45ece140..251028c1 100644 --- a/crates/bashkit/src/limits.rs +++ b/crates/bashkit/src/limits.rs @@ -695,7 +695,6 @@ impl MemoryBudget { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; diff --git a/crates/bashkit/src/network/allowlist.rs b/crates/bashkit/src/network/allowlist.rs index 2575cdf7..cca48024 100644 --- a/crates/bashkit/src/network/allowlist.rs +++ b/crates/bashkit/src/network/allowlist.rs @@ -235,7 +235,6 @@ impl NetworkAllowlist { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; diff --git a/crates/bashkit/src/network/client.rs b/crates/bashkit/src/network/client.rs index 3dad7387..5b4213c3 100644 --- a/crates/bashkit/src/network/client.rs +++ b/crates/bashkit/src/network/client.rs @@ -445,7 +445,6 @@ fn build_client( } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; diff --git a/crates/bashkit/src/parser/ast.rs b/crates/bashkit/src/parser/ast.rs index cf0afcec..15da7f0e 100644 --- a/crates/bashkit/src/parser/ast.rs +++ b/crates/bashkit/src/parser/ast.rs @@ -512,7 +512,6 @@ pub enum AssignmentValue { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; diff --git a/crates/bashkit/src/parser/lexer.rs b/crates/bashkit/src/parser/lexer.rs index a07a1d25..d88068e8 100644 --- a/crates/bashkit/src/parser/lexer.rs +++ b/crates/bashkit/src/parser/lexer.rs @@ -1648,7 +1648,6 @@ impl<'a> Lexer<'a> { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; diff --git a/crates/bashkit/src/parser/mod.rs b/crates/bashkit/src/parser/mod.rs index 677ebc19..27be0aaa 100644 --- a/crates/bashkit/src/parser/mod.rs +++ b/crates/bashkit/src/parser/mod.rs @@ -3147,7 +3147,6 @@ impl<'a> Parser<'a> { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; diff --git a/crates/bashkit/src/tool.rs b/crates/bashkit/src/tool.rs index a9c8410b..f736b3f8 100644 --- a/crates/bashkit/src/tool.rs +++ b/crates/bashkit/src/tool.rs @@ -1236,7 +1236,6 @@ pub(crate) fn tool_output_from_response( } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*; diff --git a/crates/bashkit/src/trace.rs b/crates/bashkit/src/trace.rs index 954ed3b3..3724c8d5 100644 --- a/crates/bashkit/src/trace.rs +++ b/crates/bashkit/src/trace.rs @@ -309,7 +309,6 @@ fn redact_url_credentials(url: &str) -> String { } #[cfg(test)] -#[allow(clippy::unwrap_used)] mod tests { use super::*;