mirror of
https://github.com/golang/go
synced 2024-11-15 10:20:40 -07:00
1f5fde0915
This covers most of the tool's functionality. At some point, support should probably be added for testflags and the various go tools. R=golang-dev, bradfitz, kyle, minux.ma CC=golang-dev https://golang.org/cl/5646066
251 lines
5.9 KiB
Plaintext
251 lines
5.9 KiB
Plaintext
# install in /etc/bash_completion.d/ or your personal directory
|
|
|
|
complete -f -X '!*.8' 8l
|
|
complete -f -X '!*.6' 6l
|
|
complete -f -X '!*.5' 5l
|
|
complete -f -X '!*.go' 8g 6g 5g gofmt gccgo
|
|
|
|
_go_importpath()
|
|
{
|
|
echo "$(compgen -W "$(go list all) all std" -- "$1")"
|
|
}
|
|
|
|
_go()
|
|
{
|
|
# TODO: Only allow flags before other arguments. run already does
|
|
# this.
|
|
|
|
local cur=`_get_cword`
|
|
local prev="${COMP_WORDS[COMP_CWORD-1]}"
|
|
|
|
local cmd="${COMP_WORDS[1]}"
|
|
|
|
local cmds="build clean doc fix fmt get
|
|
install list run test tool version vet"
|
|
local addhelp="gopath importpath remote
|
|
testflag testfunc"
|
|
local other="help"
|
|
|
|
if [ "$COMP_CWORD" == 1 ]; then
|
|
for opt in $cmds; do
|
|
if [[ "$opt" == "$cmd" ]]; then
|
|
COMPREPLY=("$opt")
|
|
return
|
|
fi
|
|
done
|
|
fi
|
|
|
|
case "$cmd" in
|
|
'build')
|
|
case "$prev" in
|
|
'-o')
|
|
_filedir
|
|
;;
|
|
'-p')
|
|
;;
|
|
*)
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=($(compgen -W "-a -n -o -p -v -x" -- "$cur"))
|
|
else
|
|
local found=0
|
|
for ((i=0; i < ${#COMP_WORDS[@]}; i++)); do
|
|
case "$i" in
|
|
0|1|"$COMP_CWORD")
|
|
continue
|
|
;;
|
|
esac
|
|
local opt="${COMP_WORDS[i]}"
|
|
if [[ "$opt" != -* ]]; then
|
|
if [[ "$opt" == *.go && -f "$opt" ]]; then
|
|
found=1
|
|
break
|
|
else
|
|
found=2
|
|
break
|
|
fi
|
|
fi
|
|
done
|
|
case "$found" in
|
|
0)
|
|
_filedir go
|
|
COMPREPLY+=(`_go_importpath "$cur"`)
|
|
;;
|
|
1)
|
|
_filedir go
|
|
;;
|
|
2)
|
|
COMPREPLY=(`_go_importpath "$cur"`)
|
|
;;
|
|
esac
|
|
fi
|
|
;;
|
|
esac
|
|
;;
|
|
'clean')
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=($(compgen -W "-i -r -n -x" -- "$cur"))
|
|
else
|
|
COMPREPLY=(`_go_importpath "$cur"`)
|
|
fi
|
|
;;
|
|
'doc')
|
|
COMPREPLY=(`_go_importpath "$cur"`)
|
|
;;
|
|
'fix')
|
|
COMPREPLY=(`_go_importpath "$cur"`)
|
|
;;
|
|
'fmt')
|
|
COMPREPLY=(`_go_importpath "$cur"`)
|
|
;;
|
|
'get')
|
|
case "$prev" in
|
|
'-p')
|
|
;;
|
|
*)
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=($(compgen -W "-a -d -fix -n -p -u -v -x" -- "$cur"))
|
|
else
|
|
COMPREPLY=(`_go_importpath "$cur"`)
|
|
fi
|
|
;;
|
|
esac
|
|
;;
|
|
'install')
|
|
case "$prev" in
|
|
'-p')
|
|
;;
|
|
*)
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=($(compgen -W "-a -n -p -v -x" -- "$cur"))
|
|
else
|
|
COMPREPLY=(`_go_importpath "$cur"`)
|
|
fi
|
|
;;
|
|
esac
|
|
;;
|
|
'list')
|
|
case "$prev" in
|
|
'-f')
|
|
;;
|
|
*)
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=($(compgen -W "-e -f -json" -- "$cur"))
|
|
else
|
|
COMPREPLY=(`_go_importpath "$cur"`)
|
|
fi
|
|
;;
|
|
esac
|
|
;;
|
|
'run')
|
|
if [[ "$cur" == -* && "$prev" != *.go ]]; then
|
|
COMPREPLY=($(compgen -W "-a -n -x" -- "$cur"))
|
|
else
|
|
_filedir
|
|
fi
|
|
;;
|
|
'test') # TODO: Support for testflags.
|
|
case "$prev" in
|
|
'-file')
|
|
_filedir go
|
|
;;
|
|
'-p')
|
|
;;
|
|
*)
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=($(compgen -W "-c -file -i -p -x" -- "$cur"))
|
|
else
|
|
COMPREPLY=(`_go_importpath "$cur"`)
|
|
fi
|
|
;;
|
|
esac
|
|
;;
|
|
'tool')
|
|
if [ "$COMP_CWORD" == 2 ]; then
|
|
COMPREPLY=($(compgen -W "$(go tool)" -- "$cur"))
|
|
else
|
|
case "${COMP_WORDS[2]}" in
|
|
[568]a) # TODO: Implement something.
|
|
#_go_tool_568a
|
|
;;
|
|
[568]c) # TODO: Implement something.
|
|
#_go_tool_568c
|
|
;;
|
|
[568]g) # TODO: Implement something.
|
|
#_go_tool_568g
|
|
;;
|
|
[568]l) # TODO: Implement something.
|
|
#_go_tool_568l
|
|
;;
|
|
'api') # TODO: Implement something.
|
|
#_go_tool_api
|
|
;;
|
|
'cgo') # TODO: Implement something.
|
|
#_go_tool_cgo
|
|
;;
|
|
'cov') # TODO: Implement something.
|
|
#_go_tool_cov
|
|
;;
|
|
'dist') # TODO: Implement something.
|
|
#_go_tool_dist
|
|
;;
|
|
'ebnflint') # TODO: Implement something.
|
|
#_go_tool_ebnflint
|
|
;;
|
|
'fix') # TODO: Implement something.
|
|
#_go_tool_fix
|
|
;;
|
|
'gotype') # TODO: Implement something.
|
|
#_go_tool_gotype
|
|
;;
|
|
'nm') # TODO: Implement something.
|
|
#_go_tool_nm
|
|
;;
|
|
'pack') # TODO: Implement something.
|
|
#_go_tool_pack
|
|
;;
|
|
'pprof') # TODO: Implement something.
|
|
#_go_tool_pprof
|
|
;;
|
|
'prof') # TODO: Implement something.
|
|
#_go_tool_prof
|
|
;;
|
|
'vet') # TODO: Implement something.
|
|
#_go_tool_vet
|
|
;;
|
|
'yacc') # TODO: Implement something.
|
|
#_go_tool_yacc
|
|
;;
|
|
esac
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=($(compgen -W "${COMPREPLY[*]} -h" -- "$cur"))
|
|
fi
|
|
fi
|
|
;;
|
|
'version')
|
|
;;
|
|
'vet')
|
|
if [[ "$cur" == -* ]]; then
|
|
:
|
|
else
|
|
COMPREPLY=(`_go_importpath "$cur"`)
|
|
fi
|
|
;;
|
|
'help')
|
|
if [ "$COMP_CWORD" == 2 ]; then
|
|
COMPREPLY=($(compgen -W "$cmds $addhelp" -- "$cur"))
|
|
fi
|
|
;;
|
|
*)
|
|
if [ "$COMP_CWORD" == 1 ]; then
|
|
COMPREPLY=($(compgen -W "$cmds $other" -- "$cur"))
|
|
else
|
|
_filedir
|
|
fi
|
|
;;
|
|
esac
|
|
}
|
|
|
|
complete $filenames -F _go go
|
|
|
|
# vim:ts=2 sw=2 et syn=sh
|