Don't check in auto-generated completion scripts (#2120)
This commit is contained in:
parent
f2201d8684
commit
8d3d88fc13
6
.github/workflows/ci.yaml
vendored
6
.github/workflows/ci.yaml
vendored
@ -30,12 +30,6 @@ jobs:
|
|||||||
- name: Format
|
- name: Format
|
||||||
run: cargo fmt --all -- --check
|
run: cargo fmt --all -- --check
|
||||||
|
|
||||||
- name: Completion Scripts
|
|
||||||
run: |
|
|
||||||
./bin/update-completions
|
|
||||||
git diff --no-ext-diff --quiet --exit-code
|
|
||||||
./tests/completions/just.bash
|
|
||||||
|
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
|
8
.github/workflows/release.yaml
vendored
8
.github/workflows/release.yaml
vendored
@ -73,6 +73,14 @@ jobs:
|
|||||||
id: ref-type
|
id: ref-type
|
||||||
run: cargo run --package ref-type -- --reference ${{ github.ref }} >> $GITHUB_OUTPUT
|
run: cargo run --package ref-type -- --reference ${{ github.ref }} >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Generate Completion Scripts
|
||||||
|
run: |
|
||||||
|
set -euxo pipefail
|
||||||
|
cargo build
|
||||||
|
for shell in bash elvish fish powershell zsh; do
|
||||||
|
./target/debug/just --completions $shell > completions/just.$shell
|
||||||
|
done
|
||||||
|
|
||||||
- name: Package
|
- name: Package
|
||||||
id: package
|
id: package
|
||||||
env:
|
env:
|
||||||
|
12
README.md
12
README.md
@ -3472,18 +3472,18 @@ complete -F _just -o bashdefault -o default j
|
|||||||
|
|
||||||
### Shell Completion Scripts
|
### Shell Completion Scripts
|
||||||
|
|
||||||
Shell completion scripts for Bash, Zsh, Fish, PowerShell, and Elvish are
|
Shell completion scripts for Bash, Elvish, Fish, Nushell, PowerShell, and Zsh
|
||||||
available in the
|
are available [release archives](https://github.com/casey/just/releases).
|
||||||
[completions](https://github.com/casey/just/tree/master/completions) directory.
|
|
||||||
Please refer to your shell's documentation for how to install them.
|
|
||||||
|
|
||||||
The `just` binary can also generate the same completion scripts at runtime,
|
The `just` binary can also generate the same completion scripts at runtime
|
||||||
using the `--completions` command:
|
using `just --completions SHELL`:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ just --completions zsh > just.zsh
|
$ just --completions zsh > just.zsh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Please refer to your shell's documentation for how to install them.
|
||||||
|
|
||||||
*macOS Note:* Recent versions of macOS use zsh as the default shell. If you use
|
*macOS Note:* Recent versions of macOS use zsh as the default shell. If you use
|
||||||
Homebrew to install `just`, it will automatically install the most recent copy
|
Homebrew to install `just`, it will automatically install the most recent copy
|
||||||
of the zsh completion script in the Homebrew zsh directory, which the built-in
|
of the zsh completion script in the Homebrew zsh directory, which the built-in
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -euxo pipefail
|
|
||||||
|
|
||||||
cargo build
|
|
||||||
|
|
||||||
for script in completions/*; do
|
|
||||||
shell=${script##*.}
|
|
||||||
if [ $shell == nu ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
./target/debug/just --completions $shell > $script
|
|
||||||
done
|
|
@ -1,165 +0,0 @@
|
|||||||
_just() {
|
|
||||||
local i cur prev words cword opts cmd
|
|
||||||
COMPREPLY=()
|
|
||||||
|
|
||||||
# Modules use "::" as the separator, which is considered a wordbreak character in bash.
|
|
||||||
# The _get_comp_words_by_ref function is a hack to allow for exceptions to this rule without
|
|
||||||
# modifying the global COMP_WORDBREAKS environment variable.
|
|
||||||
if type _get_comp_words_by_ref &>/dev/null; then
|
|
||||||
_get_comp_words_by_ref -n : cur prev words cword
|
|
||||||
else
|
|
||||||
cur="${COMP_WORDS[COMP_CWORD]}"
|
|
||||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
|
||||||
words=$COMP_WORDS
|
|
||||||
cword=$COMP_CWORD
|
|
||||||
fi
|
|
||||||
|
|
||||||
cmd=""
|
|
||||||
opts=""
|
|
||||||
|
|
||||||
for i in ${words[@]}
|
|
||||||
do
|
|
||||||
case "${cmd},${i}" in
|
|
||||||
",$1")
|
|
||||||
cmd="just"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
case "${cmd}" in
|
|
||||||
just)
|
|
||||||
opts="-n -f -q -u -v -d -c -e -l -s -E -g -h -V --check --chooser --color --command-color --yes --dry-run --dump-format --highlight --list-heading --list-prefix --list-submodules --no-aliases --no-deps --no-dotenv --no-highlight --justfile --quiet --set --shell --shell-arg --shell-command --clear-shell-args --unsorted --unstable --verbose --working-directory --changelog --choose --command --completions --dump --edit --evaluate --fmt --init --list --groups --man --show --summary --variables --dotenv-filename --dotenv-path --global-justfile --timestamp --timestamp-format --help --version [ARGUMENTS]..."
|
|
||||||
if [[ ${cur} == -* ]] ; then
|
|
||||||
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
|
||||||
return 0
|
|
||||||
elif [[ ${cword} -eq 1 ]]; then
|
|
||||||
local recipes=$(just --summary 2> /dev/null)
|
|
||||||
|
|
||||||
if echo "${cur}" | \grep -qF '/'; then
|
|
||||||
local path_prefix=$(echo "${cur}" | sed 's/[/][^/]*$/\//')
|
|
||||||
local recipes=$(just --summary 2> /dev/null -- "${path_prefix}")
|
|
||||||
local recipes=$(printf "${path_prefix}%s\t" $recipes)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $? -eq 0 ]]; then
|
|
||||||
COMPREPLY=( $(compgen -W "${recipes}" -- "${cur}") )
|
|
||||||
if type __ltrim_colon_completions &>/dev/null; then
|
|
||||||
__ltrim_colon_completions "$cur"
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
case "${prev}" in
|
|
||||||
--chooser)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
--color)
|
|
||||||
COMPREPLY=($(compgen -W "auto always never" -- "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
--command-color)
|
|
||||||
COMPREPLY=($(compgen -W "black blue cyan green purple red yellow" -- "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
--dump-format)
|
|
||||||
COMPREPLY=($(compgen -W "just json" -- "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
--list-heading)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
--list-prefix)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
--justfile)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
-f)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
--set)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
--shell)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
--shell-arg)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
--working-directory)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
-d)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
--command)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
-c)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
--completions)
|
|
||||||
COMPREPLY=($(compgen -W "bash elvish fish powershell zsh" -- "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
--list)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
-l)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
--show)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
-s)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
--dotenv-filename)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
--dotenv-path)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
-E)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
--timestamp-format)
|
|
||||||
COMPREPLY=($(compgen -f "${cur}"))
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
COMPREPLY=()
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ "${BASH_VERSINFO[0]}" -eq 4 && "${BASH_VERSINFO[1]}" -ge 4 || "${BASH_VERSINFO[0]}" -gt 4 ]]; then
|
|
||||||
complete -F _just -o nosort -o bashdefault -o default just
|
|
||||||
else
|
|
||||||
complete -F _just -o bashdefault -o default just
|
|
||||||
fi
|
|
@ -1,85 +0,0 @@
|
|||||||
use builtin;
|
|
||||||
use str;
|
|
||||||
|
|
||||||
set edit:completion:arg-completer[just] = {|@words|
|
|
||||||
fn spaces {|n|
|
|
||||||
builtin:repeat $n ' ' | str:join ''
|
|
||||||
}
|
|
||||||
fn cand {|text desc|
|
|
||||||
edit:complex-candidate $text &display=$text' '(spaces (- 14 (wcswidth $text)))$desc
|
|
||||||
}
|
|
||||||
var command = 'just'
|
|
||||||
for word $words[1..-1] {
|
|
||||||
if (str:has-prefix $word '-') {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
set command = $command';'$word
|
|
||||||
}
|
|
||||||
var completions = [
|
|
||||||
&'just'= {
|
|
||||||
cand --chooser 'Override binary invoked by `--choose`'
|
|
||||||
cand --color 'Print colorful output'
|
|
||||||
cand --command-color 'Echo recipe lines in <COMMAND-COLOR>'
|
|
||||||
cand --dump-format 'Dump justfile as <FORMAT>'
|
|
||||||
cand --list-heading 'Print <TEXT> before list'
|
|
||||||
cand --list-prefix 'Print <TEXT> before each list item'
|
|
||||||
cand -f 'Use <JUSTFILE> as justfile'
|
|
||||||
cand --justfile 'Use <JUSTFILE> as justfile'
|
|
||||||
cand --set 'Override <VARIABLE> with <VALUE>'
|
|
||||||
cand --shell 'Invoke <SHELL> to run recipes'
|
|
||||||
cand --shell-arg 'Invoke shell with <SHELL-ARG> as an argument'
|
|
||||||
cand -d 'Use <WORKING-DIRECTORY> as working directory. --justfile must also be set'
|
|
||||||
cand --working-directory 'Use <WORKING-DIRECTORY> as working directory. --justfile must also be set'
|
|
||||||
cand -c 'Run an arbitrary command with the working directory, `.env`, overrides, and exports set'
|
|
||||||
cand --command 'Run an arbitrary command with the working directory, `.env`, overrides, and exports set'
|
|
||||||
cand --completions 'Print shell completion script for <SHELL>'
|
|
||||||
cand -l 'List available recipes'
|
|
||||||
cand --list 'List available recipes'
|
|
||||||
cand -s 'Show recipe at <PATH>'
|
|
||||||
cand --show 'Show recipe at <PATH>'
|
|
||||||
cand --dotenv-filename 'Search for environment file named <DOTENV-FILENAME> instead of `.env`'
|
|
||||||
cand -E 'Load <DOTENV-PATH> as environment file instead of searching for one'
|
|
||||||
cand --dotenv-path 'Load <DOTENV-PATH> as environment file instead of searching for one'
|
|
||||||
cand --timestamp-format 'Timestamp format string'
|
|
||||||
cand --check 'Run `--fmt` in ''check'' mode. Exits with 0 if justfile is formatted correctly. Exits with 1 and prints a diff if formatting is required.'
|
|
||||||
cand --yes 'Automatically confirm all recipes.'
|
|
||||||
cand -n 'Print what just would do without doing it'
|
|
||||||
cand --dry-run 'Print what just would do without doing it'
|
|
||||||
cand --highlight 'Highlight echoed recipe lines in bold'
|
|
||||||
cand --list-submodules 'List recipes in submodules'
|
|
||||||
cand --no-aliases 'Don''t show aliases in list'
|
|
||||||
cand --no-deps 'Don''t run recipe dependencies'
|
|
||||||
cand --no-dotenv 'Don''t load `.env` file'
|
|
||||||
cand --no-highlight 'Don''t highlight echoed recipe lines in bold'
|
|
||||||
cand -q 'Suppress all output'
|
|
||||||
cand --quiet 'Suppress all output'
|
|
||||||
cand --shell-command 'Invoke <COMMAND> with the shell used to run recipe lines and backticks'
|
|
||||||
cand --clear-shell-args 'Clear shell arguments'
|
|
||||||
cand -u 'Return list and summary entries in source order'
|
|
||||||
cand --unsorted 'Return list and summary entries in source order'
|
|
||||||
cand --unstable 'Enable unstable features'
|
|
||||||
cand -v 'Use verbose output'
|
|
||||||
cand --verbose 'Use verbose output'
|
|
||||||
cand --changelog 'Print changelog'
|
|
||||||
cand --choose 'Select one or more recipes to run using a binary chooser. If `--chooser` is not passed the chooser defaults to the value of $JUST_CHOOSER, falling back to `fzf`'
|
|
||||||
cand --dump 'Print justfile'
|
|
||||||
cand -e 'Edit justfile with editor given by $VISUAL or $EDITOR, falling back to `vim`'
|
|
||||||
cand --edit 'Edit justfile with editor given by $VISUAL or $EDITOR, falling back to `vim`'
|
|
||||||
cand --evaluate 'Evaluate and print all variables. If a variable name is given as an argument, only print that variable''s value.'
|
|
||||||
cand --fmt 'Format and overwrite justfile'
|
|
||||||
cand --init 'Initialize new justfile in project root'
|
|
||||||
cand --groups 'List recipe groups'
|
|
||||||
cand --man 'Print man page'
|
|
||||||
cand --summary 'List names of available recipes'
|
|
||||||
cand --variables 'List names of variables'
|
|
||||||
cand -g 'Use global justfile'
|
|
||||||
cand --global-justfile 'Use global justfile'
|
|
||||||
cand --timestamp 'Print recipe command timestamps'
|
|
||||||
cand -h 'Print help'
|
|
||||||
cand --help 'Print help'
|
|
||||||
cand -V 'Print version'
|
|
||||||
cand --version 'Print version'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
$completions[$command]
|
|
||||||
}
|
|
@ -1,85 +0,0 @@
|
|||||||
function __fish_just_complete_recipes
|
|
||||||
just --list 2> /dev/null | tail -n +2 | awk '{
|
|
||||||
command = $1;
|
|
||||||
args = $0;
|
|
||||||
desc = "";
|
|
||||||
delim = "";
|
|
||||||
sub(/^[[:space:]]*[^[:space:]]*/, "", args);
|
|
||||||
gsub(/^[[:space:]]+|[[:space:]]+$/, "", args);
|
|
||||||
|
|
||||||
if (match(args, /#.*/)) {
|
|
||||||
desc = substr(args, RSTART+2, RLENGTH);
|
|
||||||
args = substr(args, 0, RSTART-1);
|
|
||||||
gsub(/^[[:space:]]+|[[:space:]]+$/, "", args);
|
|
||||||
}
|
|
||||||
|
|
||||||
gsub(/\+|=[`\'"][^`\'"]*[`\'"]/, "", args);
|
|
||||||
gsub(/ /, ",", args);
|
|
||||||
|
|
||||||
if (args != ""){
|
|
||||||
args = "Args: " args;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args != "" && desc != "") {
|
|
||||||
delim = "; ";
|
|
||||||
}
|
|
||||||
|
|
||||||
print command "\t" args delim desc
|
|
||||||
}'
|
|
||||||
end
|
|
||||||
|
|
||||||
# don't suggest files right off
|
|
||||||
complete -c just -n "__fish_is_first_arg" --no-files
|
|
||||||
|
|
||||||
# complete recipes
|
|
||||||
complete -c just -a '(__fish_just_complete_recipes)'
|
|
||||||
|
|
||||||
# autogenerated completions
|
|
||||||
complete -c just -l chooser -d 'Override binary invoked by `--choose`' -r
|
|
||||||
complete -c just -l color -d 'Print colorful output' -r -f -a "{auto '',always '',never ''}"
|
|
||||||
complete -c just -l command-color -d 'Echo recipe lines in <COMMAND-COLOR>' -r -f -a "{black '',blue '',cyan '',green '',purple '',red '',yellow ''}"
|
|
||||||
complete -c just -l dump-format -d 'Dump justfile as <FORMAT>' -r -f -a "{just '',json ''}"
|
|
||||||
complete -c just -l list-heading -d 'Print <TEXT> before list' -r
|
|
||||||
complete -c just -l list-prefix -d 'Print <TEXT> before each list item' -r
|
|
||||||
complete -c just -s f -l justfile -d 'Use <JUSTFILE> as justfile' -r -F
|
|
||||||
complete -c just -l set -d 'Override <VARIABLE> with <VALUE>' -r
|
|
||||||
complete -c just -l shell -d 'Invoke <SHELL> to run recipes' -r
|
|
||||||
complete -c just -l shell-arg -d 'Invoke shell with <SHELL-ARG> as an argument' -r
|
|
||||||
complete -c just -s d -l working-directory -d 'Use <WORKING-DIRECTORY> as working directory. --justfile must also be set' -r -F
|
|
||||||
complete -c just -s c -l command -d 'Run an arbitrary command with the working directory, `.env`, overrides, and exports set' -r
|
|
||||||
complete -c just -l completions -d 'Print shell completion script for <SHELL>' -r -f -a "{bash '',elvish '',fish '',powershell '',zsh ''}"
|
|
||||||
complete -c just -s l -l list -d 'List available recipes' -r
|
|
||||||
complete -c just -s s -l show -d 'Show recipe at <PATH>' -r
|
|
||||||
complete -c just -l dotenv-filename -d 'Search for environment file named <DOTENV-FILENAME> instead of `.env`' -r
|
|
||||||
complete -c just -s E -l dotenv-path -d 'Load <DOTENV-PATH> as environment file instead of searching for one' -r -F
|
|
||||||
complete -c just -l timestamp-format -d 'Timestamp format string' -r
|
|
||||||
complete -c just -l check -d 'Run `--fmt` in \'check\' mode. Exits with 0 if justfile is formatted correctly. Exits with 1 and prints a diff if formatting is required.'
|
|
||||||
complete -c just -l yes -d 'Automatically confirm all recipes.'
|
|
||||||
complete -c just -s n -l dry-run -d 'Print what just would do without doing it'
|
|
||||||
complete -c just -l highlight -d 'Highlight echoed recipe lines in bold'
|
|
||||||
complete -c just -l list-submodules -d 'List recipes in submodules'
|
|
||||||
complete -c just -l no-aliases -d 'Don\'t show aliases in list'
|
|
||||||
complete -c just -l no-deps -d 'Don\'t run recipe dependencies'
|
|
||||||
complete -c just -l no-dotenv -d 'Don\'t load `.env` file'
|
|
||||||
complete -c just -l no-highlight -d 'Don\'t highlight echoed recipe lines in bold'
|
|
||||||
complete -c just -s q -l quiet -d 'Suppress all output'
|
|
||||||
complete -c just -l shell-command -d 'Invoke <COMMAND> with the shell used to run recipe lines and backticks'
|
|
||||||
complete -c just -l clear-shell-args -d 'Clear shell arguments'
|
|
||||||
complete -c just -s u -l unsorted -d 'Return list and summary entries in source order'
|
|
||||||
complete -c just -l unstable -d 'Enable unstable features'
|
|
||||||
complete -c just -s v -l verbose -d 'Use verbose output'
|
|
||||||
complete -c just -l changelog -d 'Print changelog'
|
|
||||||
complete -c just -l choose -d 'Select one or more recipes to run using a binary chooser. If `--chooser` is not passed the chooser defaults to the value of $JUST_CHOOSER, falling back to `fzf`'
|
|
||||||
complete -c just -l dump -d 'Print justfile'
|
|
||||||
complete -c just -s e -l edit -d 'Edit justfile with editor given by $VISUAL or $EDITOR, falling back to `vim`'
|
|
||||||
complete -c just -l evaluate -d 'Evaluate and print all variables. If a variable name is given as an argument, only print that variable\'s value.'
|
|
||||||
complete -c just -l fmt -d 'Format and overwrite justfile'
|
|
||||||
complete -c just -l init -d 'Initialize new justfile in project root'
|
|
||||||
complete -c just -l groups -d 'List recipe groups'
|
|
||||||
complete -c just -l man -d 'Print man page'
|
|
||||||
complete -c just -l summary -d 'List names of available recipes'
|
|
||||||
complete -c just -l variables -d 'List names of variables'
|
|
||||||
complete -c just -s g -l global-justfile -d 'Use global justfile'
|
|
||||||
complete -c just -l timestamp -d 'Print recipe command timestamps'
|
|
||||||
complete -c just -s h -l help -d 'Print help'
|
|
||||||
complete -c just -s V -l version -d 'Print version'
|
|
@ -1,111 +0,0 @@
|
|||||||
using namespace System.Management.Automation
|
|
||||||
using namespace System.Management.Automation.Language
|
|
||||||
|
|
||||||
Register-ArgumentCompleter -Native -CommandName 'just' -ScriptBlock {
|
|
||||||
param($wordToComplete, $commandAst, $cursorPosition)
|
|
||||||
|
|
||||||
$commandElements = $commandAst.CommandElements
|
|
||||||
$command = @(
|
|
||||||
'just'
|
|
||||||
for ($i = 1; $i -lt $commandElements.Count; $i++) {
|
|
||||||
$element = $commandElements[$i]
|
|
||||||
if ($element -isnot [StringConstantExpressionAst] -or
|
|
||||||
$element.StringConstantType -ne [StringConstantType]::BareWord -or
|
|
||||||
$element.Value.StartsWith('-') -or
|
|
||||||
$element.Value -eq $wordToComplete) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
$element.Value
|
|
||||||
}) -join ';'
|
|
||||||
|
|
||||||
$completions = @(switch ($command) {
|
|
||||||
'just' {
|
|
||||||
[CompletionResult]::new('--chooser', 'chooser', [CompletionResultType]::ParameterName, 'Override binary invoked by `--choose`')
|
|
||||||
[CompletionResult]::new('--color', 'color', [CompletionResultType]::ParameterName, 'Print colorful output')
|
|
||||||
[CompletionResult]::new('--command-color', 'command-color', [CompletionResultType]::ParameterName, 'Echo recipe lines in <COMMAND-COLOR>')
|
|
||||||
[CompletionResult]::new('--dump-format', 'dump-format', [CompletionResultType]::ParameterName, 'Dump justfile as <FORMAT>')
|
|
||||||
[CompletionResult]::new('--list-heading', 'list-heading', [CompletionResultType]::ParameterName, 'Print <TEXT> before list')
|
|
||||||
[CompletionResult]::new('--list-prefix', 'list-prefix', [CompletionResultType]::ParameterName, 'Print <TEXT> before each list item')
|
|
||||||
[CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'Use <JUSTFILE> as justfile')
|
|
||||||
[CompletionResult]::new('--justfile', 'justfile', [CompletionResultType]::ParameterName, 'Use <JUSTFILE> as justfile')
|
|
||||||
[CompletionResult]::new('--set', 'set', [CompletionResultType]::ParameterName, 'Override <VARIABLE> with <VALUE>')
|
|
||||||
[CompletionResult]::new('--shell', 'shell', [CompletionResultType]::ParameterName, 'Invoke <SHELL> to run recipes')
|
|
||||||
[CompletionResult]::new('--shell-arg', 'shell-arg', [CompletionResultType]::ParameterName, 'Invoke shell with <SHELL-ARG> as an argument')
|
|
||||||
[CompletionResult]::new('-d', 'd', [CompletionResultType]::ParameterName, 'Use <WORKING-DIRECTORY> as working directory. --justfile must also be set')
|
|
||||||
[CompletionResult]::new('--working-directory', 'working-directory', [CompletionResultType]::ParameterName, 'Use <WORKING-DIRECTORY> as working directory. --justfile must also be set')
|
|
||||||
[CompletionResult]::new('-c', 'c', [CompletionResultType]::ParameterName, 'Run an arbitrary command with the working directory, `.env`, overrides, and exports set')
|
|
||||||
[CompletionResult]::new('--command', 'command', [CompletionResultType]::ParameterName, 'Run an arbitrary command with the working directory, `.env`, overrides, and exports set')
|
|
||||||
[CompletionResult]::new('--completions', 'completions', [CompletionResultType]::ParameterName, 'Print shell completion script for <SHELL>')
|
|
||||||
[CompletionResult]::new('-l', 'l', [CompletionResultType]::ParameterName, 'List available recipes')
|
|
||||||
[CompletionResult]::new('--list', 'list', [CompletionResultType]::ParameterName, 'List available recipes')
|
|
||||||
[CompletionResult]::new('-s', 's', [CompletionResultType]::ParameterName, 'Show recipe at <PATH>')
|
|
||||||
[CompletionResult]::new('--show', 'show', [CompletionResultType]::ParameterName, 'Show recipe at <PATH>')
|
|
||||||
[CompletionResult]::new('--dotenv-filename', 'dotenv-filename', [CompletionResultType]::ParameterName, 'Search for environment file named <DOTENV-FILENAME> instead of `.env`')
|
|
||||||
[CompletionResult]::new('-E', 'E ', [CompletionResultType]::ParameterName, 'Load <DOTENV-PATH> as environment file instead of searching for one')
|
|
||||||
[CompletionResult]::new('--dotenv-path', 'dotenv-path', [CompletionResultType]::ParameterName, 'Load <DOTENV-PATH> as environment file instead of searching for one')
|
|
||||||
[CompletionResult]::new('--timestamp-format', 'timestamp-format', [CompletionResultType]::ParameterName, 'Timestamp format string')
|
|
||||||
[CompletionResult]::new('--check', 'check', [CompletionResultType]::ParameterName, 'Run `--fmt` in ''check'' mode. Exits with 0 if justfile is formatted correctly. Exits with 1 and prints a diff if formatting is required.')
|
|
||||||
[CompletionResult]::new('--yes', 'yes', [CompletionResultType]::ParameterName, 'Automatically confirm all recipes.')
|
|
||||||
[CompletionResult]::new('-n', 'n', [CompletionResultType]::ParameterName, 'Print what just would do without doing it')
|
|
||||||
[CompletionResult]::new('--dry-run', 'dry-run', [CompletionResultType]::ParameterName, 'Print what just would do without doing it')
|
|
||||||
[CompletionResult]::new('--highlight', 'highlight', [CompletionResultType]::ParameterName, 'Highlight echoed recipe lines in bold')
|
|
||||||
[CompletionResult]::new('--list-submodules', 'list-submodules', [CompletionResultType]::ParameterName, 'List recipes in submodules')
|
|
||||||
[CompletionResult]::new('--no-aliases', 'no-aliases', [CompletionResultType]::ParameterName, 'Don''t show aliases in list')
|
|
||||||
[CompletionResult]::new('--no-deps', 'no-deps', [CompletionResultType]::ParameterName, 'Don''t run recipe dependencies')
|
|
||||||
[CompletionResult]::new('--no-dotenv', 'no-dotenv', [CompletionResultType]::ParameterName, 'Don''t load `.env` file')
|
|
||||||
[CompletionResult]::new('--no-highlight', 'no-highlight', [CompletionResultType]::ParameterName, 'Don''t highlight echoed recipe lines in bold')
|
|
||||||
[CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Suppress all output')
|
|
||||||
[CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Suppress all output')
|
|
||||||
[CompletionResult]::new('--shell-command', 'shell-command', [CompletionResultType]::ParameterName, 'Invoke <COMMAND> with the shell used to run recipe lines and backticks')
|
|
||||||
[CompletionResult]::new('--clear-shell-args', 'clear-shell-args', [CompletionResultType]::ParameterName, 'Clear shell arguments')
|
|
||||||
[CompletionResult]::new('-u', 'u', [CompletionResultType]::ParameterName, 'Return list and summary entries in source order')
|
|
||||||
[CompletionResult]::new('--unsorted', 'unsorted', [CompletionResultType]::ParameterName, 'Return list and summary entries in source order')
|
|
||||||
[CompletionResult]::new('--unstable', 'unstable', [CompletionResultType]::ParameterName, 'Enable unstable features')
|
|
||||||
[CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Use verbose output')
|
|
||||||
[CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Use verbose output')
|
|
||||||
[CompletionResult]::new('--changelog', 'changelog', [CompletionResultType]::ParameterName, 'Print changelog')
|
|
||||||
[CompletionResult]::new('--choose', 'choose', [CompletionResultType]::ParameterName, 'Select one or more recipes to run using a binary chooser. If `--chooser` is not passed the chooser defaults to the value of $JUST_CHOOSER, falling back to `fzf`')
|
|
||||||
[CompletionResult]::new('--dump', 'dump', [CompletionResultType]::ParameterName, 'Print justfile')
|
|
||||||
[CompletionResult]::new('-e', 'e', [CompletionResultType]::ParameterName, 'Edit justfile with editor given by $VISUAL or $EDITOR, falling back to `vim`')
|
|
||||||
[CompletionResult]::new('--edit', 'edit', [CompletionResultType]::ParameterName, 'Edit justfile with editor given by $VISUAL or $EDITOR, falling back to `vim`')
|
|
||||||
[CompletionResult]::new('--evaluate', 'evaluate', [CompletionResultType]::ParameterName, 'Evaluate and print all variables. If a variable name is given as an argument, only print that variable''s value.')
|
|
||||||
[CompletionResult]::new('--fmt', 'fmt', [CompletionResultType]::ParameterName, 'Format and overwrite justfile')
|
|
||||||
[CompletionResult]::new('--init', 'init', [CompletionResultType]::ParameterName, 'Initialize new justfile in project root')
|
|
||||||
[CompletionResult]::new('--groups', 'groups', [CompletionResultType]::ParameterName, 'List recipe groups')
|
|
||||||
[CompletionResult]::new('--man', 'man', [CompletionResultType]::ParameterName, 'Print man page')
|
|
||||||
[CompletionResult]::new('--summary', 'summary', [CompletionResultType]::ParameterName, 'List names of available recipes')
|
|
||||||
[CompletionResult]::new('--variables', 'variables', [CompletionResultType]::ParameterName, 'List names of variables')
|
|
||||||
[CompletionResult]::new('-g', 'g', [CompletionResultType]::ParameterName, 'Use global justfile')
|
|
||||||
[CompletionResult]::new('--global-justfile', 'global-justfile', [CompletionResultType]::ParameterName, 'Use global justfile')
|
|
||||||
[CompletionResult]::new('--timestamp', 'timestamp', [CompletionResultType]::ParameterName, 'Print recipe command timestamps')
|
|
||||||
[CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Print help')
|
|
||||||
[CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Print help')
|
|
||||||
[CompletionResult]::new('-V', 'V ', [CompletionResultType]::ParameterName, 'Print version')
|
|
||||||
[CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Print version')
|
|
||||||
break
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
function Get-JustFileRecipes([string[]]$CommandElements) {
|
|
||||||
$justFileIndex = $commandElements.IndexOf("--justfile");
|
|
||||||
|
|
||||||
if ($justFileIndex -ne -1 && $justFileIndex + 1 -le $commandElements.Length) {
|
|
||||||
$justFileLocation = $commandElements[$justFileIndex + 1]
|
|
||||||
}
|
|
||||||
|
|
||||||
$justArgs = @("--summary")
|
|
||||||
|
|
||||||
if (Test-Path $justFileLocation) {
|
|
||||||
$justArgs += @("--justfile", $justFileLocation)
|
|
||||||
}
|
|
||||||
|
|
||||||
$recipes = $(just @justArgs) -split ' '
|
|
||||||
return $recipes | ForEach-Object { [CompletionResult]::new($_) }
|
|
||||||
}
|
|
||||||
|
|
||||||
$elementValues = $commandElements | Select-Object -ExpandProperty Value
|
|
||||||
$recipes = Get-JustFileRecipes -CommandElements $elementValues
|
|
||||||
$completions += $recipes
|
|
||||||
$completions.Where{ $_.CompletionText -like "$wordToComplete*" } |
|
|
||||||
Sort-Object -Property ListItemText
|
|
||||||
}
|
|
@ -1,172 +0,0 @@
|
|||||||
#compdef just
|
|
||||||
|
|
||||||
autoload -U is-at-least
|
|
||||||
|
|
||||||
_just() {
|
|
||||||
typeset -A opt_args
|
|
||||||
typeset -a _arguments_options
|
|
||||||
local ret=1
|
|
||||||
|
|
||||||
if is-at-least 5.2; then
|
|
||||||
_arguments_options=(-s -S -C)
|
|
||||||
else
|
|
||||||
_arguments_options=(-s -C)
|
|
||||||
fi
|
|
||||||
|
|
||||||
local context curcontext="$curcontext" state line
|
|
||||||
local common=(
|
|
||||||
'--chooser=[Override binary invoked by \`--choose\`]: : ' \
|
|
||||||
'--color=[Print colorful output]: :(auto always never)' \
|
|
||||||
'--command-color=[Echo recipe lines in <COMMAND-COLOR>]: :(black blue cyan green purple red yellow)' \
|
|
||||||
'--dump-format=[Dump justfile as <FORMAT>]:FORMAT:(just json)' \
|
|
||||||
'--list-heading=[Print <TEXT> before list]:TEXT: ' \
|
|
||||||
'--list-prefix=[Print <TEXT> before each list item]:TEXT: ' \
|
|
||||||
'-f+[Use <JUSTFILE> as justfile]: :_files' \
|
|
||||||
'--justfile=[Use <JUSTFILE> as justfile]: :_files' \
|
|
||||||
'*--set=[Override <VARIABLE> with <VALUE>]: :(_just_variables)' \
|
|
||||||
'--shell=[Invoke <SHELL> to run recipes]: : ' \
|
|
||||||
'*--shell-arg=[Invoke shell with <SHELL-ARG> as an argument]: : ' \
|
|
||||||
'-d+[Use <WORKING-DIRECTORY> as working directory. --justfile must also be set]: :_files' \
|
|
||||||
'--working-directory=[Use <WORKING-DIRECTORY> as working directory. --justfile must also be set]: :_files' \
|
|
||||||
'*-c+[Run an arbitrary command with the working directory, \`.env\`, overrides, and exports set]: : ' \
|
|
||||||
'*--command=[Run an arbitrary command with the working directory, \`.env\`, overrides, and exports set]: : ' \
|
|
||||||
'*--completions=[Print shell completion script for <SHELL>]:SHELL:(bash elvish fish powershell zsh)' \
|
|
||||||
'()-l+[List available recipes]' \
|
|
||||||
'()--list=[List available recipes]' \
|
|
||||||
'-s+[Show recipe at <PATH>]: :(_just_commands)' \
|
|
||||||
'--show=[Show recipe at <PATH>]: :(_just_commands)' \
|
|
||||||
'(-E --dotenv-path)--dotenv-filename=[Search for environment file named <DOTENV-FILENAME> instead of \`.env\`]: : ' \
|
|
||||||
'-E+[Load <DOTENV-PATH> as environment file instead of searching for one]: :_files' \
|
|
||||||
'--dotenv-path=[Load <DOTENV-PATH> as environment file instead of searching for one]: :_files' \
|
|
||||||
'--timestamp-format=[Timestamp format string]: : ' \
|
|
||||||
'--check[Run \`--fmt\` in '\''check'\'' mode. Exits with 0 if justfile is formatted correctly. Exits with 1 and prints a diff if formatting is required.]' \
|
|
||||||
'--yes[Automatically confirm all recipes.]' \
|
|
||||||
'(-q --quiet)-n[Print what just would do without doing it]' \
|
|
||||||
'(-q --quiet)--dry-run[Print what just would do without doing it]' \
|
|
||||||
'--highlight[Highlight echoed recipe lines in bold]' \
|
|
||||||
'--list-submodules[List recipes in submodules]' \
|
|
||||||
'--no-aliases[Don'\''t show aliases in list]' \
|
|
||||||
'--no-deps[Don'\''t run recipe dependencies]' \
|
|
||||||
'--no-dotenv[Don'\''t load \`.env\` file]' \
|
|
||||||
'--no-highlight[Don'\''t highlight echoed recipe lines in bold]' \
|
|
||||||
'(-n --dry-run)-q[Suppress all output]' \
|
|
||||||
'(-n --dry-run)--quiet[Suppress all output]' \
|
|
||||||
'--shell-command[Invoke <COMMAND> with the shell used to run recipe lines and backticks]' \
|
|
||||||
'--clear-shell-args[Clear shell arguments]' \
|
|
||||||
'-u[Return list and summary entries in source order]' \
|
|
||||||
'--unsorted[Return list and summary entries in source order]' \
|
|
||||||
'--unstable[Enable unstable features]' \
|
|
||||||
'*-v[Use verbose output]' \
|
|
||||||
'*--verbose[Use verbose output]' \
|
|
||||||
'--changelog[Print changelog]' \
|
|
||||||
'--choose[Select one or more recipes to run using a binary chooser. If \`--chooser\` is not passed the chooser defaults to the value of \$JUST_CHOOSER, falling back to \`fzf\`]' \
|
|
||||||
'--dump[Print justfile]' \
|
|
||||||
'-e[Edit justfile with editor given by \$VISUAL or \$EDITOR, falling back to \`vim\`]' \
|
|
||||||
'--edit[Edit justfile with editor given by \$VISUAL or \$EDITOR, falling back to \`vim\`]' \
|
|
||||||
'--evaluate[Evaluate and print all variables. If a variable name is given as an argument, only print that variable'\''s value.]' \
|
|
||||||
'--fmt[Format and overwrite justfile]' \
|
|
||||||
'--init[Initialize new justfile in project root]' \
|
|
||||||
'--groups[List recipe groups]' \
|
|
||||||
'--man[Print man page]' \
|
|
||||||
'--summary[List names of available recipes]' \
|
|
||||||
'--variables[List names of variables]' \
|
|
||||||
'(-f --justfile -d --working-directory)-g[Use global justfile]' \
|
|
||||||
'(-f --justfile -d --working-directory)--global-justfile[Use global justfile]' \
|
|
||||||
'--timestamp[Print recipe command timestamps]' \
|
|
||||||
'-h[Print help]' \
|
|
||||||
'--help[Print help]' \
|
|
||||||
'-V[Print version]' \
|
|
||||||
'--version[Print version]' \
|
|
||||||
)
|
|
||||||
|
|
||||||
_arguments "${_arguments_options[@]}" $common \
|
|
||||||
'1: :_just_commands' \
|
|
||||||
'*: :->args' \
|
|
||||||
&& ret=0
|
|
||||||
|
|
||||||
case $state in
|
|
||||||
args)
|
|
||||||
curcontext="${curcontext%:*}-${words[2]}:"
|
|
||||||
|
|
||||||
local lastarg=${words[${#words}]}
|
|
||||||
local recipe
|
|
||||||
|
|
||||||
local cmds; cmds=(
|
|
||||||
${(s: :)$(_call_program commands just --summary)}
|
|
||||||
)
|
|
||||||
|
|
||||||
# Find first recipe name
|
|
||||||
for ((i = 2; i < $#words; i++ )) do
|
|
||||||
if [[ ${cmds[(I)${words[i]}]} -gt 0 ]]; then
|
|
||||||
recipe=${words[i]}
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ $lastarg = */* ]]; then
|
|
||||||
# Arguments contain slash would be recognised as a file
|
|
||||||
_arguments -s -S $common '*:: :_files'
|
|
||||||
elif [[ $lastarg = *=* ]]; then
|
|
||||||
# Arguments contain equal would be recognised as a variable
|
|
||||||
_message "value"
|
|
||||||
elif [[ $recipe ]]; then
|
|
||||||
# Show usage message
|
|
||||||
_message "`just --show $recipe`"
|
|
||||||
# Or complete with other commands
|
|
||||||
#_arguments -s -S $common '*:: :_just_commands'
|
|
||||||
else
|
|
||||||
_arguments -s -S $common '*:: :_just_commands'
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
return ret
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
(( $+functions[_just_commands] )) ||
|
|
||||||
_just_commands() {
|
|
||||||
[[ $PREFIX = -* ]] && return 1
|
|
||||||
integer ret=1
|
|
||||||
local variables; variables=(
|
|
||||||
${(s: :)$(_call_program commands just --variables)}
|
|
||||||
)
|
|
||||||
local commands; commands=(
|
|
||||||
${${${(M)"${(f)$(_call_program commands just --list)}":# *}/ ##/}/ ##/:Args: }
|
|
||||||
)
|
|
||||||
|
|
||||||
if compset -P '*='; then
|
|
||||||
case "${${words[-1]%=*}#*=}" in
|
|
||||||
*) _message 'value' && ret=0 ;;
|
|
||||||
esac
|
|
||||||
else
|
|
||||||
_describe -t variables 'variables' variables -qS "=" && ret=0
|
|
||||||
_describe -t commands 'just commands' commands "$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ "$funcstack[1]" = "_just" ]; then
|
|
||||||
(( $+functions[_just_variables] )) ||
|
|
||||||
_just_variables() {
|
|
||||||
[[ $PREFIX = -* ]] && return 1
|
|
||||||
integer ret=1
|
|
||||||
local variables; variables=(
|
|
||||||
${(s: :)$(_call_program commands just --variables)}
|
|
||||||
)
|
|
||||||
|
|
||||||
if compset -P '*='; then
|
|
||||||
case "${${words[-1]%=*}#*=}" in
|
|
||||||
*) _message 'value' && ret=0 ;;
|
|
||||||
esac
|
|
||||||
else
|
|
||||||
_describe -t variables 'variables' variables && ret=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
|
|
||||||
_just "$@"
|
|
||||||
else
|
|
||||||
compdef _just just
|
|
||||||
fi
|
|
@ -1,19 +1,38 @@
|
|||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn output() {
|
#[cfg(target_os = "linux")]
|
||||||
let tempdir = tempdir();
|
fn bash() {
|
||||||
|
|
||||||
let output = Command::new(executable_path("just"))
|
let output = Command::new(executable_path("just"))
|
||||||
.arg("--completions")
|
.args(["--completions", "bash"])
|
||||||
.arg("bash")
|
|
||||||
.current_dir(tempdir.path())
|
|
||||||
.output()
|
.output()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
assert!(output.status.success());
|
assert!(output.status.success());
|
||||||
|
|
||||||
let text = String::from_utf8_lossy(&output.stdout);
|
let script = str::from_utf8(&output.stdout).unwrap();
|
||||||
|
|
||||||
assert!(text.starts_with("_just() {"));
|
let tempdir = tempdir();
|
||||||
|
|
||||||
|
let path = tempdir.path().join("just.bash");
|
||||||
|
|
||||||
|
fs::write(&path, script).unwrap();
|
||||||
|
|
||||||
|
let status = Command::new("./tests/completions/just.bash")
|
||||||
|
.arg(path)
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
assert!(status.success());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn replacements() {
|
||||||
|
for shell in ["bash", "elvish", "fish", "powershell", "zsh"] {
|
||||||
|
let status = Command::new(executable_path("just"))
|
||||||
|
.args(["--completions", shell])
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
assert!(status.success());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ reply_equals() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# --- Initial Setup ---
|
# --- Initial Setup ---
|
||||||
source ./completions/just.bash
|
source "$1"
|
||||||
cd tests/completions
|
cd tests/completions
|
||||||
cargo build
|
cargo build
|
||||||
PATH="$(git rev-parse --show-toplevel)/target/debug:$PATH"
|
PATH="$(git rev-parse --show-toplevel)/target/debug:$PATH"
|
||||||
|
Loading…
Reference in New Issue
Block a user