-
Notifications
You must be signed in to change notification settings - Fork 38
/
Copy pathphc_bash_completion
43 lines (35 loc) · 1.56 KB
/
phc_bash_completion
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
_phc()
{
local cur prev shortOpts longOpts paramOpts
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
shortOpts="-h -V -v -c -d -C -O -e -c"
longOpts="--help --full-help --version --verbose --compile --pretty-print \
--obfuscate --no-validation --include --generate-c --execute \
--next-line-curlies --no-leading-tab --no-hash-bang \
--no-line-numbers --no-nulls --no-empty-lists --list-passes \
--dont-fail --no-xml-attrs --rt-stats --flow-insensitive \
--object-insensitive --stats"
# TODO provide context sensitive completion for these options, with an = and no space
paramOpts=" --run --r-option --define --c-option --extension --web-app \
--with-php --optimize --output --tab --call-string-length"
passOpts="--read-xml --debug --dump --dump-uppered --dump-dot --dump-xml \
--disable"
# get the list of passes
passes=`$1 --list-passes | grep '^ ' -v | grep -v '^Passes' | awk '{print \$1}'`
# options completion
# if [[ "$prev" == -* ]]; then
# COMPREPLY=( $( compgen -W "$passes" -- $cur ) )
if [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -f -W "$shortOpts $longOpts $paramOpts $passOpts" -- $cur ) )
return 0
else
# complete on php, xml and la files, or directories.
COMPREPLY=( $( compgen -f -X '!*.@(php|xml|la)' -- $cur) $( compgen -d -- $cur))
# TODO only complete .xml files after --read-xml
# TODO only complete .la files after --run=
return 0
fi
}
# the -o options allow bash to gracefully accept directories, in the expected fashion.
complete -F _phc -o filenames -o dirnames phc