Browse Source

golang: improve go doc completion

Ilia Choly 8 years ago
parent
commit
9e9b790fe1

+ 25 - 11
plugins/golang/golang.plugin.zsh

@@ -54,23 +54,37 @@ __go_tool_complete() {
     '-installsuffix[suffix to add to package directory]:suffix'
     '-tags[list of build tags to consider satisfied]:tags'
   )
-  __go_list() {
-      local expl importpaths
-      declare -a importpaths
-      importpaths=($(go list ${words[$CURRENT]}... 2>/dev/null))
-      _wanted importpaths expl 'import paths' compadd "$@" - "${importpaths[@]}"
+  __go_packages() {
+      _path_files -W "$(go env GOROOT)/src" -/
+      _path_files -W "$(go env GOPATH)/src" -/
+  }
+  __go_identifiers() {
+      compadd $(godoc -templates $ZSH/plugins/golang/templates ${words[-2]} 2> /dev/null)
   }
   case ${words[2]} in
-  clean|doc)
-      _arguments -s -w : '*:importpaths:__go_list'
+  doc)
+    _arguments -s -w \
+      "-c[symbol matching honors case (paths not affected)]" \
+      "-cmd[show symbols with package docs even if package is a command]" \
+      "-u[show unexported symbols as well as exported]" \
+      "2:importpaths:__go_packages" \
+      ":next identifiers:__go_identifiers"
+      ;;
+  clean)
+    _arguments -s -w \
+      "-i[remove the corresponding installed archive or binary (what 'go install' would create)]" \
+      "-n[print the remove commands it would execute, but not run them]" \
+      "-r[apply recursively to all the dependencies of the packages named by the import paths]" \
+      "-x[print remove commands as it executes them]" \
+      "*:importpaths:__go_packages"
       ;;
   fix|fmt|list|vet)
-      _alternative ':importpaths:__go_list' ':files:_path_files -g "*.go"'
+      _alternative ':importpaths:__go_packages' ':files:_path_files -g "*.go"'
       ;;
   install)
       _arguments -s -w : ${build_flags[@]} \
         "-v[show package names]" \
-        '*:importpaths:__go_list'
+        '*:importpaths:__go_packages'
       ;;
   get)
       _arguments -s -w : \
@@ -81,7 +95,7 @@ __go_tool_complete() {
         ${build_flags[@]} \
         "-v[show package names]" \
         "-o[output file]:file:_files" \
-        "*:args:{ _alternative ':importpaths:__go_list' ':files:_path_files -g \"*.go\"' }"
+        "*:args:{ _alternative ':importpaths:__go_packages' ':files:_path_files -g \"*.go\"' }"
       ;;
   test)
       _arguments -s -w : \
@@ -103,7 +117,7 @@ __go_tool_complete() {
         "-cpuprofile[write CPU profile to file]:file:_files" \
         "-memprofile[write heap profile to file]:file:_files" \
         "-memprofilerate[set heap profiling rate]:number" \
-        "*:args:{ _alternative ':importpaths:__go_list' ':files:_path_files -g \"*.go\"' }"
+        "*:args:{ _alternative ':importpaths:__go_packages' ':files:_path_files -g \"*.go\"' }"
       ;;
   help)
       _values "${commands[@]}" \

+ 29 - 0
plugins/golang/templates/package.txt

@@ -0,0 +1,29 @@
+{{with .PDoc}}{{/*
+
+Constants 
+---------------------------------------
+
+*/}}{{with .Consts}}{{range .}}{{range .Names}}{{.}} {{end}}{{end}}{{end}}{{/*
+
+Variables
+---------------------------------------
+
+*/}}{{with .Vars}}{{range .}}{{range .Names}}{{.}} {{end}}{{end}}{{end}}{{/*
+
+Functions
+---------------------------------------
+
+*/}}{{with .Funcs}}{{range .}}{{ .Name }} {{end}}{{end}}{{/*
+
+Types
+---------------------------------------
+
+*/}}{{with .Types}}{{range .}}{{ $TypeName := .Name }}{{ $TypeName }} {{/*
+
+*/}}{{range .Methods}}{{ $TypeName }}.{{.Name}} {{end}}{{/*
+
+*/}}{{range .Funcs}}{{.Name}} {{end}}{{/*
+
+*/}}{{range .Consts}}{{range .Names}}{{.}} {{end}}{{end}}{{/*
+
+*/}}{{range .Vars}}{{range .Names}}{{.}} {{end}}{{end}}{{end}}{{end}}{{end}}

+ 0 - 0
plugins/golang/templates/search.txt