From 3ae4f3276d1985eee123ffb9047f033bab4e06de Mon Sep 17 00:00:00 2001 From: Valentin Maerten Date: Sun, 31 May 2026 13:21:47 +0200 Subject: [PATCH 1/3] feat(completion): complete task aliases in zsh --- completion/zsh/_task | 21 +++++++++++++++++++-- website/src/docs/installation.md | 7 +++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/completion/zsh/_task b/completion/zsh/_task index 9f93195520..763a06a123 100755 --- a/completion/zsh/_task +++ b/completion/zsh/_task @@ -13,9 +13,9 @@ function __task_is_experiment_enabled() { # Listing commands from Taskfile.yml function __task_list() { - local -a scripts cmd + local -a scripts cmd task_aliases match mbegin mend local -i enabled=0 - local taskfile item task desc + local taskfile item task desc task_alias cmd=($TASK_CMD) taskfile=${(Qv)opt_args[(i)-t|--taskfile]} @@ -50,14 +50,31 @@ function __task_list() { local show_desc zstyle -T ":completion:${curcontext}:" verbose && show_desc=true || show_desc=false + # Read zstyle show-aliases option (default = true via -T) + local show_aliases + zstyle -T ":completion:${curcontext}:" show-aliases && show_aliases=true || show_aliases=false + for item in "${(@)${(f)output}[2,-1]#\* }"; do task="${item%%:[[:space:]]*}" + # Extract the aliases listed in the trailing "(aliases: a, b)" column. + # NB: `aliases` is a reserved zsh parameter, so use a different name. + task_aliases=() + if [[ "$show_aliases" == "true" && "$item" == (#b)*'(aliases: '(*)')' ]]; then + task_aliases=( "${(@s:, :)match[1]}" ) + fi + if [[ "$show_desc" == "true" ]]; then local desc="${item##[^[:space:]]##[[:space:]]##}" scripts+=( "${task//:/\\:}:$desc" ) + for task_alias in $task_aliases; do + scripts+=( "${task_alias//:/\\:}:$desc" ) + done else scripts+=( "$task" ) + for task_alias in $task_aliases; do + scripts+=( "$task_alias" ) + done fi done diff --git a/website/src/docs/installation.md b/website/src/docs/installation.md index c45e2a3b24..a983dc0e0f 100644 --- a/website/src/docs/installation.md +++ b/website/src/docs/installation.md @@ -439,3 +439,10 @@ names without descriptions, add this to your `~/.zshrc` (after the completion is ```shell zstyle ':completion:*:*:task:*' verbose false ``` + +By default, task aliases are also offered as completions. To complete only the +canonical task names, add the `show-aliases` zstyle: + +```shell +zstyle ':completion:*:*:task:*' show-aliases false +``` From 14acb03fde9d3a4f1af99e53a63fa92f17e92000 Mon Sep 17 00:00:00 2001 From: Valentin Maerten Date: Sun, 31 May 2026 13:21:47 +0200 Subject: [PATCH 2/3] chore: changelog for #2865 --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3bb0bef690..79cac9e74b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ by @Legimity). - PowerShell completions now work with aliases of the `task` command, not just the `task` binary itself (#2852 by @kojiishi). +- Fixed task and namespace aliases not being completed by the Zsh completion. + A `show-aliases` zstyle can turn this off (#2865, #2864 by @vmaerten). ## v3.51.1 - 2026-05-16 From 174ffe3a0cf61337d39899c10403368afbe42e07 Mon Sep 17 00:00:00 2001 From: Valentin Maerten Date: Mon, 29 Jun 2026 16:18:51 +0200 Subject: [PATCH 3/3] feat(completion): show canonical task name in zsh alias completion Append "(alias of )" to the alias description so users see both what the task does and that the entry is an alias, without a second lookup. --- completion/zsh/_task | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/completion/zsh/_task b/completion/zsh/_task index 763a06a123..ba163f45e7 100755 --- a/completion/zsh/_task +++ b/completion/zsh/_task @@ -68,7 +68,7 @@ function __task_list() { local desc="${item##[^[:space:]]##[[:space:]]##}" scripts+=( "${task//:/\\:}:$desc" ) for task_alias in $task_aliases; do - scripts+=( "${task_alias//:/\\:}:$desc" ) + scripts+=( "${task_alias//:/\\:}:$desc (alias of $task)" ) done else scripts+=( "$task" )