From 5fb91e6434fcdd7ae60c55783cbc2bf4979bfd89 Mon Sep 17 00:00:00 2001 From: Denis Isaev Date: Tue, 10 Sep 2019 12:06:10 +0300 Subject: [PATCH] docs: document bash completion in README Also, change command `golangci-lint completion` to `golangci-lint completion bash`. --- README.md | 30 ++++++++++++++++++++++++++++++ README.tmpl.md | 30 ++++++++++++++++++++++++++++++ pkg/commands/completion.go | 14 ++++++++++---- 3 files changed, 70 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8f57431e..5fa87e10 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ Sponsored by [GolangCI.com](https://golangci.com): SaaS service for running lint * [Trusted By](#trusted-by) * [Quick Start](#quick-start) * [Editor Integration](#editor-integration) +* [Shell Completion](#shell-completion) * [Comparison](#comparison) * [Performance](#performance) * [Internals](#internals) @@ -250,6 +251,35 @@ golangci-lint run --disable-all -E errcheck * ale [merged pull request](https://github.com/w0rp/ale/pull/1890) with golangci-lint support 6. Atom - [go-plus](https://atom.io/packages/go-plus) supports golangci-lint. +## Shell Completion + +`golangci-lint` can generate bash completion file. + +### Mac OS X + +Yhere are two versions of `bash-completion`, v1 and v2. V1 is for Bash 3.2 (which is the default on macOS), and v2 is for Bash 4.1+. The `golangci-lint` completion script doesn’t work correctly with bash-completion v1 and Bash 3.2. It requires bash-completion v2 and Bash 4.1+. Thus, to be able to correctly use `golangci-lint` completion on macOS, you have to install and use Bash 4.1+ ([instructions](https://itnext.io/upgrading-bash-on-macos-7138bd1066ba)). The following instructions assume that you use Bash 4.1+ (that is, any Bash version of 4.1 or newer). + +Install `bash-completion v2`: + +```bash +brew install bash-completion@2 +echo 'export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"' >>~/.bashrc +echo '[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"' >>~/.bashrc +exec bash # reload and replace (if it was updated) shell +type _init_completion && echo "completion is OK" # verify that bash-completion v2 is correctly installed +``` + +Add `golangci-lint` bash completion: + +```bash +echo 'source <(golangci-lint completion bash)' >>~/.bashrc +source ~/.bashrc +``` + +### Linux + +See [kubectl instructions](https://kubernetes.io/docs/tasks/tools/install-kubectl/#enabling-shell-autocompletion) and don't forget to replace `kubectl` with `golangci-lint`. + ## Comparison ### `golangci-lint` vs `gometalinter` diff --git a/README.tmpl.md b/README.tmpl.md index d90094b4..bb184c0c 100644 --- a/README.tmpl.md +++ b/README.tmpl.md @@ -19,6 +19,7 @@ Sponsored by [GolangCI.com](https://golangci.com): SaaS service for running lint * [Trusted By](#trusted-by) * [Quick Start](#quick-start) * [Editor Integration](#editor-integration) +* [Shell Completion](#shell-completion) * [Comparison](#comparison) * [Performance](#performance) * [Internals](#internals) @@ -217,6 +218,35 @@ golangci-lint run --disable-all -E errcheck * ale [merged pull request](https://github.com/w0rp/ale/pull/1890) with golangci-lint support 6. Atom - [go-plus](https://atom.io/packages/go-plus) supports golangci-lint. +## Shell Completion + +`golangci-lint` can generate bash completion file. + +### Mac OS X + +Yhere are two versions of `bash-completion`, v1 and v2. V1 is for Bash 3.2 (which is the default on macOS), and v2 is for Bash 4.1+. The `golangci-lint` completion script doesn’t work correctly with bash-completion v1 and Bash 3.2. It requires bash-completion v2 and Bash 4.1+. Thus, to be able to correctly use `golangci-lint` completion on macOS, you have to install and use Bash 4.1+ ([instructions](https://itnext.io/upgrading-bash-on-macos-7138bd1066ba)). The following instructions assume that you use Bash 4.1+ (that is, any Bash version of 4.1 or newer). + +Install `bash-completion v2`: + +```bash +brew install bash-completion@2 +echo 'export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"' >>~/.bashrc +echo '[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"' >>~/.bashrc +exec bash # reload and replace (if it was updated) shell +type _init_completion && echo "completion is OK" # verify that bash-completion v2 is correctly installed +``` + +Add `golangci-lint` bash completion: + +```bash +echo 'source <(golangci-lint completion bash)' >>~/.bashrc +source ~/.bashrc +``` + +### Linux + +See [kubectl instructions](https://kubernetes.io/docs/tasks/tools/install-kubectl/#enabling-shell-autocompletion) and don't forget to replace `kubectl` with `golangci-lint`. + ## Comparison ### `golangci-lint` vs `gometalinter` diff --git a/pkg/commands/completion.go b/pkg/commands/completion.go index 065ad34e..1ff4b44f 100644 --- a/pkg/commands/completion.go +++ b/pkg/commands/completion.go @@ -1,25 +1,31 @@ package commands import ( - "fmt" "os" + "github.com/pkg/errors" "github.com/spf13/cobra" ) func (e *Executor) initCompletion() { completionCmd := &cobra.Command{ Use: "completion", - Short: "Generates bash completion scripts", - RunE: e.executeCompletion, + Short: "Output completion script", } e.rootCmd.AddCommand(completionCmd) + + bashCmd := &cobra.Command{ + Use: "bash", + Short: "Output bash completion script", + RunE: e.executeCompletion, + } + completionCmd.AddCommand(bashCmd) } func (e *Executor) executeCompletion(cmd *cobra.Command, args []string) error { err := cmd.Root().GenBashCompletion(os.Stdout) if err != nil { - return fmt.Errorf("unable to generate bash completions: %v", err) + return errors.Wrap(err, "unable to generate bash completions: %v") } return nil