run: timeout: 5m linters-settings: # Even in Rust you can get away with partial matching, # so make sure that the linter respects the programmer's # intent expressed in the form of "default" case. exhaustive: default-signifies-exhaustive: true linters: enable: - asciicheck - bodyclose - deadcode - depguard - dupl - errcheck - exhaustive - exportloopref - gochecknoinits - gocognit - goconst - gocritic - gocyclo - godot - godox - goerr113 - gofmt - goheader - golint - gomodguard - goprintffuncname - gosec - gosimple - govet - ifshort - ineffassign - interfacer - lll - makezero - misspell - nakedret - nestif - noctx - nolintlint - predeclared - rowserrcheck - scopelint - sqlclosecheck - staticcheck - structcheck - stylecheck - testpackage - tparallel - typecheck - unconvert - unparam - unused - varcheck - whitespace disable: # Messages like "struct of size 104 bytes could be of size 96 bytes" from a package # that was last updated 2 years ago[1] are barely helpful. # # After all, we're writing the code for other people, so let's trust the compiler here (that's # constantly evolving compared to this linter) and revisit this if memory usage becomes a problem. # # [1]: https://github.com/mdempsky/maligned/commit/6e39bd26a8c8b58c5a22129593044655a9e25959 - maligned # We don't have high-performance requirements at this moment, so sacrificing # the code readability for marginal performance gains is not worth it. - prealloc # New linters that require a lot of codebase churn and noise, but perhaps we can enable them in the future. - nlreturn - wrapcheck - errorlint # Unfortunately, we use globals due to how spf13/cobra works. - gochecknoglobals # That's fine that some Proto objects don't have all fields initialized - exhaustivestruct # Style linters that are total nuts. - wsl - gofumpt - goimports - funlen # This conflicts with the Protocol Buffers Version 3 design, # which is largely based on default values for struct fields. - exhaustivestruct # Enough parallelism for now. - paralleltest # Ill-based assumptions about identifiers like fmt.Println without taking context into account. - forbidigo # Advantages of using t.Helper() are too small to waste developer's cognitive stamina on it. - thelper # Too restrictive defaults, plus there's already a gocyclo linter in place. - cyclop # Gives false positives for textbook examples[1][2] # [1]: https://github.com/charithe/durationcheck/issues/7 # [2]: https://golang.org/pkg/time/ (see "To convert an integer number of units to a Duration, multiply:") - durationcheck # No way to disable the "exported" check for the whole project[1] # [1]: https://github.com/mgechev/revive/issues/244#issuecomment-560512162 - revive # Unfortunately too much false-positives, e.g. for a 0700 umask or number 10 when using strconv.FormatInt() - gomnd issues: # Don't hide multiple issues that belong to one class since GitHub annotations can handle them all nicely. max-issues-per-linter: 0 max-same-issues: 0