From 3d9c234e123f94b597d7035b5a6dc84e2e62749d Mon Sep 17 00:00:00 2001 From: Jeff Dickey Date: Tue, 23 Jun 2026 13:10:58 -0500 Subject: [PATCH] fix(zsh): preserve options for default completion --- cli/tests/shell_completions_integration.rs | 13 ++++++++++++- ...ge__complete__zsh__tests__complete_zsh_init.snap | 1 + lib/src/complete/zsh.rs | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/cli/tests/shell_completions_integration.rs b/cli/tests/shell_completions_integration.rs index 7ec400ea..d4d49f33 100644 --- a/cli/tests/shell_completions_integration.rs +++ b/cli/tests/shell_completions_integration.rs @@ -1137,6 +1137,7 @@ fn test_zsh_completion_init_integration() { // Stub `compadd`/`_files` to capture what the handler offers without // needing an interactive ZLE context. Drive with $words/$CURRENT. + // The fallback must preserve completion-friendly options for `_files`. // The init template calls `compadd -l -d -U -Q -S '' -a `. let test_script = format!( r#"#!/usr/bin/env zsh @@ -1152,7 +1153,9 @@ compadd() {{ print -r -- "[compadd:display] $d" print -r -- "[compadd:inserts] $i" }} -_files() {{ print -r -- "[files-fallback]" }} +_files() {{ + print -r -- "[files-fallback] nomatch=$options[nomatch] extendedglob=$options[extendedglob]" +}} words=(ex "") CURRENT=2 @@ -1161,6 +1164,10 @@ _usage_default_complete words=(ex "--f") CURRENT=2 _usage_default_complete + +words=(plain "") +CURRENT=2 +_usage_default_complete "#, bin_dir = bin_dir.display(), usage_dir = usage_bin.parent().unwrap().display(), @@ -1189,6 +1196,10 @@ _usage_default_complete stdout.contains("[compadd:display]") && stdout.contains("--foo"), "expected --foo flag in compadd display, got: {stdout}" ); + assert!( + stdout.contains("[files-fallback] nomatch=off extendedglob=on"), + "expected file fallback to disable nomatch and enable extendedglob, got: {stdout}" + ); let _ = fs::remove_dir_all(&temp_dir); } diff --git a/lib/src/complete/snapshots/usage__complete__zsh__tests__complete_zsh_init.snap b/lib/src/complete/snapshots/usage__complete__zsh__tests__complete_zsh_init.snap index bb0a1ef8..66969392 100644 --- a/lib/src/complete/snapshots/usage__complete__zsh__tests__complete_zsh_init.snap +++ b/lib/src/complete/snapshots/usage__complete__zsh__tests__complete_zsh_init.snap @@ -8,6 +8,7 @@ expression: "complete_zsh_init(\"usage\")" _usage_default_complete() { emulate -L zsh + setopt localoptions nonomatch extendedglob local cmd cmdpath cmd="${words[1]}" if [[ "$cmd" == */* ]]; then diff --git a/lib/src/complete/zsh.rs b/lib/src/complete/zsh.rs index ed5e25e5..949b9cf4 100644 --- a/lib/src/complete/zsh.rs +++ b/lib/src/complete/zsh.rs @@ -189,6 +189,7 @@ pub fn complete_zsh_init(usage_bin: &str) -> String { _usage_default_complete() {{ emulate -L zsh + setopt localoptions nonomatch extendedglob local cmd cmdpath cmd="${{words[1]}}" if [[ "$cmd" == */* ]]; then