mirror of
				https://github.com/ohmyzsh/ohmyzsh.git
				synced 2025-11-04 13:21:19 +08:00 
			
		
		
		
	Added golang completion support from golang.org
This commit is contained in:
		
							parent
							
								
									0ab0e67ecf
								
							
						
					
					
						commit
						7c50867d2e
					
				
							
								
								
									
										150
									
								
								plugins/golang/golang.plugin.zsh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										150
									
								
								plugins/golang/golang.plugin.zsh
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,150 @@
 | 
			
		||||
# From : http://golang.org/misc/zsh/go?m=text
 | 
			
		||||
# gc
 | 
			
		||||
prefixes=(5 6 8)
 | 
			
		||||
for p in $prefixes; do
 | 
			
		||||
    compctl -g "*.${p}" ${p}l
 | 
			
		||||
    compctl -g "*.go" ${p}g
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# standard go tools
 | 
			
		||||
compctl -g "*.go" gofmt
 | 
			
		||||
 | 
			
		||||
# gccgo
 | 
			
		||||
compctl -g "*.go" gccgo
 | 
			
		||||
 | 
			
		||||
# go tool
 | 
			
		||||
__go_tool_complete() {
 | 
			
		||||
  typeset -a commands build_flags
 | 
			
		||||
  commands+=(
 | 
			
		||||
    'build[compile packages and dependencies]'
 | 
			
		||||
    'clean[remove object files]'
 | 
			
		||||
    'doc[run godoc on package sources]'
 | 
			
		||||
    'fix[run go tool fix on packages]'
 | 
			
		||||
    'fmt[run gofmt on package sources]'
 | 
			
		||||
    'get[download and install packages and dependencies]'
 | 
			
		||||
    'help[display help]'
 | 
			
		||||
    '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]'
 | 
			
		||||
  )
 | 
			
		||||
  if (( CURRENT == 2 )); then
 | 
			
		||||
    # explain go commands
 | 
			
		||||
    _values 'go tool commands' ${commands[@]}
 | 
			
		||||
    return
 | 
			
		||||
  fi
 | 
			
		||||
  build_flags=(
 | 
			
		||||
    '-a[force reinstallation of packages that are already up-to-date]'
 | 
			
		||||
    '-n[print the commands but do not run them]'
 | 
			
		||||
    "-p[number of parallel builds]:number"
 | 
			
		||||
    '-x[print the commands]'
 | 
			
		||||
    "-work[print temporary directory name and keep it]"
 | 
			
		||||
    "-gcflags[flags for 5g/6g/8g]:flags"
 | 
			
		||||
    "-ldflags[flags for 5l/6l/8l]:flags"
 | 
			
		||||
    "-gccgoflags[flags for gccgo]:flags"
 | 
			
		||||
  )
 | 
			
		||||
  __go_list() {
 | 
			
		||||
      local expl importpaths
 | 
			
		||||
      declare -a importpaths
 | 
			
		||||
      importpaths=($(go list ${words[$CURRENT]}... 2>/dev/null))
 | 
			
		||||
      _wanted importpaths expl 'import paths' compadd "$@" - "${importpaths[@]}"
 | 
			
		||||
  }
 | 
			
		||||
  case ${words[2]} in
 | 
			
		||||
  clean|doc)
 | 
			
		||||
      _arguments -s -w : '*:importpaths:__go_list'
 | 
			
		||||
      ;;
 | 
			
		||||
  fix|fmt|list|vet)
 | 
			
		||||
      _alternative ':importpaths:__go_list' ':files:_path_files -g "*.go"'
 | 
			
		||||
      ;;
 | 
			
		||||
  install)
 | 
			
		||||
      _arguments -s -w : ${build_flags[@]} \
 | 
			
		||||
        "-v[show package names]" \
 | 
			
		||||
    '*:importpaths:__go_list'
 | 
			
		||||
      ;;
 | 
			
		||||
  get)
 | 
			
		||||
      _arguments -s -w : \
 | 
			
		||||
        ${build_flags[@]}
 | 
			
		||||
      ;;
 | 
			
		||||
  build)
 | 
			
		||||
      _arguments -s -w : \
 | 
			
		||||
        ${build_flags[@]} \
 | 
			
		||||
        "-v[show package names]" \
 | 
			
		||||
        "-o[output file]:file:_files" \
 | 
			
		||||
        "*:args:{ _alternative ':importpaths:__go_list' ':files:_path_files -g \"*.go\"' }"
 | 
			
		||||
      ;;
 | 
			
		||||
  test)
 | 
			
		||||
      _arguments -s -w : \
 | 
			
		||||
        ${build_flags[@]} \
 | 
			
		||||
        "-c[do not run, compile the test binary]" \
 | 
			
		||||
        "-i[do not run, install dependencies]" \
 | 
			
		||||
        "-v[print test output]" \
 | 
			
		||||
        "-x[print the commands]" \
 | 
			
		||||
        "-short[use short mode]" \
 | 
			
		||||
        "-parallel[number of parallel tests]:number" \
 | 
			
		||||
        "-cpu[values of GOMAXPROCS to use]:number list" \
 | 
			
		||||
        "-run[run tests and examples matching regexp]:regexp" \
 | 
			
		||||
        "-bench[run benchmarks matching regexp]:regexp" \
 | 
			
		||||
        "-benchtime[run each benchmark during n seconds]:duration" \
 | 
			
		||||
        "-timeout[kill test after that duration]:duration" \
 | 
			
		||||
        "-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\"' }"
 | 
			
		||||
      ;;
 | 
			
		||||
  help)
 | 
			
		||||
      _values "${commands[@]}" \
 | 
			
		||||
        'gopath[GOPATH environment variable]' \
 | 
			
		||||
        'importpath[description of import paths]' \
 | 
			
		||||
        'remote[remote import path syntax]' \
 | 
			
		||||
        'testflag[description of testing flags]' \
 | 
			
		||||
        'testfunc[description of testing functions]'
 | 
			
		||||
      ;;
 | 
			
		||||
  run)
 | 
			
		||||
      _arguments -s -w : \
 | 
			
		||||
          ${build_flags[@]} \
 | 
			
		||||
          '*:file:_path_files -g "*.go"'
 | 
			
		||||
      ;;
 | 
			
		||||
  tool)
 | 
			
		||||
      if (( CURRENT == 3 )); then
 | 
			
		||||
          _values "go tool" $(go tool)
 | 
			
		||||
          return
 | 
			
		||||
      fi
 | 
			
		||||
      case ${words[3]} in
 | 
			
		||||
      [568]g)
 | 
			
		||||
          _arguments -s -w : \
 | 
			
		||||
              '-I[search for packages in DIR]:includes:_path_files -/' \
 | 
			
		||||
              '-L[show full path in file:line prints]' \
 | 
			
		||||
              '-S[print the assembly language]' \
 | 
			
		||||
              '-V[print the compiler version]' \
 | 
			
		||||
              '-e[no limit on number of errors printed]' \
 | 
			
		||||
              '-h[panic on an error]' \
 | 
			
		||||
              '-l[disable inlining]' \
 | 
			
		||||
              '-m[print optimization decisions]' \
 | 
			
		||||
              '-o[file specify output file]:file' \
 | 
			
		||||
              '-p[assumed import path for this code]:importpath' \
 | 
			
		||||
              '-u[disable package unsafe]' \
 | 
			
		||||
              "*:file:_files -g '*.go'"
 | 
			
		||||
          ;;
 | 
			
		||||
      [568]l)
 | 
			
		||||
          local O=${words[3]%l}
 | 
			
		||||
          _arguments -s -w : \
 | 
			
		||||
              '-o[file specify output file]:file' \
 | 
			
		||||
              '-L[search for packages in DIR]:includes:_path_files -/' \
 | 
			
		||||
              "*:file:_files -g '*.[ao$O]'"
 | 
			
		||||
          ;;
 | 
			
		||||
      dist)
 | 
			
		||||
          _values "dist tool" banner bootstrap clean env install version
 | 
			
		||||
          ;;
 | 
			
		||||
      *)
 | 
			
		||||
          # use files by default
 | 
			
		||||
          _files
 | 
			
		||||
          ;;
 | 
			
		||||
      esac
 | 
			
		||||
      ;;
 | 
			
		||||
  esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
compdef __go_tool_complete go
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user