use gocomplete tool for go tool bash completion
Signed-off-by: John McBride <jpmmcbride@gmail.com>pull/1490/head
parent
867b0fd11c
commit
6c01792cba
|
|
@ -1,281 +1,13 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/bash
|
||||||
|
|
||||||
# bash completion for go tool
|
# bash completion for go tool
|
||||||
# https://github.com/thomasf/go-bash-completion
|
# https://github.com/posener/complete
|
||||||
|
# https://pkg.go.dev/github.com/posener/complete?tab=doc
|
||||||
|
|
||||||
# install in /etc/bash_completion.d/ or your personal directory
|
# Install gocomplete:
|
||||||
|
# go get -u github.com/posener/complete/gocomplete
|
||||||
|
# gocomplete -install
|
||||||
|
|
||||||
complete -f -X '!*.8' 8l
|
if _command_exists gocomplete && _command_exists go ; then
|
||||||
complete -f -X '!*.6' 6l
|
complete -C ${GOBIN}/gocomplete go
|
||||||
complete -f -X '!*.5' 5l
|
|
||||||
complete -f -X '!*.go' 8g 6g 5g gofmt gccgo
|
|
||||||
|
|
||||||
_go_clear_cache() {
|
|
||||||
unset _go_imports
|
|
||||||
}
|
|
||||||
_go_importpath_cache() {
|
|
||||||
if [ -z "$_go_imports" ]; then
|
|
||||||
_go_imports=$(go list all 2>/dev/null)
|
|
||||||
export _go_imports
|
|
||||||
fi
|
fi
|
||||||
}
|
|
||||||
|
|
||||||
_go_importpath()
|
|
||||||
{
|
|
||||||
echo "$(compgen -W "$_go_imports" -- "$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 env fix fmt get
|
|
||||||
install list run test tool version vet"
|
|
||||||
local addhelp="gopath importpath remote
|
|
||||||
testflag testfunc"
|
|
||||||
local other="help"
|
|
||||||
local env_vars="GOARCH GOBIN GOEXE GOHOSTARCH GOHOSTOS GOOS GOPATH GORACE
|
|
||||||
GOROOT GOTOOLDIR GO15VENDOREXPERIMENT CC GOGCCFLAGS CXX CGO_ENABLED"
|
|
||||||
|
|
||||||
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
|
|
||||||
_go_importpath_cache
|
|
||||||
COMPREPLY+=(`_go_importpath "$cur"`)
|
|
||||||
;;
|
|
||||||
1)
|
|
||||||
_filedir go
|
|
||||||
;;
|
|
||||||
2)
|
|
||||||
_go_importpath_cache
|
|
||||||
COMPREPLY=(`_go_importpath "$cur"`)
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
'clean')
|
|
||||||
if [[ "$cur" == -* ]]; then
|
|
||||||
COMPREPLY=($(compgen -W "-i -r -n -x" -- "$cur"))
|
|
||||||
else
|
|
||||||
_go_importpath_cache
|
|
||||||
COMPREPLY=(`_go_importpath "$cur"`)
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
'doc')
|
|
||||||
_go_importpath_cache
|
|
||||||
COMPREPLY=(`_go_importpath "$cur"`)
|
|
||||||
;;
|
|
||||||
'env')
|
|
||||||
COMPREPLY=($(compgen -W "$env_vars" -- "$cur"))
|
|
||||||
;;
|
|
||||||
'fix')
|
|
||||||
_go_importpath_cache
|
|
||||||
COMPREPLY=(`_go_importpath "$cur"`)
|
|
||||||
;;
|
|
||||||
'fmt')
|
|
||||||
_go_importpath_cache
|
|
||||||
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
|
|
||||||
_go_importpath_cache
|
|
||||||
COMPREPLY=(`_go_importpath "$cur"`)
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
'install')
|
|
||||||
case "$prev" in
|
|
||||||
'-p')
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
if [[ "$cur" == -* ]]; then
|
|
||||||
COMPREPLY=($(compgen -W "-a -n -p -v -x" -- "$cur"))
|
|
||||||
else
|
|
||||||
_go_importpath_cache
|
|
||||||
COMPREPLY=(`_go_importpath "$cur"`)
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
'list')
|
|
||||||
case "$prev" in
|
|
||||||
'-f')
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
if [[ "$cur" == -* ]]; then
|
|
||||||
COMPREPLY=($(compgen -W "-e -f -json" -- "$cur"))
|
|
||||||
else
|
|
||||||
_go_importpath_cache
|
|
||||||
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
|
|
||||||
_go_importpath_cache
|
|
||||||
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
|
|
||||||
_go_importpath_cache
|
|
||||||
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
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue