mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-22 20:45:14 +00:00
Meta/ShellCompletions: Complete binaries for run lagom
This completion only works if you have lagom already built in some capacity, since it scans the build directory tree for binaries, removing known false positives. However, that is both more accurate than asking ninja for the targets and filtering those, and it also makes it independent of the build system used.
This commit is contained in:
parent
97c95eca88
commit
e01941b41c
Notes:
sideshowbarker
2024-07-17 03:25:24 +09:00
Author: https://github.com/kleinesfilmroellchen Commit: https://github.com/SerenityOS/serenity/commit/e01941b41c Pull-request: https://github.com/SerenityOS/serenity/pull/18763 Reviewed-by: https://github.com/gmta ✅
1 changed files with 26 additions and 3 deletions
|
@ -1,11 +1,25 @@
|
|||
#compdef serenity serenity.sh
|
||||
|
||||
get_top_dir() {
|
||||
git rev-parse --show-toplevel
|
||||
}
|
||||
|
||||
get_lagom_executables() {
|
||||
# Make completion work with user-defined source directory.
|
||||
SERENITY_SOURCE_DIR="${SERENITY_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 "${SERENITY_SOURCE_DIR}/Build/lagom" -mindepth 1 -type f -executable -not -name '*.so*' \
|
||||
-not \( -name 'SQLServer' -o -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:->toolchains'
|
||||
'3:toolchain_or_executable:->toolchains_or_executables'
|
||||
'*:: :->args'
|
||||
)
|
||||
|
||||
|
@ -41,6 +55,12 @@ _serenity() {
|
|||
'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
|
||||
|
@ -69,10 +89,13 @@ _serenity() {
|
|||
esac
|
||||
_describe 'target' targets
|
||||
;;
|
||||
toolchains)
|
||||
toolchains_or_executables)
|
||||
if [[ "$command" != help && "$target" != lagom ]]; then
|
||||
# Toolchain-dependent invocations.
|
||||
_describe 'toolchain' toolchains
|
||||
_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)
|
||||
|
|
Loading…
Add table
Reference in a new issue