ladybird/Meta/ShellCompletions/zsh/_serenity
Timothy Flynn 8362c073f3 Everywhere: Remove LibSQL, SQLServer, and the sql REPL :^)
It is now entirely unused and replaced by sqlite3.
2024-06-06 11:27:03 -04:00

110 lines
2.9 KiB
Plaintext

#compdef serenity serenity.sh
get_top_dir() {
git rev-parse --show-toplevel
}
get_lagom_executables() {
# Make completion work with user-defined source directory.
LADYBIRD_SOURCE_DIR="${LADYBIRD_SOURCE_DIR:-$(get_top_dir)}"
# If the Lagom binary directory is missing, this creates an empty list instead of erroring.
# Known false positives need to be filtered manually; please add new ones.
find "${LADYBIRD_SOURCE_DIR}/Build/lagom" -mindepth 1 -type f -executable -not -name '*.so*' \
-not \( -name 'a.out' -o -name 'CMake*.bin' \) \
-printf '%f\n' 2>/dev/null || true
}
_serenity() {
local args
args=(
'1:command:->commands'
'2:target:->targets'
'3:toolchain_or_executable:->toolchains_or_executables'
'*:: :->args'
)
local commands
commands=(
'help'
'build'
'install'
'image'
'run'
'gdb'
'test'
'delete'
'recreate'
'rebuild'
'kaddr2line'
'addr2line'
'rebuild-toolchain'
'rebuild-world'
'copy-src'
)
local targets
targets=(
'x86_64:Target x86_64 or $SERENITY_ARCH (default)'
'aarch64:Target aarch64'
'riscv64:Target riscv64'
'lagom:Target host machine'
)
local toolchains
toolchains=(
'GNU:Toolchain gcc or $SERENITY_TOOLCHAIN (default)'
'Clang:Toolchain clang'
)
local lagom_executables
# Prevent splitting array on spaces with IFS; bash would have `mapfile` for this.
IFS=$'\n'; set -f
lagom_executables=($(get_lagom_executables))
unset IFS; set +f
_arguments -C -S "$args[@]"
local command
command="$line[1]"
local target
target="$line[2]"
local toolchain
toolchain="$line[3]"
case "$state" in
commands)
_describe 'command' commands
;;
targets)
case "$command" in
install|image|copy-src|kaddr2line|rebuild-toolchain|rebuild-world)
# Lagom target is not supported for these, remove from targets.
targets[$targets[(i)lagom]]=()
;;
help)
# Help command has no targets.
targets=()
;;
esac
_describe 'target' targets
;;
toolchains_or_executables)
if [[ "$command" != help && "$target" != lagom ]]; then
# Toolchain-dependent invocations.
_describe 'toolchain_or_executable' toolchains
elif [[ "$command" = run && "$target" = lagom ]]; then
# With `run lagom` this already is the executable.
_describe 'toolchain_or_executable' lagom_executables
fi
;;
args)
;;
esac
return 0
}
_serenity