diff --git a/scripts/test-all.sh b/scripts/test-all.sh index f0e2c06b..577c3cd7 100755 --- a/scripts/test-all.sh +++ b/scripts/test-all.sh @@ -139,6 +139,11 @@ assert_ok "rtk ls multi paths" rtk ls src/ scripts/ assert_contains "rtk ls -a shows hidden" ".git" rtk ls -a . assert_contains "rtk ls shows sizes" "K" rtk ls src/ assert_contains "rtk ls shows dirs with /" "/" rtk ls . +assert_ok "rtk ls -1 (filters no-metadata)" rtk ls -1 . +assert_ok "rtk ls -F (filters duplicate /)" rtk ls -F . +assert_ok "rtk ls -p (filters duplicate /)" rtk ls -p . +assert_ok "rtk ls -CmDgiosx (parser breakers)" rtk ls -CmDgiosx . +assert_ok "rtk ls -1Fp combined" rtk ls -1Fp . # ── 2b. Tree ───────────────────────────────────────── diff --git a/src/cmds/system/ls.rs b/src/cmds/system/ls.rs index 3426e7fb..fbbc1889 100644 --- a/src/cmds/system/ls.rs +++ b/src/cmds/system/ls.rs @@ -52,7 +52,8 @@ pub fn run(args: &[String], verbose: u8) -> Result<()> { .collect(); // Build ls -la + any extra flags the user passed (e.g. -R) - // Strip -l, -a, -h (we handle all of these ourselves) + // Filter flags that break parsing (-1, -C, -m, -D, -g, -o, -i, -s, -x), + // cause visual issues (-F, -p), or are RTK-handled (-l, -a, -h). let mut cmd = resolved_command("ls"); cmd.arg("-la"); for flag in &flags { @@ -65,7 +66,24 @@ pub fn run(args: &[String], verbose: u8) -> Result<()> { let stripped = flag.trim_start_matches('-'); let extra: String = stripped .chars() - .filter(|c| *c != 'l' && *c != 'a' && *c != 'h') + .filter(|c| { + !matches!( + c, + 'l' | 'a' + | 'h' + | '1' + | 'C' + | 'm' + | 'D' + | 'g' + | 'o' + | 'i' + | 's' + | 'x' + | 'F' + | 'p' + ) + }) .collect(); if !extra.is_empty() { cmd.arg(format!("-{}", extra));