1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
# options for analysis running
run:
# timeout for analysis, e.g. 30s, 5m, default is 1m
timeout: 10m
modules-download-mode: readonly
# list of useful linters could be found at https://github.com/golangci/awesome-go-linters
linters:
disable-all: true
enable:
- bidichk
- errcheck
- exportloopref
- depguard
- forbidigo
- gci
# We use both gofmt and gofumpt because gofumpt doesn't seem to be linting
# for simplifications, while gofmt does.
- gofmt
- gofumpt
- goimports
- gosimple
- govet
- ineffassign
- makezero
- megacheck
- misspell
- noctx
- nolintlint
- paralleltest
- revive
- staticcheck
- stylecheck
- thelper
- unconvert
- unused
# These linters don't currently support Go 1.18+. Please refer to
# https://github.com/golangci/golangci-lint/issues/2649 for further
# information.
#- rowserrcheck
#- sqlclosecheck
#- wastedassign
linters-settings:
depguard:
list-type: blacklist
include-go-root: true
packages-with-error-message:
- io/ioutil: "ioutil is deprecated starting with Go 1.16"
errcheck:
# The following are functions for which we are currently not consistently
# checking returned errors. This is not intended as a list of known-okay
# cases to skip the checks, but rather as a list of things we should
# eventually fix.
exclude-functions:
- (*database/sql.DB).Close
- (*database/sql.Rows).Close
- (*gitlab.com/gitlab-org/gitaly/v15/client.Pool).Close
- (*gitlab.com/gitlab-org/gitaly/v15/internal/sidechannel.ServerConn).Close
- (*gitlab.com/gitlab-org/gitaly/v15/internal/streamcache.pipe).Close
- (*gitlab.com/gitlab-org/gitaly/v15/internal/streamcache.pipeReader).Close
- (*google.golang.org/grpc.ClientConn).Close
- (*google.golang.org/grpc.ServerConn).Close
- (*io.PipeReader).Close
- (*io.PipeWriter).Close
- (*os.File).Close
- (io.Closer).Close
- (net.Conn).Close
- (net.Listener).Close
forbidigo:
forbid:
# Tests and code which use timing-based setups have repeatedly resulted
# in flaky tests and are considered a code smell. Tests should be
# rewritten to use deterministic timing sources like tickers. Using the
# following functions is thus disallowed. and a code smell.
- ^context.WithDeadline$
- ^context.WithTimeout$
# Tests should always use `testhelper.Context()`: this context has
# special handling for feature flags which allows us to assert that
# they're tested as expected.
- ^context.Background$
- ^context.TODO$
# Tests should not set the bare environment functions, but instead use
# `t.Setenv()` or `testhelper.Unsetenv()`. These functions have sanity
# checks to verify we don't use `t.Parallel()` when setting envvars.
- ^os.Setenv$
- ^os.Unsetenv$
paralleltest:
# Ignore missing calls to `t.Parallel()` and only report incorrect uses of it.
ignore-missing: true
revive:
# Specifying any rule explicitly will disable the default-enabled rules.
# Manually specify the defaults along with `context-as-argument`.
rules:
- name: blank-imports
disabled: false
- name: context-as-argument
arguments:
# The context should always be first, except in our testing packages.
allowTypesBefore: "*testing.T,*testing.B,testing.TB"
- name: dot-imports
disabled: false
- name: error-naming
disabled: false
- name: error-return
disabled: false
- name: error-strings
disabled: false
- name: exported
disabled: false
- name: increment-decrement
disabled: false
- name: indent-error-flow
disabled: false
- name: receiver-naming
disabled: false
- name: range
disabled: false
- name: var-naming
disabled: false
stylecheck:
# ST1000 checks for missing package comments. We don't use these for most
# packages, so let's disable this check.
checks: [ "all", "-ST1000" ]
thelper:
test:
# The following linter would check whether we always call `t.Helper()` in
# functions that are not the top-level testcase. While this is nice in
# theory, in practice it would also impact e.g. usecases like
# `testhelper.NewFeatureSets(...).Run(t, testWithFeatures)`. This isn't
# really what we want, so we just leave these as disabled for the time
# being.
begin: false
benchmark:
begin: false
tb:
begin: false
issues:
exclude-use-default: false
exclude-rules:
- linters:
- forbidigo
# This fine thing excludes all paths which don't end with "_test.go".
path: "^([^_]|_([^t]|t([^e]|e([^s]|s([^t]|t([^\\.]|\\.([^g]|g[^o])))))))*$"
# 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
|