gostyle
THIS IS A WORK IN PROGRESS AND PROOF OF CONCEPT AND STUDY WORK
gostyle
is a set of analyzers for coding styles.
Disclaimer
gostyle
IS NOT Go Style.
"Go Style" in Google Style Guides is a great style and we will actively refer to it, but we cannot implement the same rules perfectly, and we may extend the rules.
Usage
$ go vet -vettool=`which gostyle`
On GitHub Actions
:octocat: GitHub Actions for gostyle is here !!
# .github/workflows/ci.yml
on:
push:
jobs:
test:
runs-on: ubuntu-latest
steps:
[...]
-
uses: k1LoW/gostyle-action@v1
with:
config-file: .gostyle.yml
[...]
Analyzers
Although not perfect, it provides analyzers based on helpful styles.
"Effective Go" by The Go Authors is licensed under CC BY 4.0
Go Style in Google Style Guides
"Google Style Guides" by Google is licensed under CC BY 3.0
Disabling and Ignoring
Disable analyzer
Use -[analyser name].disable
flag.
$ go vet -vettool=`which gostyle` -mixedcaps.disable # Disable mixedcaps analyzer only
Ignore directive
//lint:ignore
//nolint:all
//nostyle:all
//nostyle:[analyzer name]
(e.g. //nostyle:mixedcaps
)
Configuration
gostyle
can be configured by -gostyle.config=$PWD/.gostyle.yml
like golangci-lint.
$ go vet -vettool=`which gostyle` -gostyle.config=$PWD/.gostyle.yml ./...
# All available settings of specific analyzers.
analyzers-settings:
# See the dedicated "analyzers-settings" documentation section.
option: value
analyzers:
disable:
# Disable specific analyzers.
- analyzer-name
analyzers-settings:
getters
analyzers-settings:
getters:
include-generated: false # include generated codes (default: false)
exclude: # exclude words
- GetViaHTTP
ifacenames
analyzers-settings:
ifacenames:
include-generated: false # include generated codes (default: false)
all: true # all interface names with the -er suffix are required (default: false)
mixedcaps
analyzers-settings:
mixedcaps:
include-generated: false # include generated codes (default: false)
exclude: # exclude words
- DBTX
- EXPECT
nilslices
analyzers-settings:
nilslices:
include-generated: false # include generated codes (default: false)
pkgnames
analyzers-settings:
pkgnames:
include-generated: false # include generated codes (default: false)
recvnames
analyzers-settings:
recvnames:
include-generated: false # include generated codes (default: false)
recvtype
analyzers-settings:
recvnames:
include-generated: false # include generated codes (default: false)
repetition
analyzers-settings:
repetition:
include-generated: false # include generated codes (default: false)
exclude: # exclude words
- limitStr
typealiases
analyzers-settings:
typealiases:
include-generated: false # include generated codes (default: false)
exclude: # exclude words
- TmpAliasHeader
underscores
analyzers-settings:
underscores:
include-generated: false # include generated codes (default: false)
exclude: # exclude words
- DBTX
- EXPECT
useany
analyzers-settings:
useany:
include-generated: false # include generated codes (default: false)
useq
analyzers-settings:
useq:
include-generated: false # include generated codes (default: false)
varnames
analyzers-settings:
varnames:
include-generated: false # include generated codes (default: false)
small-scope-max: 5 # max lines for small scope (default: 7)
small-varname-max: 3 # max length of variable name for small scope (default: -1)
medium-scope-max: 10 # max lines for medium scope (default: 15)
medium-varname-max: 5 # max length of variable name for medium scope (default: -1)
large-scope-max: 15 # max lines for large scope (default: 25)
large-varname-max: 7 # max length of variable name for large scope (default: -1)
very-large-varname-max: 9 # max length of variable name for very large scope (default: -1)
exclude: # exclude words
- hostname
Install
go install:
$ go install github.com/k1LoW/gostyle@latest
deb:
$ export GOSTYLE_VERSION=X.X.X
$ curl -o gostyle.deb -L https://github.com/k1LoW/gostyle/releases/download/v$GOSTYLE_VERSION/gostyle_$GOSTYLE_VERSION-1_amd64.deb
$ dpkg -i gostyle.deb
RPM:
$ export GOSTYLE_VERSION=X.X.X
$ yum install https://github.com/k1LoW/gostyle/releases/download/v$GOSTYLE_VERSION/gostyle_$GOSTYLE_VERSION-1_amd64.rpm
apk:
$ export GOSTYLE_VERSION=X.X.X
$ curl -o gostyle.apk -L https://github.com/k1LoW/gostyle/releases/download/v$GOSTYLE_VERSION/gostyle_$GOSTYLE_VERSION-1_amd64.apk
$ apk add gostyle.apk
homebrew tap:
$ brew install k1LoW/tap/gostyle
manually:
Download binary from releases page