## Summary: It would be nice to have some linting beyond `go vet`! Now we do. I started by copying the config from Khan/webapp. I did remove a couple of staticcheck checks that I didn't feel were useful. (Note also that exportloopref is the replacement for scopelint in newer golangci-lint.) Included are all the needed lint fixes; most are stylistic but the changes in the example are a (minor) bugfix. Fixes #22. Issue: https://github.com/Khan/genqlient/issues/22 ## Test plan: make check Author: benjaminjkraft Reviewers: aberkan, dnerdy, benjaminjkraft, csilvers, MiguelCastillo Required Reviewers: Approved by: aberkan, dnerdy Checks: ✅ Test (1.17), ✅ Test (1.16), ✅ Test (1.15), ✅ Test (1.14), ✅ Test (1.13), ✅ Lint, ✅ Test (1.17), ✅ Test (1.16), ✅ Test (1.15), ✅ Test (1.14), ✅ Test (1.13), ✅ Lint Pull request URL: https://github.com/Khan/genqlient/pull/49
102 lines
2.5 KiB
YAML
102 lines
2.5 KiB
YAML
# For the full list of configuration options, see
|
|
# https://github.com/golangci/golangci-lint#config-file
|
|
|
|
# See more about these linters at https://golangci-lint.run/usage/linters/
|
|
linters:
|
|
fast: false
|
|
disable-all: true
|
|
enable:
|
|
# golangci enables these by default.
|
|
- deadcode
|
|
- errcheck
|
|
- gofumpt # (replaces gofmt)
|
|
- gosimple
|
|
- govet
|
|
- ineffassign
|
|
- staticcheck
|
|
- structcheck
|
|
- typecheck
|
|
- unused
|
|
- varcheck
|
|
# golangci disables these by default, but we use them.
|
|
- bodyclose
|
|
- depguard
|
|
- durationcheck
|
|
- errorlint
|
|
- exportloopref
|
|
- gocritic
|
|
- nakedret
|
|
- stylecheck
|
|
- unconvert
|
|
- unparam
|
|
- whitespace
|
|
|
|
linters-settings:
|
|
errcheck:
|
|
check-type-assertions: true # check for a := b.(T)
|
|
|
|
errorlint:
|
|
errorf: false # it's valid to use %v instead of %w
|
|
|
|
govet:
|
|
check-shadowing: true
|
|
enable-all: true
|
|
|
|
# We have a ton of test-only packages; but make sure we keep prod deps small.
|
|
depguard:
|
|
list-type: whitelist
|
|
packages:
|
|
- github.com/Khan/genqlient
|
|
- github.com/vektah/gqlparser/v2
|
|
- golang.org/x/tools
|
|
- gopkg.in/yaml.v2
|
|
|
|
gocritic:
|
|
# Which checks should be enabled:
|
|
# See https://go-critic.github.io/overview#checks-overview
|
|
# and https://github.com/go-critic/go-critic#usage -> section "Tags".
|
|
# To check which checks are enabled: `GL_DEBUG=gocritic golangci-lint run`
|
|
enabled-tags:
|
|
- diagnostic
|
|
- performance
|
|
- style
|
|
|
|
disabled-checks:
|
|
- builtinShadow
|
|
- commentedOutCode
|
|
- importShadow
|
|
- paramTypeCombine
|
|
- unnamedResult
|
|
- ifElseChain
|
|
- sloppyReassign
|
|
|
|
settings: # settings passed to gocritic
|
|
captLocal: # must be valid enabled check name
|
|
paramsOnly: true
|
|
|
|
|
|
issues:
|
|
exclude-rules:
|
|
# Test-only deps are not restricted.
|
|
- linters:
|
|
- depguard
|
|
path: _test\.go$|internal/testutil/
|
|
|
|
- linters:
|
|
- errcheck
|
|
path: _test\.go$
|
|
# Unchecked type-asserts are ok in tests -- a panic will be plenty clear.
|
|
# An error message with no function name means an unchecked type-assert.
|
|
text: "^Error return value is not checked$"
|
|
|
|
# Don't error if a test setup function always takes the same arguments.
|
|
- linters:
|
|
- unparam
|
|
path: _test\.go$
|
|
|
|
- linters:
|
|
- govet
|
|
# Only a big deal for runtime code.
|
|
path: ^generate/|^example/
|
|
text: "^fieldalignment: struct with \\d+ pointer bytes could be \\d+$"
|