5
5
6
6
"github.com/stretchr/testify/assert"
7
7
"github.com/stretchr/testify/require"
8
+ "golang.org/x/tools/go/packages"
8
9
9
10
"github.com/golangci/golangci-lint/pkg/config"
10
11
"github.com/golangci/golangci-lint/pkg/goanalysis"
@@ -176,8 +177,11 @@ func TestManager_combineGoAnalysisLinters(t *testing.T) {
176
177
m , err := NewManager (nil , nil )
177
178
require .NoError (t , err )
178
179
179
- foo := goanalysis .NewLinter ("foo" , "example foo" , nil , nil ).WithLoadMode (goanalysis .LoadModeTypesInfo )
180
- bar := goanalysis .NewLinter ("bar" , "example bar" , nil , nil ).WithLoadMode (goanalysis .LoadModeTypesInfo )
180
+ fooTyped := goanalysis .NewLinter ("foo" , "example foo" , nil , nil ).WithLoadMode (goanalysis .LoadModeTypesInfo )
181
+ barTyped := goanalysis .NewLinter ("bar" , "example bar" , nil , nil ).WithLoadMode (goanalysis .LoadModeTypesInfo )
182
+
183
+ fooSyntax := goanalysis .NewLinter ("foo" , "example foo" , nil , nil ).WithLoadMode (goanalysis .LoadModeSyntax )
184
+ barSyntax := goanalysis .NewLinter ("bar" , "example bar" , nil , nil ).WithLoadMode (goanalysis .LoadModeSyntax )
181
185
182
186
testCases := []struct {
183
187
desc string
@@ -188,37 +192,112 @@ func TestManager_combineGoAnalysisLinters(t *testing.T) {
188
192
desc : "no combined, one linter" ,
189
193
linters : map [string ]* linter.Config {
190
194
"foo" : {
191
- Linter : foo ,
195
+ Linter : fooTyped ,
192
196
InPresets : []string {"A" },
193
197
},
194
198
},
195
199
expected : map [string ]* linter.Config {
196
200
"foo" : {
197
- Linter : foo ,
201
+ Linter : fooTyped ,
202
+ InPresets : []string {"A" },
203
+ },
204
+ },
205
+ },
206
+ {
207
+ desc : "combined, several linters (typed)" ,
208
+ linters : map [string ]* linter.Config {
209
+ "foo" : {
210
+ Linter : fooTyped ,
198
211
InPresets : []string {"A" },
199
212
},
213
+ "bar" : {
214
+ Linter : barTyped ,
215
+ InPresets : []string {"B" },
216
+ },
200
217
},
218
+ expected : func () map [string ]* linter.Config {
219
+ mlConfig := & linter.Config {
220
+ Linter : goanalysis .NewMetaLinter ([]* goanalysis.Linter {barTyped , fooTyped }),
221
+ InPresets : []string {"A" , "B" },
222
+ }
223
+
224
+ return map [string ]* linter.Config {
225
+ "goanalysis_metalinter" : mlConfig ,
226
+ }
227
+ }(),
228
+ },
229
+ {
230
+ desc : "combined, several linters (different LoadMode)" ,
231
+ linters : map [string ]* linter.Config {
232
+ "foo" : {
233
+ Linter : fooTyped ,
234
+ InPresets : []string {"A" },
235
+ LoadMode : packages .NeedName ,
236
+ },
237
+ "bar" : {
238
+ Linter : barTyped ,
239
+ InPresets : []string {"B" },
240
+ LoadMode : packages .NeedTypesSizes ,
241
+ },
242
+ },
243
+ expected : func () map [string ]* linter.Config {
244
+ mlConfig := & linter.Config {
245
+ Linter : goanalysis .NewMetaLinter ([]* goanalysis.Linter {barTyped , fooTyped }),
246
+ InPresets : []string {"A" , "B" },
247
+ LoadMode : packages .NeedName | packages .NeedTypesSizes ,
248
+ }
249
+
250
+ return map [string ]* linter.Config {
251
+ "goanalysis_metalinter" : mlConfig ,
252
+ }
253
+ }(),
254
+ },
255
+ {
256
+ desc : "combined, several linters (same LoadMode)" ,
257
+ linters : map [string ]* linter.Config {
258
+ "foo" : {
259
+ Linter : fooTyped ,
260
+ InPresets : []string {"A" },
261
+ LoadMode : packages .NeedName ,
262
+ },
263
+ "bar" : {
264
+ Linter : barTyped ,
265
+ InPresets : []string {"B" },
266
+ LoadMode : packages .NeedName ,
267
+ },
268
+ },
269
+ expected : func () map [string ]* linter.Config {
270
+ mlConfig := & linter.Config {
271
+ Linter : goanalysis .NewMetaLinter ([]* goanalysis.Linter {barTyped , fooTyped }),
272
+ InPresets : []string {"A" , "B" },
273
+ LoadMode : packages .NeedName ,
274
+ }
275
+
276
+ return map [string ]* linter.Config {
277
+ "goanalysis_metalinter" : mlConfig ,
278
+ }
279
+ }(),
201
280
},
202
281
{
203
- desc : "combined, several linters" ,
282
+ desc : "combined, several linters (syntax) " ,
204
283
linters : map [string ]* linter.Config {
205
284
"foo" : {
206
- Linter : foo ,
285
+ Linter : fooSyntax ,
207
286
InPresets : []string {"A" },
208
287
},
209
288
"bar" : {
210
- Linter : bar ,
289
+ Linter : barSyntax ,
211
290
InPresets : []string {"B" },
212
291
},
213
292
},
214
293
expected : func () map [string ]* linter.Config {
215
294
mlConfig := & linter.Config {
216
- Linter : goanalysis .NewMetaLinter ([]* goanalysis.Linter {bar , foo }),
295
+ Linter : goanalysis .NewMetaLinter ([]* goanalysis.Linter {barSyntax , fooSyntax }),
217
296
InPresets : []string {"A" , "B" },
218
297
}
219
298
220
299
return map [string ]* linter.Config {
221
- "goanalysis_metalinter" : mlConfig . WithLoadForGoAnalysis () ,
300
+ "goanalysis_metalinter" : mlConfig ,
222
301
}
223
302
}(),
224
303
},
0 commit comments