From 9362cc2e82b4d5291a390cf9da2bb9d9c2d1b9bb Mon Sep 17 00:00:00 2001 From: James Short Date: Fri, 16 Mar 2018 14:35:18 -0700 Subject: [PATCH] Rename go completion to not collide with zsh file. There is a _go file in the zsh functions directory that would be found first if you use OMZ with zsh-completions. This is an ancient file in zsh and does not complete for the go executable either, but it is still there on typical zsh distributions. This change makes it such that zsh/OMZ/zsh-completions can work in harmony, if one so chooses. --- src/_go | 554 ---------------------------------------------------- src/_golang | 550 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 550 insertions(+), 554 deletions(-) delete mode 100644 src/_go create mode 100644 src/_golang diff --git a/src/_go b/src/_go deleted file mode 100644 index 0a9b6a0..0000000 --- a/src/_go +++ /dev/null @@ -1,554 +0,0 @@ -#compdef go -# ------------------------------------------------------------------------------ -# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users -# Copyright (c) 2013-2015 Robby Russell and contributors (see -# https://github.com/robbyrussell/oh-my-zsh/contributors) -# Copyright (c) 2010-2014 Go authors -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of the zsh-users nor the -# names of its contributors may be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY DIRECT, -# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------ -# Description -# ----------- -# -# Completion script for go 1.5 (http://golang.org). -# -# ------------------------------------------------------------------------------ -# Authors -# ------- -# -# * Mikkel Oscar Lyderik -# * oh-my-zsh authors: -# https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/golang/golang.plugin.zsh -# * Go authors -# -# ------------------------------------------------------------------------------ - -typeset -A opt_args - -_go() { - local -a commands build_flags - commands=( - 'build:compile packages and dependencies' - 'clean:remove object files' - 'doc:show documentation for package or symbol' - 'env:print Go environment information' - 'fix:run go tool fix on packages' - 'fmt:run gofmt on package sources' - 'generate:generate Go files by processing source' - 'get:download and install packages and dependencies' - 'install:compile and install packages and dependencies' - 'list:list packages' - 'run:compile and run Go program' - 'test:test packages' - 'tool:run specified go tool' - 'version:print Go version' - 'vet:run go tool vet on packages' - 'help:get more information about a command' - ) - - _arguments \ - "1: :{_describe 'command' commands}" \ - '*:: :->args' - - case $state in - args) - build_flags=( - '-a[force rebuilding of packages that are already up-to-date]' - '-n[print the commands but do not run them]' - '-p[number of builds that can be run in parallel]:number' - '-race[enable data race detection]' - '-v[print the names of packages as they are compiled]' - '-work[print temporary work directory and keep it]' - '-x[print the commands]' - '-asmflags[arguments for each go tool asm invocation]:flags' - '-buildmode[build mode to use]:mode' - '-compiler[name of compiler to use]:name' - '-gccgoflags[arguments for gccgo]:args' - '-gcflags[arguments for each go tool compile invocation]:args' - '-installsuffix[suffix to add to package directory]:suffix' - '-ldflags[arguments to pass on each go tool link invocation.]:flags' - '-linkshared[link against shared libraries]' - '-pkgdir[install and load all packages from dir]:dir' - '-tags[list of build tags to consider satisfied]:tags' - '-toolexec[program to use to invoke toolchain programs]:args' - ) - - __go_packages() { - local gopaths - declare -a gopaths - gopaths=("${(s/:/)$(go env GOPATH)}") - gopaths+=("$(go env GOROOT)") - for p in $gopaths; do - _path_files -W "$p/src" -/ - done - } - - case $words[1] in - build) - _arguments \ - '-o[force build to write to named output file]:file:_files' \ - '-i[installs the packages that are dependencies of the target]' \ - ${build_flags[@]} \ - '*:importpaths:__go_packages' - ;; - - clean) - _arguments \ - '-i[remove corresponding installed archive or binary]' \ - '-r[apply clean recursively on all dependencies]' \ - ${build_flags[@]} \ - '*:importpaths:__go_packages' - ;; - - doc) - _arguments \ - '-c[respect case when matching symbols]' \ - '-cmd[treat a command (package main) like a regular package]' \ - '-u[show docs for unexported and exported symbols and methods]' - ;; - - fix) - _arguments '*:importpaths:__go_packages' - ;; - - fmt) - _arguments \ - '-n[prints commands that would be executed]' \ - '-x[prints commands as they are executed]' \ - '*:importpaths:__go_packages' - ;; - - generate) - _arguments \ - '-run=[specifies a regular expression to select directives]:regex' \ - '-x[print the commands]' \ - '-n[print the commands but do not run them]' \ - '-v[print the names of packages as they are compiled]' \ - "*:args:{ _alternative ':importpaths:__go_packages' _files }" - ;; - - get) - _arguments \ - '-d[instructs get to stop after downloading the packages]' \ - '-f[force get -u not to verify that each package has been checked from vcs]' \ - '-fix[run the fix tool on the downloaded packages]' \ - '-insecure[permit fetching/resolving custom domains]' \ - '-t[also download the packages required to build tests]' \ - '-u[use the network to update the named packages]' \ - ${build_flags[@]} \ - '*:importpaths:__go_packages' - ;; - - install) - _arguments ${build_flags[@]} \ - '*:importpaths:__go_packages' - ;; - - list) - _arguments \ - '-e[changes the handling of erroneous packages]' \ - '-f[specifies an alternate format for the list]:format' \ - '-json[causes package data to be printed in JSON format]' \ - ${build_flags[@]} \ - '*:importpaths:__go_packages' - ;; - - run) - _arguments \ - ${build_flags[@]} \ - '-exec[invoke the binary using xprog]:xporg' \ - '*:file:_files -g "*.go(-.)"' - ;; - - test) - _arguments \ - "-c[compile but don't run test]" \ - '-i[install dependencies of the test]' \ - '-bench[run benchmarks matching the regular expression]:regexp' \ - '-benchmem[print memory allocation statistics for benchmarks]' \ - '-benchtime[run benchmarks for t rime]:t' \ - '-blockprofile[write a goroutine blocking profile to the specified file]:block' \ - '-blockprofilerate[control goroutine blocking profiles]:n' \ - '-count[run each test and benchmark n times]:n' \ - '-cover[enable coverage analysis]' \ - '-covermode[set the mode for coverage analysis]:mode:(set count atomic)' \ - '-coverpkg[apply coverage analysis in each test of listed packages]:list' \ - '-coverprofile[write a coverage profile to file]:cover' \ - '-cpu[specify a list of GOMAXPROCS values]:cpus' \ - '-cpuprofile[write a CPU profile to the specified file]:profile' \ - '-memprofile[write a memory profile to file]:mem' \ - '-memprofilerate[enable more precise memory profiles]:n' \ - '-outputdir[place output files from profiling in output dir]:dir' \ - '-parallel[allow parallel execution of test functions]:n' \ - '-run[run tests and examples matching the regular expression]:regexp' \ - '-short[tell long-running tests to shorten their run time]' \ - '-timeout[timeout long running tests]:t' \ - '-trace[write an execution trace to the specified file]:trace' \ - '-v[verbose output]' \ - ${build_flags[@]} \ - '-exec[run test binary using xprog]:xprog' \ - '-o[compile test binary to named file]:file:_files' \ - '*:importpaths:__go_packages' - ;; - - tool) - local -a tools - tools=($(go tool)) - - _arguments \ - '-n[print command that would be executed]' \ - "1: :{_describe 'tool' tools}" \ - '*:: :->args' - - case $state in - args) - case $words[1] in - addr2line) - _files - ;; - - asm) - _arguments \ - '-D[predefined symbol with optional simple value]:value' \ - '-I[include directory]:value' \ - '-S[print assembly and machine code]' \ - '-debug[dump instructions as they are parsed]' \ - '-dynlink[support references to Go symbols]' \ - '-o[output file]:string' \ - '-shared[generate code that can be linked into a shared lib]' \ - '-trimpath[remove prefix from recorded source file paths]:string' - ;; - - callgraph) - local -a algos graphs - algos=( - 'static:static calls only' - 'cha:Class Hierarchy Analysis' - 'rta:Rapid Type Analysis' - 'pta:inclusion-based Points-To Analysis' - ) - graphs=( - 'digraph:output in digraph format' - 'graphviz:output in AT&T GraphViz (.dot) format' - ) - - _arguments \ - '-algo=[call-graph construction algorithm]:algos:{ _describe "algos" algos }' \ - "-test[include the package's tests in the analysis]" \ - '-format=[format in which each call graph edge is displayed]:graphs:{ _describe "graphs" graphs }' - ;; - - cgo) - _arguments \ - '-debug-define[print relevant #defines]' \ - '-debug-gcc[print gcc invocations]' \ - '-dynimport[if non-empty, print dynamic import data]:string' \ - '-dynlinker[record dynamic linker information]' \ - '-dynout[write -dynimport output to file]:file' \ - '-dynpackage[set Go package for -dynimport output]:string' \ - '-exportheader[where to write export header]:string' \ - '-gccgo[generate files for use with gccgo]' \ - '-gccgopkgpath[-fgo-pkgpath option used with gccgo]:string' \ - '-gccgoprefix[-fgo-prefix option used with gccgo]:string' \ - '-godefs[write Go definitions for C file to stdout]' \ - '-import_runtime_cgo[import runtime/cgo in generated code]' \ - '-import_syscall[import syscall in generated code]' \ - '-importpath[import path of package being built]:path' \ - '-objdir[object directory]:dir' - ;; - - compile) - _arguments \ - '-%[debug non-static initializers]' \ - '-+[compiling runtime]' \ - "-A[for bootstrapping, allow 'any' type]" \ - '-B[disable bounds checking]' \ - '-D[set relative path for local imports]:path' \ - '-E[debug symbol export]' \ - '-I[add directory to import search path]:directory' \ - '-K[debug missing line numbers]' \ - '-L[use full (long) path in error messages]' \ - '-M[debug move generation]' \ - '-N[disable optimizations]' \ - '-P[debug peephole optimizer]' \ - '-R[debug register optimizer]' \ - '-S[print assembly listing]' \ - '-V[print compiler version]' \ - '-W[debug parse tree after type checking]' \ - '-asmhdr[write assembly header to file]:file' \ - '-buildid[record id as the build id in the export metadata]:id' \ - '-complete[compiling complete package (no C or assembly)]' \ - '-cpuprofile[write cpu profile to file]:file' \ - '-d[print debug information about items in list]:list' \ - '-dynlink[support references to Go symbols]' \ - '-e[no limit on number of errors reported]' \ - '-f[debug stack frames]' \ - '-g[debug code generation]' \ - '-h[halt on error]' \ - '-i[debug line number stack]' \ - '-importmap[add definition of the form source=actual to import map]:definition' \ - '-installsuffix[set pkg directory suffix]:suffix' \ - '-j[debug runtime-initialized variables]' \ - '-l[disable inlining]' \ - '-largemodel[generate code that assumes a large memory model]' \ - '-live[debug liveness analysis]' \ - '-m[print optimization decisions]' \ - '-memprofile[write memory profile to file]:file' \ - '-memprofilerate[set runtime.MemProfileRate to rate]:rate' \ - '-nolocalimports[reject local (relative) imports]' \ - '-o[write output to file]:file' \ - '-p[set expected package import path]:path' \ - '-pack[write package file instead of object file]' \ - '-r[debug generated wrappers]' \ - '-race[enable race detector]' \ - '-s[warn about composite literals that can be simplified]' \ - '-shared[generate code that can be linked into a shared library]' \ - '-trimpath[remove prefix from recorded source file paths]:prefix' \ - '-u[reject unsafe code]' \ - '-v[increase debug verbosity]' \ - '-w[debug type checking]' \ - '-wb[enable write barrier (default 1)]' \ - '-x[debug lexer]' \ - '-y[debug declarations in canned imports (with -d)]' \ - '*:file:_files -g "*.go(-.)"' - ;; - - cover) - if (( CURRENT == 2 )); then - _arguments \ - '-func=[output coverage profile information for each function]:string' \ - '-html=[generate HTML representation of coverage profile]:file:_files' \ - '-mode=[coverage mode]:mode:(set count atomic)' - return - fi - - _arguments \ - '-o[file for output]:file' \ - '-var=[name of coverage variable to generate]:var' \ - '*:file:_files -g "*.go(-.)"' - ;; - - doc) - _arguments \ - '-c[respect case when matching symbols]' \ - '-cmd[treat a command (package main) like a regular package]' \ - '-u[show docs for unexported and exported symbols and methods]' \ - ;; - - fix) - _arguments \ - '-diff[display diffs instead of rewriting files]' \ - '-force[force fixes to run even if the code looks updated]:string' \ - '-r[restrict the rewrites]:string' \ - '*:files:_files' - ;; - - link) - _arguments \ - '-B[add an ELF NT_GNU_BUILD_ID note when using ELF]:note' \ - '-C[check Go calls to C code]' \ - '-D[set data segment address (default -1)]:address' \ - '-E[set entry symbol name]:entry' \ - '-H[set header type]:type' \ - '-I[use linker as ELF dynamic linker]:linker' \ - '-L[add specified directory to library path]:directory' \ - '-R[set address rounding quantum (default -1)]:quantum' \ - '-T[set text segment address (default -1)]:address' \ - '-V[print version and exit]' \ - '-W[disassemble input]' \ - '-X[add string value definition]:definition' \ - '-a[disassemble output]' \ - '-buildid[record id as Go toolchain build id]:id' \ - '-buildmode[set build mode]:mode' \ - '-c[dump call graph]' \ - '-cpuprofile[write cpu profile to file]:file' \ - '-d[disable dynamic executable]' \ - '-extld[use linker when linking in external mode]:linker' \ - '-extldflags[pass flags to external linker]:flags' \ - '-f[ignore version mismatch]' \ - '-g[disable go package data checks]' \ - '-h[halt on error]' \ - '-installsuffix[set package directory suffix]:suffix' \ - '-k[set field tracking symbol]:symbol' \ - '-linkmode[set link mode]:mode:(internal external auto)' \ - '-linkshared[link against installed Go shared libraries]' \ - '-memprofile[write memory profile to file]:file' \ - '-memprofilerate[set runtime.MemProfileRate to rate]:rate' \ - '-n[dump symbol table]' \ - '-o[write output to file]:file' \ - '-r[set the ELF dynamic linker search path to dir1:dir2:...]:path' \ - '-race[enable race detector]' \ - '-s[disable symbol table]' \ - '-shared[generate shared object (implies -linkmode external)]' \ - '-tmpdir[use directory for temporary files]:directory' \ - '-u[reject unsafe packages]' \ - '-v[print link trace]' \ - '-w[disable DWARF generation]' \ - '*:files:_files' - ;; - - objdump) - _arguments \ - '-s[only dump symbols matching this regexp]:regexp' \ - '*:files:_files' - ;; - - pack) - _arguments '1:ops:(c p r t x)' '::verbose:(v)' ':files:_files' - ;; - - pprof) - _arguments \ - '-callgrind[outputs a graph in callgrind format]' \ - '-disasm=[output annotated assembly]:p' \ - '-dot[outputs a graph in DOT format]' \ - '-eog[visualize graph through eog]' \ - '-evince[visualize graph through evince]' \ - '-gif[outputs a graph image in GIF format]' \ - '-gv[visualize graph through gv]' \ - '-list=[output annotated source for functions matching regexp]:p' \ - '-pdf[outputs a graph in PDF format]' \ - '-peek=[output callers/callees of functions matching regexp]:p' \ - '-png[outputs a graph image in PNG format]' \ - '-proto[outputs the profile in compressed protobuf format]' \ - '-ps[outputs a graph in PS format]' \ - '-raw[outputs a text representation of the raw profile]' \ - '-svg[outputs a graph in SVG format]' \ - '-tags[outputs all tags in the profile]' \ - '-text[outputs top entries in text form]' \ - '-top[outputs top entries in text form]' \ - '-tree[outputs a text rendering of call graph]' \ - '-web[visualize graph through web browser]' \ - '-weblist=[output annotated source in HTML]:p' \ - '-output=[generate output on file f (stdout by default)]:f' \ - '-functions[report at function level (default)]' \ - '-files[report at source file level]' \ - '-lines[report at source line level]' \ - '-addresses[report at address level]' \ - '-base[show delta from this profile]:profile' \ - '-drop_negative[ignore negative differences]' \ - '-cum[sort by cumulative data]' \ - '-seconds=[length of time for dynamic profiles]:n' \ - '-nodecount=[max number of nodes to show]:n' \ - '-nodefraction=[hide nodes below *total]:f' \ - '-edgefraction=[hide edges below *total]:f' \ - '-sample_index[index of sample value to display]' \ - '-mean[average sample value over first value]' \ - '-inuse_space[display in-use memory size]' \ - '-inuse_objects[display in-use object counts]' \ - '-alloc_space[display allocated memory size]' \ - '-alloc_objects[display allocated object counts]' \ - '-total_delay[display total delay at each region]' \ - '-contentions[display number of delays at each region]' \ - '-mean_delay[display mean delay at each region]' \ - '-runtime[show runtime call frames in memory profiles]' \ - '-focus=[restricts to paths going through a node matching regexp]:r' \ - '-ignore=[skips paths going through any nodes matching regexp]:r' \ - '-tagfocus=[restrict to samples tagged with key:value matching regexp]:r' \ - '-tagignore=[discard samples tagged with key:value matching regexp]' \ - '-call_tree[generate a context-sensitive call tree]' \ - '-unit=[convert all samples to unit u for display]:u' \ - '-divide_by=[scale all samples by dividing them by f]:f' \ - '-buildid=[override build id for main binary in profile]:id' \ - '-tools=[search path for object-level tools]:path' \ - '-help[help message]' \ - '*:files:_files' - ;; - - trace) - _arguments \ - '-http=[HTTP service address]:addr' \ - '*:files:_files' - ;; - - vet) - _arguments \ - '-all[check everything]' \ - '-asmdecl[check assembly against Go declarations]' \ - '-assign[check for useless assignments]' \ - '-atomic[check for common mistaken usages of the sync/atomic]' \ - '-bool[check for mistakes involving boolean operators]' \ - '-buildtags[check that +build tags are valid]' \ - '-composites[check that composite literals used field-keyed elements]' \ - '-compositewhitelist[use composite white list]' \ - '-copylocks[check that locks are not passed by value]' \ - '-methods[check that canonically named methods are canonically defined]' \ - '-nilfunc[check for comparisons between functions and nil]' \ - '-printf[check printf-like invocations]' \ - '-printfuncs[print function names to check]:string' \ - '-rangeloops[check that range loop variables are used correctly]' \ - '-shadow[check for shadowed variables]' \ - '-shadowstrict[whether to be strict about shadowing]' \ - '-shift[check for useless shifts]' \ - '-structtags[check that struct field tags have canonical format]' \ - '-tags[list of build tags to apply when parsing]:list' \ - '-test[for testing only: sets -all and -shadow]' \ - '-unreachable[check for unreachable code]' \ - '-unsafeptr[check for misuse of unsafe.Pointer]' \ - '-unusedfuncs[list of functions whose results must be used]:string' \ - '-unusedresult[check for unused result of calls to functions in -unusedfuncs]' \ - '-unusedstringmethods[list of methods whose results must be used]:string' \ - '-v[verbose]' \ - '*:files:_files' - ;; - - yacc) - _arguments \ - '-o[output]:output' \ - '-v[parsetable]:parsetable' \ - '*:files:_files' - ;; - esac - ;; - esac - ;; - - vet) - _arguments \ - '-n[print commands that would be executed]' \ - '-x[prints commands as they are executed]' \ - ${build_flags[@]} \ - '*:importpaths:__go_packages' - ;; - help) - local -a topics - topics=( - 'c:calling between Go and C' - 'buildmode:description of build modes' - 'filetype:file types' - 'gopath:GOPATH environment variable' - 'environment:environment variables' - 'importpath:import path syntax' - 'packages:description of package lists' - 'testflag:description of testing flags' - 'testfunc:description of testing functions' - ) - - _arguments "1: :{_describe 'command' commands -- topics}" - ;; - esac - ;; - esac -} - -_go diff --git a/src/_golang b/src/_golang new file mode 100644 index 0000000..dfd1285 --- /dev/null +++ b/src/_golang @@ -0,0 +1,550 @@ +#compdef go +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# Copyright (c) 2013-2015 Robby Russell and contributors (see +# https://github.com/robbyrussell/oh-my-zsh/contributors) +# Copyright (c) 2010-2014 Go authors +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for go 1.5 (http://golang.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Mikkel Oscar Lyderik +# * oh-my-zsh authors: +# https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/golang/golang.plugin.zsh +# * Go authors +# +# ------------------------------------------------------------------------------ + +typeset -A opt_args + +local -a commands build_flags +commands=( +'build:compile packages and dependencies' +'clean:remove object files' +'doc:show documentation for package or symbol' +'env:print Go environment information' +'fix:run go tool fix on packages' +'fmt:run gofmt on package sources' +'generate:generate Go files by processing source' +'get:download and install packages and dependencies' +'install:compile and install packages and dependencies' +'list:list packages' +'run:compile and run Go program' +'test:test packages' +'tool:run specified go tool' +'version:print Go version' +'vet:run go tool vet on packages' +'help:get more information about a command' +) + +_arguments \ + "1: :{_describe 'command' commands}" \ + '*:: :->args' + +case $state in + args) + build_flags=( + '-a[force rebuilding of packages that are already up-to-date]' + '-n[print the commands but do not run them]' + '-p[number of builds that can be run in parallel]:number' + '-race[enable data race detection]' + '-v[print the names of packages as they are compiled]' + '-work[print temporary work directory and keep it]' + '-x[print the commands]' + '-asmflags[arguments for each go tool asm invocation]:flags' + '-buildmode[build mode to use]:mode' + '-compiler[name of compiler to use]:name' + '-gccgoflags[arguments for gccgo]:args' + '-gcflags[arguments for each go tool compile invocation]:args' + '-installsuffix[suffix to add to package directory]:suffix' + '-ldflags[arguments to pass on each go tool link invocation.]:flags' + '-linkshared[link against shared libraries]' + '-pkgdir[install and load all packages from dir]:dir' + '-tags[list of build tags to consider satisfied]:tags' + '-toolexec[program to use to invoke toolchain programs]:args' + ) + + __go_packages() { + local gopaths + declare -a gopaths + gopaths=("${(s/:/)$(go env GOPATH)}") + gopaths+=("$(go env GOROOT)") + for p in $gopaths; do + _path_files -W "$p/src" -/ + done + } + + case $words[1] in + build) + _arguments \ + '-o[force build to write to named output file]:file:_files' \ + '-i[installs the packages that are dependencies of the target]' \ + ${build_flags[@]} \ + '*:importpaths:__go_packages' + ;; + + clean) + _arguments \ + '-i[remove corresponding installed archive or binary]' \ + '-r[apply clean recursively on all dependencies]' \ + ${build_flags[@]} \ + '*:importpaths:__go_packages' + ;; + + doc) + _arguments \ + '-c[respect case when matching symbols]' \ + '-cmd[treat a command (package main) like a regular package]' \ + '-u[show docs for unexported and exported symbols and methods]' + ;; + + fix) + _arguments '*:importpaths:__go_packages' + ;; + + fmt) + _arguments \ + '-n[prints commands that would be executed]' \ + '-x[prints commands as they are executed]' \ + '*:importpaths:__go_packages' + ;; + + generate) + _arguments \ + '-run=[specifies a regular expression to select directives]:regex' \ + '-x[print the commands]' \ + '-n[print the commands but do not run them]' \ + '-v[print the names of packages as they are compiled]' \ + "*:args:{ _alternative ':importpaths:__go_packages' _files }" + ;; + + get) + _arguments \ + '-d[instructs get to stop after downloading the packages]' \ + '-f[force get -u not to verify that each package has been checked from vcs]' \ + '-fix[run the fix tool on the downloaded packages]' \ + '-insecure[permit fetching/resolving custom domains]' \ + '-t[also download the packages required to build tests]' \ + '-u[use the network to update the named packages]' \ + ${build_flags[@]} \ + '*:importpaths:__go_packages' + ;; + + install) + _arguments ${build_flags[@]} \ + '*:importpaths:__go_packages' + ;; + + list) + _arguments \ + '-e[changes the handling of erroneous packages]' \ + '-f[specifies an alternate format for the list]:format' \ + '-json[causes package data to be printed in JSON format]' \ + ${build_flags[@]} \ + '*:importpaths:__go_packages' + ;; + + run) + _arguments \ + ${build_flags[@]} \ + '-exec[invoke the binary using xprog]:xporg' \ + '*:file:_files -g "*.go(-.)"' + ;; + + test) + _arguments \ + "-c[compile but don't run test]" \ + '-i[install dependencies of the test]' \ + '-bench[run benchmarks matching the regular expression]:regexp' \ + '-benchmem[print memory allocation statistics for benchmarks]' \ + '-benchtime[run benchmarks for t rime]:t' \ + '-blockprofile[write a goroutine blocking profile to the specified file]:block' \ + '-blockprofilerate[control goroutine blocking profiles]:n' \ + '-count[run each test and benchmark n times]:n' \ + '-cover[enable coverage analysis]' \ + '-covermode[set the mode for coverage analysis]:mode:(set count atomic)' \ + '-coverpkg[apply coverage analysis in each test of listed packages]:list' \ + '-coverprofile[write a coverage profile to file]:cover' \ + '-cpu[specify a list of GOMAXPROCS values]:cpus' \ + '-cpuprofile[write a CPU profile to the specified file]:profile' \ + '-memprofile[write a memory profile to file]:mem' \ + '-memprofilerate[enable more precise memory profiles]:n' \ + '-outputdir[place output files from profiling in output dir]:dir' \ + '-parallel[allow parallel execution of test functions]:n' \ + '-run[run tests and examples matching the regular expression]:regexp' \ + '-short[tell long-running tests to shorten their run time]' \ + '-timeout[timeout long running tests]:t' \ + '-trace[write an execution trace to the specified file]:trace' \ + '-v[verbose output]' \ + ${build_flags[@]} \ + '-exec[run test binary using xprog]:xprog' \ + '-o[compile test binary to named file]:file:_files' \ + '*:importpaths:__go_packages' + ;; + + tool) + local -a tools + tools=($(go tool)) + + _arguments \ + '-n[print command that would be executed]' \ + "1: :{_describe 'tool' tools}" \ + '*:: :->args' + + case $state in + args) + case $words[1] in + addr2line) + _files + ;; + + asm) + _arguments \ + '-D[predefined symbol with optional simple value]:value' \ + '-I[include directory]:value' \ + '-S[print assembly and machine code]' \ + '-debug[dump instructions as they are parsed]' \ + '-dynlink[support references to Go symbols]' \ + '-o[output file]:string' \ + '-shared[generate code that can be linked into a shared lib]' \ + '-trimpath[remove prefix from recorded source file paths]:string' + ;; + + callgraph) + local -a algos graphs + algos=( + 'static:static calls only' + 'cha:Class Hierarchy Analysis' + 'rta:Rapid Type Analysis' + 'pta:inclusion-based Points-To Analysis' + ) + graphs=( + 'digraph:output in digraph format' + 'graphviz:output in AT&T GraphViz (.dot) format' + ) + + _arguments \ + '-algo=[call-graph construction algorithm]:algos:{ _describe "algos" algos }' \ + "-test[include the package's tests in the analysis]" \ + '-format=[format in which each call graph edge is displayed]:graphs:{ _describe "graphs" graphs }' + ;; + + cgo) + _arguments \ + '-debug-define[print relevant #defines]' \ + '-debug-gcc[print gcc invocations]' \ + '-dynimport[if non-empty, print dynamic import data]:string' \ + '-dynlinker[record dynamic linker information]' \ + '-dynout[write -dynimport output to file]:file' \ + '-dynpackage[set Go package for -dynimport output]:string' \ + '-exportheader[where to write export header]:string' \ + '-gccgo[generate files for use with gccgo]' \ + '-gccgopkgpath[-fgo-pkgpath option used with gccgo]:string' \ + '-gccgoprefix[-fgo-prefix option used with gccgo]:string' \ + '-godefs[write Go definitions for C file to stdout]' \ + '-import_runtime_cgo[import runtime/cgo in generated code]' \ + '-import_syscall[import syscall in generated code]' \ + '-importpath[import path of package being built]:path' \ + '-objdir[object directory]:dir' + ;; + + compile) + _arguments \ + '-%[debug non-static initializers]' \ + '-+[compiling runtime]' \ + "-A[for bootstrapping, allow 'any' type]" \ + '-B[disable bounds checking]' \ + '-D[set relative path for local imports]:path' \ + '-E[debug symbol export]' \ + '-I[add directory to import search path]:directory' \ + '-K[debug missing line numbers]' \ + '-L[use full (long) path in error messages]' \ + '-M[debug move generation]' \ + '-N[disable optimizations]' \ + '-P[debug peephole optimizer]' \ + '-R[debug register optimizer]' \ + '-S[print assembly listing]' \ + '-V[print compiler version]' \ + '-W[debug parse tree after type checking]' \ + '-asmhdr[write assembly header to file]:file' \ + '-buildid[record id as the build id in the export metadata]:id' \ + '-complete[compiling complete package (no C or assembly)]' \ + '-cpuprofile[write cpu profile to file]:file' \ + '-d[print debug information about items in list]:list' \ + '-dynlink[support references to Go symbols]' \ + '-e[no limit on number of errors reported]' \ + '-f[debug stack frames]' \ + '-g[debug code generation]' \ + '-h[halt on error]' \ + '-i[debug line number stack]' \ + '-importmap[add definition of the form source=actual to import map]:definition' \ + '-installsuffix[set pkg directory suffix]:suffix' \ + '-j[debug runtime-initialized variables]' \ + '-l[disable inlining]' \ + '-largemodel[generate code that assumes a large memory model]' \ + '-live[debug liveness analysis]' \ + '-m[print optimization decisions]' \ + '-memprofile[write memory profile to file]:file' \ + '-memprofilerate[set runtime.MemProfileRate to rate]:rate' \ + '-nolocalimports[reject local (relative) imports]' \ + '-o[write output to file]:file' \ + '-p[set expected package import path]:path' \ + '-pack[write package file instead of object file]' \ + '-r[debug generated wrappers]' \ + '-race[enable race detector]' \ + '-s[warn about composite literals that can be simplified]' \ + '-shared[generate code that can be linked into a shared library]' \ + '-trimpath[remove prefix from recorded source file paths]:prefix' \ + '-u[reject unsafe code]' \ + '-v[increase debug verbosity]' \ + '-w[debug type checking]' \ + '-wb[enable write barrier (default 1)]' \ + '-x[debug lexer]' \ + '-y[debug declarations in canned imports (with -d)]' \ + '*:file:_files -g "*.go(-.)"' + ;; + + cover) + if (( CURRENT == 2 )); then + _arguments \ + '-func=[output coverage profile information for each function]:string' \ + '-html=[generate HTML representation of coverage profile]:file:_files' \ + '-mode=[coverage mode]:mode:(set count atomic)' + return + fi + + _arguments \ + '-o[file for output]:file' \ + '-var=[name of coverage variable to generate]:var' \ + '*:file:_files -g "*.go(-.)"' + ;; + + doc) + _arguments \ + '-c[respect case when matching symbols]' \ + '-cmd[treat a command (package main) like a regular package]' \ + '-u[show docs for unexported and exported symbols and methods]' \ + ;; + + fix) + _arguments \ + '-diff[display diffs instead of rewriting files]' \ + '-force[force fixes to run even if the code looks updated]:string' \ + '-r[restrict the rewrites]:string' \ + '*:files:_files' + ;; + + link) + _arguments \ + '-B[add an ELF NT_GNU_BUILD_ID note when using ELF]:note' \ + '-C[check Go calls to C code]' \ + '-D[set data segment address (default -1)]:address' \ + '-E[set entry symbol name]:entry' \ + '-H[set header type]:type' \ + '-I[use linker as ELF dynamic linker]:linker' \ + '-L[add specified directory to library path]:directory' \ + '-R[set address rounding quantum (default -1)]:quantum' \ + '-T[set text segment address (default -1)]:address' \ + '-V[print version and exit]' \ + '-W[disassemble input]' \ + '-X[add string value definition]:definition' \ + '-a[disassemble output]' \ + '-buildid[record id as Go toolchain build id]:id' \ + '-buildmode[set build mode]:mode' \ + '-c[dump call graph]' \ + '-cpuprofile[write cpu profile to file]:file' \ + '-d[disable dynamic executable]' \ + '-extld[use linker when linking in external mode]:linker' \ + '-extldflags[pass flags to external linker]:flags' \ + '-f[ignore version mismatch]' \ + '-g[disable go package data checks]' \ + '-h[halt on error]' \ + '-installsuffix[set package directory suffix]:suffix' \ + '-k[set field tracking symbol]:symbol' \ + '-linkmode[set link mode]:mode:(internal external auto)' \ + '-linkshared[link against installed Go shared libraries]' \ + '-memprofile[write memory profile to file]:file' \ + '-memprofilerate[set runtime.MemProfileRate to rate]:rate' \ + '-n[dump symbol table]' \ + '-o[write output to file]:file' \ + '-r[set the ELF dynamic linker search path to dir1:dir2:...]:path' \ + '-race[enable race detector]' \ + '-s[disable symbol table]' \ + '-shared[generate shared object (implies -linkmode external)]' \ + '-tmpdir[use directory for temporary files]:directory' \ + '-u[reject unsafe packages]' \ + '-v[print link trace]' \ + '-w[disable DWARF generation]' \ + '*:files:_files' + ;; + + objdump) + _arguments \ + '-s[only dump symbols matching this regexp]:regexp' \ + '*:files:_files' + ;; + + pack) + _arguments '1:ops:(c p r t x)' '::verbose:(v)' ':files:_files' + ;; + + pprof) + _arguments \ + '-callgrind[outputs a graph in callgrind format]' \ + '-disasm=[output annotated assembly]:p' \ + '-dot[outputs a graph in DOT format]' \ + '-eog[visualize graph through eog]' \ + '-evince[visualize graph through evince]' \ + '-gif[outputs a graph image in GIF format]' \ + '-gv[visualize graph through gv]' \ + '-list=[output annotated source for functions matching regexp]:p' \ + '-pdf[outputs a graph in PDF format]' \ + '-peek=[output callers/callees of functions matching regexp]:p' \ + '-png[outputs a graph image in PNG format]' \ + '-proto[outputs the profile in compressed protobuf format]' \ + '-ps[outputs a graph in PS format]' \ + '-raw[outputs a text representation of the raw profile]' \ + '-svg[outputs a graph in SVG format]' \ + '-tags[outputs all tags in the profile]' \ + '-text[outputs top entries in text form]' \ + '-top[outputs top entries in text form]' \ + '-tree[outputs a text rendering of call graph]' \ + '-web[visualize graph through web browser]' \ + '-weblist=[output annotated source in HTML]:p' \ + '-output=[generate output on file f (stdout by default)]:f' \ + '-functions[report at function level (default)]' \ + '-files[report at source file level]' \ + '-lines[report at source line level]' \ + '-addresses[report at address level]' \ + '-base[show delta from this profile]:profile' \ + '-drop_negative[ignore negative differences]' \ + '-cum[sort by cumulative data]' \ + '-seconds=[length of time for dynamic profiles]:n' \ + '-nodecount=[max number of nodes to show]:n' \ + '-nodefraction=[hide nodes below *total]:f' \ + '-edgefraction=[hide edges below *total]:f' \ + '-sample_index[index of sample value to display]' \ + '-mean[average sample value over first value]' \ + '-inuse_space[display in-use memory size]' \ + '-inuse_objects[display in-use object counts]' \ + '-alloc_space[display allocated memory size]' \ + '-alloc_objects[display allocated object counts]' \ + '-total_delay[display total delay at each region]' \ + '-contentions[display number of delays at each region]' \ + '-mean_delay[display mean delay at each region]' \ + '-runtime[show runtime call frames in memory profiles]' \ + '-focus=[restricts to paths going through a node matching regexp]:r' \ + '-ignore=[skips paths going through any nodes matching regexp]:r' \ + '-tagfocus=[restrict to samples tagged with key:value matching regexp]:r' \ + '-tagignore=[discard samples tagged with key:value matching regexp]' \ + '-call_tree[generate a context-sensitive call tree]' \ + '-unit=[convert all samples to unit u for display]:u' \ + '-divide_by=[scale all samples by dividing them by f]:f' \ + '-buildid=[override build id for main binary in profile]:id' \ + '-tools=[search path for object-level tools]:path' \ + '-help[help message]' \ + '*:files:_files' + ;; + + trace) + _arguments \ + '-http=[HTTP service address]:addr' \ + '*:files:_files' + ;; + + vet) + _arguments \ + '-all[check everything]' \ + '-asmdecl[check assembly against Go declarations]' \ + '-assign[check for useless assignments]' \ + '-atomic[check for common mistaken usages of the sync/atomic]' \ + '-bool[check for mistakes involving boolean operators]' \ + '-buildtags[check that +build tags are valid]' \ + '-composites[check that composite literals used field-keyed elements]' \ + '-compositewhitelist[use composite white list]' \ + '-copylocks[check that locks are not passed by value]' \ + '-methods[check that canonically named methods are canonically defined]' \ + '-nilfunc[check for comparisons between functions and nil]' \ + '-printf[check printf-like invocations]' \ + '-printfuncs[print function names to check]:string' \ + '-rangeloops[check that range loop variables are used correctly]' \ + '-shadow[check for shadowed variables]' \ + '-shadowstrict[whether to be strict about shadowing]' \ + '-shift[check for useless shifts]' \ + '-structtags[check that struct field tags have canonical format]' \ + '-tags[list of build tags to apply when parsing]:list' \ + '-test[for testing only: sets -all and -shadow]' \ + '-unreachable[check for unreachable code]' \ + '-unsafeptr[check for misuse of unsafe.Pointer]' \ + '-unusedfuncs[list of functions whose results must be used]:string' \ + '-unusedresult[check for unused result of calls to functions in -unusedfuncs]' \ + '-unusedstringmethods[list of methods whose results must be used]:string' \ + '-v[verbose]' \ + '*:files:_files' + ;; + + yacc) + _arguments \ + '-o[output]:output' \ + '-v[parsetable]:parsetable' \ + '*:files:_files' + ;; + esac + ;; + esac + ;; + + vet) + _arguments \ + '-n[print commands that would be executed]' \ + '-x[prints commands as they are executed]' \ + ${build_flags[@]} \ + '*:importpaths:__go_packages' + ;; + help) + local -a topics + topics=( + 'c:calling between Go and C' + 'buildmode:description of build modes' + 'filetype:file types' + 'gopath:GOPATH environment variable' + 'environment:environment variables' + 'importpath:import path syntax' + 'packages:description of package lists' + 'testflag:description of testing flags' + 'testfunc:description of testing functions' + ) + + _arguments "1: :{_describe 'command' commands -- topics}" + ;; + esac + ;; +esac