2019-04-02 11:27:12 -04:00
|
|
|
linters:
|
|
|
|
enable:
|
|
|
|
- bodyclose
|
2022-02-25 10:05:15 -05:00
|
|
|
- depguard
|
2019-04-02 11:27:12 -04:00
|
|
|
- dogsled
|
2023-11-20 08:41:32 -05:00
|
|
|
- dupword # Detects duplicate words.
|
2019-04-02 11:27:12 -04:00
|
|
|
- gocyclo
|
Use gofumpt if available, and enable gofumpt linter
gofumpt provides a supserset of gofmt / go fmt, but not every developer may have
it installed, so for situations where it's not available, fall back to gofmt.
As our code has been formatted with gofumpt already, in most cases contributions
will follow those formatting rules, but in some cases there may be a difference,
which would already be flagged by manual code review, but let's also enable the
gofumpt linter.
With this change, `make fmt` will use gofumpt is available; gofumpt has been
added to the dev-container, so `make -f docker.Makefile fmt` will always use it.
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2022-09-30 07:10:53 -04:00
|
|
|
- gofumpt
|
2019-04-02 11:27:12 -04:00
|
|
|
- goimports
|
|
|
|
- gosec
|
|
|
|
- gosimple
|
|
|
|
- govet
|
|
|
|
- ineffassign
|
|
|
|
- lll
|
|
|
|
- megacheck
|
|
|
|
- misspell
|
|
|
|
- nakedret
|
2023-11-20 08:53:40 -05:00
|
|
|
- nilerr # Detects code that returns nil even if it checks that the error is not nil.
|
golangci-lint: enable perfsprint linter
cli/compose/types/types.go:568:17: fmt.Sprintf can be replaced with faster strconv.FormatBool (perfsprint)
return []byte(fmt.Sprintf("%v", e.External)), nil
^
cli/command/formatter/buildcache.go:174:9: fmt.Sprintf can be replaced with faster strconv.Itoa (perfsprint)
return fmt.Sprintf("%d", c.v.UsageCount)
^
cli/command/formatter/buildcache.go:178:9: fmt.Sprintf can be replaced with faster strconv.FormatBool (perfsprint)
return fmt.Sprintf("%t", c.v.InUse)
^
cli/command/formatter/buildcache.go:182:9: fmt.Sprintf can be replaced with faster strconv.FormatBool (perfsprint)
return fmt.Sprintf("%t", c.v.Shared)
^
cli/command/formatter/image.go:259:9: fmt.Sprintf can be replaced with faster strconv.FormatInt (perfsprint)
return fmt.Sprintf("%d", c.i.Containers)
^
cli/command/formatter/tabwriter/tabwriter_test.go:698:9: fmt.Sprintf can be replaced with faster strconv.Itoa (perfsprint)
b.Run(fmt.Sprintf("%d", x), func(b *testing.B) {
^
cli/command/formatter/tabwriter/tabwriter_test.go:720:9: fmt.Sprintf can be replaced with faster strconv.Itoa (perfsprint)
b.Run(fmt.Sprintf("%d", h), func(b *testing.B) {
^
cli/command/image/prune.go:62:31: fmt.Sprintf can be replaced with faster strconv.FormatBool (perfsprint)
pruneFilters.Add("dangling", fmt.Sprintf("%v", !options.all))
^
cli/command/network/formatter.go:92:9: fmt.Sprintf can be replaced with faster strconv.FormatBool (perfsprint)
return fmt.Sprintf("%v", c.n.EnableIPv6)
^
cli/command/network/formatter.go:96:9: fmt.Sprintf can be replaced with faster strconv.FormatBool (perfsprint)
return fmt.Sprintf("%v", c.n.Internal)
^
cli/command/service/formatter.go:745:9: fmt.Sprintf can be replaced with faster strconv.FormatUint (perfsprint)
pub = fmt.Sprintf("%d", pr.pStart)
^
cli/command/service/formatter.go:750:9: fmt.Sprintf can be replaced with faster strconv.FormatUint (perfsprint)
tgt = fmt.Sprintf("%d", pr.tStart)
^
cli/command/service/opts.go:49:10: fmt.Sprintf can be replaced with faster strconv.FormatUint (perfsprint)
return fmt.Sprintf("%v", *i.value)
^
cli/compose/loader/loader.go:720:36: fmt.Sprint can be replaced with faster strconv.Itoa (perfsprint)
v, err := toServicePortConfigs(fmt.Sprint(value))
^
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2023-11-20 10:18:19 -05:00
|
|
|
- perfsprint # Detects fmt.Sprintf uses that can be replaced with a faster alternative.
|
2023-11-20 05:15:36 -05:00
|
|
|
- predeclared
|
2022-09-02 15:24:26 -04:00
|
|
|
- revive
|
2019-04-02 11:27:12 -04:00
|
|
|
- staticcheck
|
2023-11-20 05:10:29 -05:00
|
|
|
- thelper
|
2019-04-02 11:27:12 -04:00
|
|
|
- typecheck
|
|
|
|
- unconvert
|
|
|
|
- unparam
|
|
|
|
- unused
|
|
|
|
|
|
|
|
disable:
|
|
|
|
- errcheck
|
|
|
|
|
|
|
|
run:
|
|
|
|
timeout: 5m
|
|
|
|
skip-files:
|
|
|
|
- cli/compose/schema/bindata.go
|
|
|
|
- .*generated.*
|
|
|
|
|
|
|
|
linters-settings:
|
2022-02-25 10:05:15 -05:00
|
|
|
depguard:
|
2023-08-28 17:21:03 -04:00
|
|
|
rules:
|
|
|
|
main:
|
|
|
|
deny:
|
|
|
|
- pkg: io/ioutil
|
|
|
|
desc: The io/ioutil package has been deprecated, see https://go.dev/doc/go1.16#ioutil
|
2019-04-02 11:27:12 -04:00
|
|
|
gocyclo:
|
|
|
|
min-complexity: 16
|
|
|
|
govet:
|
2023-11-20 07:04:09 -05:00
|
|
|
check-shadowing: true
|
|
|
|
settings:
|
|
|
|
shadow:
|
|
|
|
strict: true
|
2019-04-02 11:27:12 -04:00
|
|
|
lll:
|
|
|
|
line-length: 200
|
|
|
|
nakedret:
|
|
|
|
command: nakedret
|
|
|
|
pattern: ^(?P<path>.*?\\.go):(?P<line>\\d+)\\s*(?P<message>.*)$
|
|
|
|
|
2023-11-20 11:38:50 -05:00
|
|
|
revive:
|
|
|
|
rules:
|
|
|
|
# https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#import-shadowing
|
|
|
|
- name: import-shadowing
|
|
|
|
severity: warning
|
|
|
|
disabled: false
|
2023-11-20 11:44:39 -05:00
|
|
|
# https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#empty-block
|
|
|
|
- name: empty-block
|
|
|
|
severity: warning
|
|
|
|
disabled: false
|
|
|
|
# https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#empty-lines
|
|
|
|
- name: empty-lines
|
|
|
|
severity: warning
|
|
|
|
disabled: false
|
2023-11-20 12:04:36 -05:00
|
|
|
# https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#use-any
|
|
|
|
- name: use-any
|
|
|
|
severity: warning
|
|
|
|
disabled: false
|
2023-11-20 11:38:50 -05:00
|
|
|
|
2019-04-02 11:27:12 -04:00
|
|
|
issues:
|
|
|
|
# The default exclusion rules are a bit too permissive, so copying the relevant ones below
|
|
|
|
exclude-use-default: false
|
|
|
|
|
|
|
|
exclude:
|
|
|
|
- parameter .* always receives
|
|
|
|
|
|
|
|
exclude-rules:
|
2022-03-27 13:24:19 -04:00
|
|
|
# We prefer to use an "exclude-list" so that new "default" exclusions are not
|
|
|
|
# automatically inherited. We can decide whether or not to follow upstream
|
|
|
|
# defaults when updating golang-ci-lint versions.
|
|
|
|
# Unfortunately, this means we have to copy the whole exclusion pattern, as
|
|
|
|
# (unlike the "include" option), the "exclude" option does not take exclusion
|
|
|
|
# ID's.
|
|
|
|
#
|
|
|
|
# These exclusion patterns are copied from the default excluses at:
|
|
|
|
# https://github.com/golangci/golangci-lint/blob/v1.44.0/pkg/config/issues.go#L10-L104
|
|
|
|
|
|
|
|
# EXC0001
|
|
|
|
- text: "Error return value of .((os\\.)?std(out|err)\\..*|.*Close|.*Flush|os\\.Remove(All)?|.*print(f|ln)?|os\\.(Un)?Setenv). is not checked"
|
2019-04-02 11:27:12 -04:00
|
|
|
linters:
|
|
|
|
- errcheck
|
2022-03-27 13:24:19 -04:00
|
|
|
# EXC0003
|
2019-04-02 11:27:12 -04:00
|
|
|
- text: "func name will be used as test\\.Test.* by other packages, and that stutters; consider calling this"
|
|
|
|
linters:
|
2022-03-27 13:24:19 -04:00
|
|
|
- revive
|
|
|
|
# EXC0006
|
|
|
|
- text: "Use of unsafe calls should be audited"
|
|
|
|
linters:
|
|
|
|
- gosec
|
|
|
|
# EXC0007
|
|
|
|
- text: "Subprocess launch(ed with variable|ing should be audited)"
|
|
|
|
linters:
|
|
|
|
- gosec
|
|
|
|
# EXC0008
|
|
|
|
# TODO: evaluate these and fix where needed: G307: Deferring unsafe method "*os.File" on type "Close" (gosec)
|
|
|
|
- text: "(G104|G307)"
|
2019-04-02 11:27:12 -04:00
|
|
|
linters:
|
|
|
|
- gosec
|
2022-03-27 13:24:19 -04:00
|
|
|
# EXC0009
|
|
|
|
- text: "(Expect directory permissions to be 0750 or less|Expect file permissions to be 0600 or less)"
|
2019-04-02 11:27:12 -04:00
|
|
|
linters:
|
|
|
|
- gosec
|
2022-03-27 13:24:19 -04:00
|
|
|
# EXC0010
|
|
|
|
- text: "Potential file inclusion via variable"
|
2019-04-02 11:27:12 -04:00
|
|
|
linters:
|
|
|
|
- gosec
|
2022-03-27 13:24:19 -04:00
|
|
|
|
2022-09-02 15:24:26 -04:00
|
|
|
# G113 Potential uncontrolled memory consumption in Rat.SetString (CVE-2022-23772)
|
|
|
|
# only affects gp < 1.16.14. and go < 1.17.7
|
|
|
|
- text: "(G113)"
|
|
|
|
linters:
|
|
|
|
- gosec
|
|
|
|
|
2022-03-27 13:24:19 -04:00
|
|
|
# Looks like the match in "EXC0007" above doesn't catch this one
|
|
|
|
# TODO: consider upstreaming this to golangci-lint's default exclusion rules
|
|
|
|
- text: "G204: Subprocess launched with a potential tainted input or cmd arguments"
|
2019-04-02 11:27:12 -04:00
|
|
|
linters:
|
|
|
|
- gosec
|
2022-03-27 13:24:19 -04:00
|
|
|
# Looks like the match in "EXC0009" above doesn't catch this one
|
|
|
|
# TODO: consider upstreaming this to golangci-lint's default exclusion rules
|
|
|
|
- text: "G306: Expect WriteFile permissions to be 0600 or less"
|
2019-04-02 11:27:12 -04:00
|
|
|
linters:
|
|
|
|
- gosec
|
2022-03-27 13:24:19 -04:00
|
|
|
|
2022-09-02 15:24:26 -04:00
|
|
|
# TODO: make sure all packages have a description. Currently, there's 67 packages without.
|
|
|
|
- text: "package-comments: should have a package comment"
|
|
|
|
linters:
|
|
|
|
- revive
|
2023-07-29 15:01:34 -04:00
|
|
|
# FIXME temporarily suppress these (see https://github.com/gotestyourself/gotest.tools/issues/272)
|
|
|
|
- text: "SA1019: (assert|cmp|is)\\.ErrorType is deprecated"
|
|
|
|
linters:
|
|
|
|
- staticcheck
|
2022-03-27 13:24:19 -04:00
|
|
|
# Exclude some linters from running on tests files.
|
|
|
|
- path: _test\.go
|
2019-04-02 11:27:12 -04:00
|
|
|
linters:
|
2022-03-27 13:24:19 -04:00
|
|
|
- errcheck
|
2019-04-02 11:27:12 -04:00
|
|
|
- gosec
|
2022-03-27 13:24:19 -04:00
|
|
|
|
2023-11-20 07:04:09 -05:00
|
|
|
# Allow "err" and "ok" vars to shadow existing declarations, otherwise we get too many false positives.
|
|
|
|
- text: '^shadow: declaration of "(err|ok)" shadows declaration'
|
|
|
|
linters:
|
|
|
|
- govet
|
|
|
|
|
|
|
|
|
2022-03-27 13:24:19 -04:00
|
|
|
# Maximum issues count per one linter. Set to 0 to disable. Default is 50.
|
|
|
|
max-issues-per-linter: 0
|
|
|
|
|
|
|
|
# Maximum count of issues with the same text. Set to 0 to disable. Default is 3.
|
|
|
|
max-same-issues: 0
|