mirror of
https://github.com/optim-enterprises-bv/kubernetes.git
synced 2025-10-30 17:58:14 +00:00
These suppressions are necessary to make golangci-lint 1.64 pass with the current code base. This change is meant to be backported to release branches. On master, we may want to revert some of it together with fixing the findings.
270 lines
10 KiB
YAML
270 lines
10 KiB
YAML
# golangci-lint is used in Kubernetes with different configurations that
|
||
# enable an increasing amount of checks:
|
||
# - golangci.yaml is the most permissive configuration. All existing code
|
||
# passed.
|
||
# - golangci-hints.yaml adds checks for code patterns where developer
|
||
# and reviewer may decide whether findings should get addressed before
|
||
# merging. Beware that the golangci-lint output includes also the
|
||
# issues that must be fixed and doesn't indicate how severe each issue
|
||
# is (https://gophers.slack.com/archives/CS0TBRKPC/p1685721815275349).
|
||
#
|
||
# All three flavors are generated from golangci.yaml.in with
|
||
# hack/update-golangci-lint-config.sh.
|
||
|
||
run:
|
||
timeout: 30m
|
||
|
||
output:
|
||
sort-results: true
|
||
|
||
issues:
|
||
max-issues-per-linter: 0
|
||
max-same-issues: 0
|
||
|
||
# The default excludes disable the "should have comment or be unexported" check from revive.
|
||
# We want that to be enabled, therefore we have to disable all default excludes and
|
||
# add those back one-by-one that we want. See https://github.com/golangci/golangci-lint/issues/456#issuecomment-617470264
|
||
exclude-use-default: false
|
||
exclude:
|
||
# staticcheck: Developers tend to write in C-style with an explicit 'break' in a 'switch', so it's ok to ignore
|
||
- ineffective break statement. Did you mean to break out of the outer loop
|
||
|
||
exclude-files:
|
||
- "^zz_generated.*"
|
||
|
||
# Excluding configuration per-path, per-linter, per-text and per-source
|
||
exclude-rules:
|
||
# exclude ineffassign linter for generated files for conversion
|
||
- path: conversion\.go
|
||
linters:
|
||
- ineffassign
|
||
|
||
# SSA Extract calls are allowed in tests.
|
||
- linters:
|
||
- forbidigo
|
||
text: should not be used because managedFields was removed
|
||
path: _test.go$
|
||
|
||
# Adding unversioned feature gates is allowed in tests
|
||
- linters:
|
||
- forbidigo
|
||
text: should not use MutableFeatureGate.Add, use AddVersioned instead
|
||
path: _test.go$
|
||
|
||
{{- if .Base}}
|
||
|
||
# TODO(oscr) Remove these excluded directories and fix findings. Due to large amount of findings in different components
|
||
# with different owners it's hard to fix everything in a single pr. This will therefore be done in multiple prs.
|
||
- path: (pkg/volume/*|test/*|azure/*|pkg/cmd/wait*|request/bearertoken/*|metrics/*|filters/*)
|
||
linters:
|
||
- gocritic
|
||
{{- end}}
|
||
|
||
# The Kubernetes naming convention for conversion functions uses underscores
|
||
# and intentionally deviates from normal Go conventions to make those function
|
||
# names more readable. Same for SetDefaults_*.
|
||
#
|
||
# https://github.com/kubernetes/kubernetes/issues/117288#issuecomment-1507028627
|
||
# https://github.com/kubernetes/kubernetes/issues/117288#issuecomment-1514201592
|
||
- linters:
|
||
- stylecheck
|
||
- revive
|
||
text: "(ST1003: should not use underscores in Go names; func (Convert_.*_To_.*|SetDefaults_)|exported: exported function (Convert|SetDefaults)_.* should be of the form)"
|
||
|
||
# This check currently has some false positives (https://github.com/nunnatsa/ginkgolinter/issues/91).
|
||
- linters:
|
||
- ginkgolinter
|
||
text: use a function call in (Eventually|Consistently)
|
||
|
||
{{- if .Base}}
|
||
|
||
# Some of these seem legitimate, maybe better fix code (https://github.com/kubernetes/kubernetes/issues/130449).
|
||
|
||
- linters:
|
||
- govet
|
||
text: "lostcancel|printf"
|
||
|
||
- linters:
|
||
- ginkgolinter
|
||
text: "wrong error assertion. Consider using `gomega.(Eventually|Consistently)|wrong comparison assertion|wrong length assertion"
|
||
|
||
- linters:
|
||
- testifylint
|
||
text: "encoded-compare|error-nil|formatter"
|
||
|
||
- linters:
|
||
- gocritic
|
||
text: "append result not assigned to the same slice|put a space between `//` and comment text|sloppyLen|elseif|should rewrite switch statement to if statement|regexpMust|wrapperFunc: use strings.ReplaceAll|singleCaseSwitch|deprecatedComment|exitAfterDefer|captLocal|unlambda|underef|unslice|valSwap|typeSwitchVar"
|
||
{{- end}}
|
||
|
||
# https://github.com/kubernetes/kubernetes/issues/117288#issuecomment-1507012435
|
||
- linters:
|
||
- gocritic
|
||
text: "ifElseChain: rewrite if-else to switch statement"
|
||
|
||
# Only packages listed here opt into the strict "exported symbols must be documented".
|
||
#
|
||
# Exclude texts from https://github.com/golangci/golangci-lint/blob/ab3c3cd69e602ff53bb4c3e2c188f0caeb80305d/pkg/config/issues.go#L11-L103
|
||
- linters:
|
||
- golint
|
||
- revive
|
||
- stylecheck
|
||
text: comment on exported (method|function|type|const)|should have( a package)? comment|comment should be of the form|comment on exported (method|function|type|const)|should have( a package)? comment|comment should be of the form|exported (.+) should have comment( \(or a comment on this block\))? or be unexported|package comment should be of the form "(.+)...|comment on exported (.+) should be of the form "(.+)...|should have a package comment
|
||
path-except: cmd/kubeadm
|
||
|
||
# The unused linter that comes from staticcheck currently does not handle types which implement
|
||
# a generic interface. The linter incorrectly reports the implementations of unexported
|
||
# interface methods as unused. See https://github.com/dominikh/go-tools/issues/1294.
|
||
# Rather than exporting the interface methods, which makes the error go away but changes the
|
||
# semantics of the code, we ignore this error for affected files.
|
||
# This can be removed when the staticcheck implementation of this rule is fixed, which may
|
||
# depend on https://github.com/golang/go/issues/63982.
|
||
- linters:
|
||
- unused
|
||
path: staging/src/k8s.io/client-go/util/workqueue/metrics.go
|
||
|
||
{{- if not .Hints}}
|
||
|
||
# The following issues were deemed "might be worth fixing, needs to be
|
||
# decided on a case-by-case basis". This was initially decided by a
|
||
# majority of the developers who voted in
|
||
# https://github.com/kubernetes/kubernetes/issues/117288 and may evolve
|
||
# over time.
|
||
|
||
# https://github.com/kubernetes/kubernetes/issues/117288#issuecomment-1507008918
|
||
- linters:
|
||
- gocritic
|
||
text: "assignOp:"
|
||
|
||
# https://github.com/kubernetes/kubernetes/issues/117288#issuecomment-1507016854
|
||
- linters:
|
||
- gosimple
|
||
text: "S1002: should omit comparison to bool constant"
|
||
|
||
# https://github.com/kubernetes/kubernetes/issues/117288#issuecomment-1507023980
|
||
- linters:
|
||
- gosimple
|
||
text: "S1016: should convert opts .* instead of using struct literal"
|
||
|
||
# https://github.com/kubernetes/kubernetes/issues/117288#issuecomment-1507026758
|
||
- linters:
|
||
- gosimple
|
||
text: "S1033: unnecessary guard around call to delete"
|
||
|
||
# Didn't make it into https://github.com/kubernetes/kubernetes/issues/117288.
|
||
# Discussion on Slack concluded that "it's hard to have a universal policy for all
|
||
# functions marked deprecated" and thus this can only be a hint which must
|
||
# be considered on a case-by-case basis.
|
||
- linters:
|
||
- staticcheck
|
||
text: "SA1019: .*is deprecated"
|
||
|
||
# https://github.com/kubernetes/kubernetes/issues/117288#issuecomment-1507030071
|
||
- linters:
|
||
- stylecheck
|
||
text: "ST1012: error var .* should have name of the form ErrFoo"
|
||
|
||
# https://github.com/kubernetes/kubernetes/issues/117288#issuecomment-1507031224
|
||
- linters:
|
||
- stylecheck
|
||
text: "ST1023: should omit type .* from declaration; it will be inferred from the right-hand side"
|
||
{{- end}}
|
||
|
||
linters:
|
||
disable-all: {{if .Base -}} true {{- else -}} false {{- end}}
|
||
enable: # please keep this alphabetized
|
||
- depguard
|
||
- forbidigo
|
||
- ginkgolinter
|
||
- gocritic
|
||
- govet
|
||
{{- if .Hints}}
|
||
- errorlint
|
||
{{- end}}
|
||
- ineffassign
|
||
- logcheck
|
||
- revive
|
||
- staticcheck
|
||
- stylecheck
|
||
- testifylint
|
||
- unused
|
||
{{- if not .Base }}
|
||
- usestdlibvars
|
||
{{- end}}
|
||
|
||
linters-settings: # please keep this alphabetized
|
||
custom:
|
||
logcheck:
|
||
# Installed there by hack/verify-golangci-lint.sh.
|
||
path: ../_output/local/bin/logcheck.so
|
||
description: structured logging checker
|
||
original-url: k8s.io/logtools/logcheck
|
||
settings:
|
||
config: |
|
||
{{include "hack/logcheck.conf" | indent 10 | trim}}
|
||
depguard:
|
||
rules:
|
||
main:
|
||
files:
|
||
- $all
|
||
- "!$test"
|
||
- "!**/test/**"
|
||
deny:
|
||
- pkg: "github.com/google/go-cmp/cmp"
|
||
desc: "cmp is allowed only in test files"
|
||
forbidigo:
|
||
analyze-types: true
|
||
forbid:
|
||
- p: ^managedfields\.ExtractInto$
|
||
pkg: ^k8s\.io/apimachinery/pkg/util/managedfields$
|
||
msg: should not be used because managedFields was removed
|
||
- p: \.Extract
|
||
pkg: ^k8s\.io/client-go/applyconfigurations/
|
||
msg: should not be used because managedFields was removed
|
||
- p: \.Add$
|
||
pkg: ^k8s\.io/component-base/featuregate$
|
||
type: ^MutableFeatureGate$
|
||
msg: should not use MutableFeatureGate.Add, use AddVersioned instead
|
||
{{- if .Hints}}
|
||
- p: ^gomega\.BeTrue$
|
||
pkg: ^github.com/onsi/gomega$
|
||
msg: "it does not produce a good failure message - use BeTrueBecause with an explicit printf-style failure message instead, or plain Go: if ... { ginkgo.Fail(...) }"
|
||
- p: ^gomega\.BeFalse$
|
||
pkg: ^github.com/onsi/gomega$
|
||
msg: "it does not produce a good failure message - use BeFalseBecause with an explicit printf-style failure message instead, or plain Go: if ... { ginkgo.Fail(...) }"
|
||
{{- end}}
|
||
{{- if .Base }}
|
||
gocritic:
|
||
enabled-checks:
|
||
- equalFold
|
||
- boolExprSimplify
|
||
{{- end}}
|
||
revive:
|
||
# Only these rules are enabled.
|
||
rules:
|
||
- name: exported
|
||
arguments:
|
||
- disableStutteringCheck
|
||
staticcheck:
|
||
checks:
|
||
- "all"
|
||
{{- if .Base }}
|
||
- "-SA1019" # TODO(fix) Using a deprecated function, variable, constant or field
|
||
- "-SA2002" # TODO(fix) Called testing.T.FailNow or SkipNow in a goroutine, which isn’t allowed
|
||
- "-SA1006" # TODO(fix) Using a printf-style function with a dynamic format string and no arguments can just use a print-style func
|
||
{{- end}}
|
||
{{- if .Base }}
|
||
stylecheck:
|
||
checks:
|
||
- "ST1019" # Importing the same package multiple times
|
||
{{- end}}
|
||
testifylint:
|
||
enable-all: true
|
||
{{- if not .Hints }}
|
||
disable: # TODO: remove each disabled rule and fix it
|
||
{{- if .Base }}
|
||
- float-compare
|
||
{{- end}}
|
||
- require-error
|
||
{{- end}}
|