summaryrefslogtreecommitdiff
path: root/misc/bash/go
diff options
context:
space:
mode:
Diffstat (limited to 'misc/bash/go')
-rw-r--r--misc/bash/go244
1 files changed, 244 insertions, 0 deletions
diff --git a/misc/bash/go b/misc/bash/go
index caced154f..f5d79e41a 100644
--- a/misc/bash/go
+++ b/misc/bash/go
@@ -4,3 +4,247 @@ 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