Repository navigation
Expand file tree
/
Copy path.golangci.yml
More file actions
232 lines (210 loc) · 6.14 KB
/
Copy path.golangci.yml
File metadata and controls
232 lines (210 loc) · 6.14 KB
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
version: "2"
run:
allow-parallel-runners: true
timeout: 5m
linters:
default: none
enable:
- copyloopvar
- cyclop
- depguard
- dupword
- errcheck
- errname
- errorlint
- exptostd
- forbidigo
- funlen
- gocheckcompilerdirectives
- gocognit
- gocritic
- gocyclo
- godot
- govet
- iface
- importas
- ineffassign
- intrange
- maintidx
- misspell
- nestif
- nilnesserr
- nolintlint
- predeclared
- recvcheck
- revive
- staticcheck
- testifylint
- unconvert
- unparam
- unused
- usestdlibvars
- usetesting
settings:
depguard:
rules:
one-yaml-package:
list-mode: lax
deny:
- pkg: gopkg.in/yaml.v3
desc: This package is unmaintained; use github.com/goccy/go-yaml instead.
# The 3rd-party set package we use imports v1 of the bson package, and it's very easy to
# accidentally let this slip in via goimports; this rule notices that.
driver-v2:
list-mode: lax
deny:
- pkg: go.mongodb.org/mongo-driver/bson
desc: Use the v2 package (go.mongodb.org/mongo-driver/v2/bson) instead
errcheck:
check-blank: true
check-type-assertions: true
funlen:
lines: 100
statements: 75
govet:
enable:
- findcall
- nilness
- shadow
- sortslice
- unusedwrite
importas:
alias:
- pkg: github.com/deckarep/golang-set/v2
alias: mapset
no-extra-aliases: true
misspell:
locale: US
extra-words:
- typo: cancelation
correction: cancellation
- typo: cancelations
correction: cancellations
- typo: cancelling
correction: canceling
- typo: cancelled
correction: canceled
recvcheck:
exclusions:
# It's normal for `Marshal*` methods to not take a pointer.
- "*.MarshalBSON"
# We have some structs that are passed around as non-pointers, but `UnmarshalBSON` always
# takes a pointer since it's populating the receiver directly.
- "*.UnmarshalBSON"
- "*.UnmarshalBSONValue"
revive:
enable-all-rules: false
rules:
- name: argument-limit
arguments:
- 5
- name: blank-imports
- name: context-as-argument
- name: context-keys-type
- name: dot-imports
# - name: empty-block We use empty blocks on purpose.
- name: error-naming
- name: error-return
- name: error-strings
- name: errorf
# - name: exported This causes too many useless renamings.
- name: function-result-limit
arguments:
- 3
- name: import-shadowing
- name: increment-decrement
- name: indent-error-flow
- name: package-comments
- name: range
- name: receiver-naming
- name: redefines-builtin-id
- name: superfluous-else
- name: time-naming
- name: unexported-return
- name: unreachable-code
- name: unused-parameter
- name: unused-receiver
- name: var-declaration
# - name: var-naming This causes too many useless renamings.
staticcheck:
checks:
- all
- "-QF1001" # this suggests applying De Morgan's Laws, and is very aggressive.
- "-QF1008" # this suggests removing embedded fields from calls, but having them is often clearer
- "-ST1003" # this suggests lots of useless variable renaming
testifylint:
enable:
- bool-compare
- compares
- empty
- error-is-as
- error-nil
- expected-actual
- len
- require-error
- suite-extra-assert-call
disable:
- float-compare
# This checks for use of `require` assertions in goroutines outside the
# main routine. We really _should_ fix this but it's a lot to deal with
# at the moment.
- go-require
- suite-dont-use-pkg
require-error:
# The default is to insist on require not only for "no error" checks but also for "error is X"
# checks, which is weird.
fn-pattern: ^NoErrorf?$
suite-extra-assert-call:
mode: require
unused:
# If a field is written but never read, it's almost certainly not being used. The one exception
# (for which we'll add a `nolint` comment) is with fields that exist solely for serialization
# (to YAML, BSON, etc.).
field-writes-are-uses: false
# We want to actually check that exported fields are used.
exported-fields-are-used: false
# Setting this to false caught some places where we created and wrote to local variables but
# never read from them.
local-variables-are-used: false
usetesting:
# We _do_ want to use the testing package's versions of these methods. They ensure that we clean
# up after ourselves automatically.
os-setenv: true
os-temp-dir: true
exclusions:
generated: lax
warn-unused: true
presets:
- comments
- std-error-handling
paths:
- go-pkg-forks
# If we override the defaults we have to specify this ourselves.
- .gocache
- vendor
rules:
- text: 'composites: .+bson\.(Binary|E|Timestamp) struct literal uses unkeyed fields'
linters:
- govet
# The linter that requires unused parameters to be named '_' conflicts with this staticcheck
# rule to omit unused receiver names.
- text: "receiver name should not be an underscore, omit the name if it is unused"
linters:
- revive
- staticcheck
# The shadow linter is generally useful but we intentionally shadow "err" all the time and it
# is generally safe to do so.
- text: 'shadow: declaration of "err" shadows declaration'
linters:
- govet
issues:
max-issues-per-linter: 0
max-same-issues: 0
formatters:
enable:
- goimports
- golines
settings:
golines:
max-len: 100
reformat-tags: false