Merge pull request #11422 from lukester1975/bash-completion

Bash completion additions and fixes (fixes #9077)
pull/11822/merge
Jussi Pakkanen 1 year ago committed by GitHub
commit 346a915743
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 368
      data/shell-completions/bash/meson

@ -103,20 +103,28 @@ _meson_complete_filedir() {
cur=$2
case $option in
prefix |\
libdir |\
libexecdir |\
bindir |\
sbindir |\
includedir |\
datadir |\
mandir |\
includedir |\
infodir |\
libdir |\
licensedir |\
libexecdir |\
localedir |\
sysconfdir |\
localstatedir |\
sharedstatedir)
mandir |\
sbindir |\
sharedstatedir |\
sysconfdir |\
python.platlibdir |\
python.purelibdir |\
pkg-config-path |\
build.pkg-config-path |\
cmake-prefix-path |\
build.cmake-prefix-path)
_filedir -d
;;
cross-file)
_filedir
COMPREPLY+=($(_filedir_in "$XDG_DATA_DIRS"/meson/cross))
@ -125,59 +133,112 @@ _meson_complete_filedir() {
COMPREPLY+=($(_filedir_in "$XDG_DATA_HOME"/meson/cross))
COMPREPLY+=($(_filedir_in ~/.local/share/meson/cross))
;;
native-file)
_filedir
COMPREPLY+=($(_filedir_in "$XDG_DATA_DIRS"/meson/native))
COMPREPLY+=($(_filedir_in /usr/local/share/meson/native))
COMPREPLY+=($(_filedir_in /usr/share/meson/native))
COMPREPLY+=($(_filedir_in "$XDG_DATA_HOME"/meson/native))
COMPREPLY+=($(_filedir_in ~/.local/share/meson/native))
;;
*)
return 1;;
esac
return 0
}
_meson-setup() {
_meson_compgen_options() {
local -r cur=$1
if [[ ${cur:0:2} == -- ]]; then
COMPREPLY+=($(compgen -P '--' -W '${longopts[*]}' -- "${cur:2}"))
elif [[ ${cur:0:1} == - ]]; then
if [[ ${#cur} == 1 ]]; then
# Only add longopts if cur not "-something"
COMPREPLY+=($(compgen -P '--' -W '${longopts[*]}' -- ""))
fi
COMPREPLY+=($(compgen -P '-' -W '${shortopts[*]}' -- "${cur:1}"))
else
return 1
fi
return 0
}
_meson-setup() {
shortopts=(
h
D
v
)
# backend-startup-project is currently VS backend only.
longopts=(
help
prefix
libdir
libexecdir
bindir
sbindir
includedir
datadir
mandir
includedir
infodir
libdir
libexecdir
licensedir
localedir
sysconfdir
localstatedir
mandir
sbindir
sharedstatedir
sysconfdir
auto-features
backend
buildtype
debug
default-library
errorlogs
install-umask
layout
optimization
prefer-static
stdsplit
strip
unity
werror
layout
default-library
unity-size
warnlevel
stdsplit
errorlogs
werror
wrap-mode
force-fallback-for
pkgconfig.relocatable
python.install-env
python.platlibdir
python.purelibdir
pkg-config-path
build.pkg-config-path
cmake-prefix-path
build.cmake-prefix-path
native-file
cross-file
vsenv
version
wrap-mode
fatal-meson-warnings
reconfigure
wipe
)
local cur prev
if _get_comp_words_by_ref cur prev &>/dev/null &&
[ "${prev:0:2}" = '--' ] && _meson_complete_option "${prev:2}" "$cur"; then
return
elif _get_comp_words_by_ref cur prev &>/dev/null &&
[ "${prev:0:1}" = '-' ] && [ "${prev:1:2}" != '-' ] && _meson_complete_option "${prev:1}"; then
return
elif _get_comp_words_by_ref -n '=' cur prev &>/dev/null; then
if [ $prev == -D ]; then
if _get_comp_words_by_ref cur prev &>/dev/null; then
if [[ ${prev:0:2} == -- ]] && _meson_complete_option "${prev:2}" "$cur"; then
return
elif [[ ${prev:0:1} == - ]] && [[ ${prev:1:2} != - ]] && _meson_complete_option "${prev:1}"; then
return
fi
fi
if _get_comp_words_by_ref -n '=' cur prev &>/dev/null; then
if [[ $prev == -D ]]; then
_meson_complete_option "$cur"
return
fi
@ -185,26 +246,20 @@ _meson-setup() {
cur="${COMP_WORDS[COMP_CWORD]}"
fi
if [[ "$cur" == "--"* ]]; then
COMPREPLY+=($(compgen -P '--' -W '${longopts[*]}' -- "${cur:2}"))
elif [[ "$cur" == "-"* ]]; then
COMPREPLY+=($(compgen -P '--' -W '${longopts[*]}' -- "${cur:2}"))
COMPREPLY+=($(compgen -P '-' -W '${shortopts[*]}' -- "${cur:1}"))
else
if ! _meson_compgen_options "$cur"; then
_filedir -d
if [ -z "$cur" ]; then
COMPREPLY+=($(compgen -P '--' -W '${longopts[*]}'))
COMPREPLY+=($(compgen -P '-' -W '${shortopts[*]}'))
if [[ -z $cur ]]; then
COMPREPLY+=($(compgen -P '--' -W '${longopts[*]}'))
COMPREPLY+=($(compgen -P '-' -W '${shortopts[*]}'))
fi
if [ $COMP_CWORD -eq 1 ]; then
if [[ $COMP_CWORD == 1 ]]; then
COMPREPLY+=($(compgen -W "${meson_subcommands[*]}" -- "$cur"))
fi
fi
}
_meson-configure() {
shortopts=(
h
D
@ -212,12 +267,54 @@ _meson-configure() {
longopts=(
help
prefix
bindir
datadir
includedir
infodir
libdir
libexecdir
licensedir
localedir
localstatedir
mandir
sbindir
sharedstatedir
sysconfdir
auto-features
backend
buildtype
debug
default-library
errorlogs
install-umask
layout
optimization
prefer-static
stdsplit
strip
unity
unity-size
warnlevel
werror
wrap-mode
force-fallback-for
backend-startup-project
pkgconfig.relocatable
python.install-env
python.platlibdir
python.purelibdir
pkg-config-path
build.pkg-config-path
cmake-prefix-path
build.cmake-prefix-path
clearcache
no-pager
)
local cur prev
if _get_comp_words_by_ref -n '=' cur prev &>/dev/null; then
if [ $prev == -D ]; then
if [[ $prev == -D ]]; then
_meson_complete_option "$cur"
return
fi
@ -225,25 +322,20 @@ _meson-configure() {
cur="${COMP_WORDS[COMP_CWORD]}"
fi
if [[ "$cur" == "--"* ]]; then
COMPREPLY+=($(compgen -P '--' -W '${longopts[*]}' -- "${cur:2}"))
elif [[ "$cur" == "-"* ]]; then
COMPREPLY+=($(compgen -P '--' -W '${longopts[*]}' -- "${cur:2}"))
COMPREPLY+=($(compgen -P '-' -W '${shortopts[*]}' -- "${cur:1}"))
else
if ! _meson_compgen_options "$cur"; then
for dir in "${COMP_WORDS[@]}"; do
if [ -d "$dir" ]; then
if [[ -d "$dir" ]]; then
break
fi
dir=.
done
if [ ! -d "$dir/meson-private" ]; then
if [[ ! -d "$dir/meson-private" ]]; then
_filedir -d
fi
if [ -z "$cur" ]; then
COMPREPLY+=($(compgen -P '--' -W '${longopts[*]}'))
COMPREPLY+=($(compgen -P '-' -W '${shortopts[*]}'))
if [[ -z $cur ]]; then
COMPREPLY+=($(compgen -P '--' -W '${longopts[*]}'))
COMPREPLY+=($(compgen -P '-' -W '${shortopts[*]}'))
fi
fi
}
@ -259,17 +351,27 @@ _meson-install() {
_meson-introspect() {
shortopts=(
h
a
i
f
)
longopts=(
targets
installed
buildsystem-files
buildoptions
tests
ast
benchmarks
buildoptions
buildsystem-files
dependencies
scan-dependencies
installed
install-plan
projectinfo
targets
tests
backend
all
indent
force-object-output
)
local cur prev
@ -277,12 +379,7 @@ _meson-introspect() {
cur="${COMP_WORDS[COMP_CWORD]}"
fi
if [[ "$cur" == "--"* ]]; then
COMPREPLY+=($(compgen -P '--' -W '${longopts[*]}' -- "${cur:2}"))
elif [[ "$cur" == "-"* ]]; then
COMPREPLY+=($(compgen -P '--' -W '${longopts[*]}' -- "${cur:2}"))
COMPREPLY+=($(compgen -P '-' -W '${shortopts[*]}' -- "${cur:1}"))
else
if ! _meson_compgen_options "$cur"; then
for dir in "${COMP_WORDS[@]}"; do
if [ -d "$dir" ]; then
break
@ -306,7 +403,6 @@ _meson-init() {
C
n
e
e
d
l
b
@ -315,31 +411,28 @@ _meson-init() {
longopts=(
help
name
executable
deps
language
builddir
force
type
version
name
executable
deps
language
build
builddir
force
type
version
)
if [[ "$cur" == "--"* ]]; then
COMPREPLY+=($(compgen -P '--' -W '${longopts[*]}' -- "${cur:2}"))
elif [[ "$cur" == "-"* && ${#cur} -gt 1 ]]; then
COMPREPLY+=($(compgen -P '-' -W '${shortopts[*]}' -- "${cur:1}"))
else
if [ -z "$cur" ]; then
if ! _meson_compgen_options "$cur"; then
if [[ -z $cur ]]; then
COMPREPLY+=($(compgen -P '--' -W '${longopts[*]}'))
COMPREPLY+=($(compgen -P '-' -W '${shortopts[*]}'))
fi
fi
}
_meson-test() {
shortopts=(
h
q
v
t
@ -347,21 +440,24 @@ _meson-test() {
)
longopts=(
quiet
verbose
timeout-multiplier
help
maxfail
repeat
no-rebuild
gdb
gdb-path
list
wrapper --wrap
no-suite
wrapper
suite
no-suite
no-stdsplit
print-errorlogs
benchmark
logbase
num-processes
verbose
quiet
timeout-multiplier
setup
test-args
)
@ -369,18 +465,21 @@ _meson-test() {
local cur prev
if _get_comp_words_by_ref -n ':' cur prev &>/dev/null; then
case $prev in
--repeat)
--maxfail | --repeat)
# number, can't be completed
return
;;
--wrapper)
_command_offset $COMP_CWORD
return
;;
-C)
--gdb-path | -C)
_filedir -d
return
;;
--suite | --no-suite)
for i in "${!COMP_WORDS[@]}"; do
opt="${COMP_WORDS[i]}"
@ -392,31 +491,40 @@ _meson-test() {
esac
dir=.
done
suites=($(python3 -c 'import sys, json;
suites=$(meson introspect "$dir" --tests | python3 -c 'import sys, json;
for test in json.load(sys.stdin):
for suite in test["suite"]:
print(suite)
' <<< "$(meson introspect "$dir" --tests)"))
# TODO
COMPREPLY+=($(compgen -W "${suites[*]}" -- "$cur"))
' 2> /dev/null)
# TODO - what?
if [[ $? == 0 ]]; then
COMPREPLY+=($(compgen -W "${suites[*]}" -- "$cur"))
fi
return
;;
--logbase)
# free string, can't be completed
return
;;
--num-processes)
# number, can't be completed
return
;;
-t | --timeout-multiplier)
# number, can't be completed
return
;;
--setup)
# TODO
return
;;
--test-args)
return
;;
@ -425,17 +533,14 @@ for test in json.load(sys.stdin):
cur="${COMP_WORDS[COMP_CWORD]}"
fi
if [[ "$cur" == "--"* ]]; then
COMPREPLY+=($(compgen -P '--' -W '${longopts[*]}' -- "${cur:2}"))
elif [[ "$cur" == "-"* && ${#cur} -gt 1 ]]; then
COMPREPLY+=($(compgen -P '-' -W '${shortopts[*]}' -- "${cur:1}"))
else
if ! _meson_compgen_options "$cur"; then
for dir in "${COMP_WORDS[@]}"; do
if [ -d "$dir" ]; then
break
fi
dir=.
done
if [ ! -d "$dir/meson-private" ]; then
_filedir -d
fi
@ -450,11 +555,15 @@ for test in json.load(sys.stdin):
esac
dir=.
done
tests=($(python3 -c 'import sys, json;
tests=$(meson introspect "$dir" --tests | python3 -c 'import sys, json;
for test in json.load(sys.stdin):
print(test["name"])
' <<< "$(meson introspect "$dir" --tests)"))
COMPREPLY+=($(compgen -W "${tests[*]}" -- "$cur"))
' 2> /dev/null)
if [[ $? == 0 ]]; then
COMPREPLY+=($(compgen -W "${tests[*]}" -- "$cur"))
fi
if [ -z "$cur" ]; then
COMPREPLY+=($(compgen -P '--' -W '${longopts[*]}' -- "${cur:2}"))
@ -472,7 +581,27 @@ _meson-subprojects() {
}
_meson-help() {
: # Nothing to do
longopts=(
setup
configure
dist
install
introspect
init
test
wrap
subprojects
rewrite
compile
devenv
env2mfile
)
local cur prev
if _get_comp_words_by_ref cur prev &>/dev/null; then
COMPREPLY+=($(compgen -W '${longopts[*]}' -- "${cur}"))
fi
}
_meson-rewrite() {
@ -480,7 +609,48 @@ _meson-rewrite() {
}
_meson-compile() {
: TODO
shortopts=(
h
C
j
l
v
)
longopts=(
help
clean
jobs
load-average
verbose
ninja-args
vs-args
xcode-args
)
local cur prev
if _get_comp_words_by_ref cur prev &>/dev/null; then
if [[ ${prev:0:2} == -- ]] && _meson_complete_option "${prev:2}" "$cur"; then
return
elif [[ ${prev:0:1} == - ]] && [[ ${prev:1:2} != - ]] && _meson_complete_option "${prev:1}"; then
return
fi
else
cur="${COMP_WORDS[COMP_CWORD]}"
fi
if ! _meson_compgen_options "$cur"; then
_filedir -d
if [[ -z $cur ]]; then
COMPREPLY+=($(compgen -P '--' -W '${longopts[*]}'))
COMPREPLY+=($(compgen -P '-' -W '${shortopts[*]}'))
fi
if [[ $COMP_CWORD == 1 ]]; then
COMPREPLY+=($(compgen -W "${meson_subcommands[*]}" -- "$cur"))
fi
fi
}
_meson-devenv() {

Loading…
Cancel
Save