Skip to content

Commit 07a6667

Browse files
committed
clear types only after unused running
Ensure that `unused` is always the last in execution order. It can speed up packages loading a bit. Refactor enabled linters set to remove extra logging. Relates: #944
1 parent c3a0f7a commit 07a6667

File tree

10 files changed

+65
-83
lines changed

10 files changed

+65
-83
lines changed

go.mod

+1-5
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,8 @@ require (
5252
github.com/valyala/quicktemplate v1.2.0
5353
golang.org/x/tools v0.0.0-20200502202811-ed308ab3e770
5454
gopkg.in/yaml.v2 v2.2.8
55+
honnef.co/go/tools v0.0.1-2020.1.3
5556
mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed
5657
mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b // indirect
5758
mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f
5859
)
59-
60-
// See https://github.com/golangci/golangci-lint/issues/995
61-
// Update only after mitigating this issue.
62-
// TODO: Enable back tests with skip "Issue955" after update.
63-
require honnef.co/go/tools v0.0.1-2020.1.3

go.sum

+3-20
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee
2424
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
2525
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
2626
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
27-
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
2827
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
2928
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3029
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@@ -156,14 +155,11 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB
156155
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
157156
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
158157
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
159-
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
160158
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
161159
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
162160
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
163161
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
164162
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
165-
github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0=
166-
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
167163
github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
168164
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
169165
github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
@@ -187,7 +183,6 @@ github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b h1:9+ke9YJ9KGWw5AN
187183
github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk=
188184
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
189185
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
190-
github.com/mozilla/tls-observatory v0.0.0-20200220173314-aae45faa4006/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk=
191186
github.com/mozilla/tls-observatory v0.0.0-20200317151703-4fa42e1c2dee/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk=
192187
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
193188
github.com/nakabonne/nestif v0.3.0 h1:+yOViDGhg8ygGrmII72nV9B/zGxY188TYpfolntsaPw=
@@ -228,8 +223,6 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR
228223
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
229224
github.com/ryancurrah/gomodguard v1.0.4 h1:oCreMAt9GuFXDe9jW4HBpc3GjdX3R/sUEcLAGh1zPx8=
230225
github.com/ryancurrah/gomodguard v1.0.4/go.mod h1:9T/Cfuxs5StfsocWr4WzDL36HqnX0fVb9d5fSEaLhoE=
231-
github.com/securego/gosec v0.0.0-20200316084457-7da9f46445fd h1:qB+l4fYZsH78xORC1aqVS0zNmgkQp4rkj2rvfxQMtzc=
232-
github.com/securego/gosec v0.0.0-20200316084457-7da9f46445fd/go.mod h1:NurAFZsWJAEZjogSwdVPlHkOZB3DOAU7gsPP8VFZCHc=
233226
github.com/securego/gosec/v2 v2.2.1-0.20200424144625-ee3146e63716 h1:E/qamk0wO4PVhJhce201hAJWk/rKnGqKOk/blHzkY7o=
234227
github.com/securego/gosec/v2 v2.2.1-0.20200424144625-ee3146e63716/go.mod h1:UzeVyUXbxukhLeHKV3VVqo7HdoQR9MrRfFmZYotn8ME=
235228
github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada h1:WokF3GuxBeL+n4Lk4Fa8v9mbdjlrl7bHuneF4N1bk2I=
@@ -268,8 +261,6 @@ github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfD
268261
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
269262
github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
270263
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
271-
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
272-
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
273264
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
274265
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
275266
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
@@ -316,10 +307,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
316307
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
317308
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
318309
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
319-
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
320310
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
321-
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee h1:WG0RUwxtNT4qqaXX3DPA8zHFNm/D9xaBpxzHt1WcA/E=
322-
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
323311
golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ=
324312
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
325313
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -333,8 +321,6 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn
333321
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
334322
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
335323
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
336-
golang.org/x/net v0.0.0-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g=
337-
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
338324
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8=
339325
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
340326
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -371,22 +357,20 @@ golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3
371357
golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
372358
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
373359
golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
374-
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
375360
golang.org/x/tools v0.0.0-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI=
376361
golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
377362
golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
378363
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
379-
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
380364
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
381-
golang.org/x/tools v0.0.0-20200228224639-71482053b885/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
382365
golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
383366
golang.org/x/tools v0.0.0-20200331202046-9d5940d49312/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
384367
golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
385368
golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e h1:3Dzrrxi54Io7Aoyb0PYLsI47K2TxkRQg+cqUn+m04do=
386369
golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
387370
golang.org/x/tools v0.0.0-20200502202811-ed308ab3e770 h1:M9Fif0OxNji8w+HvmhVQ8KJtiZOsjU9RgslJGhn95XE=
388-
golang.org/x/tools v0.0.0-20200502202811-ed308ab3e770/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
389371
golang.org/x/tools v0.0.0-20200502202811-ed308ab3e770 h1:M9Fif0OxNji8w+HvmhVQ8KJtiZOsjU9RgslJGhn95XE=
372+
golang.org/x/tools v0.0.0-20200502202811-ed308ab3e770 h1:M9Fif0OxNji8w+HvmhVQ8KJtiZOsjU9RgslJGhn95XE=
373+
golang.org/x/tools v0.0.0-20200502202811-ed308ab3e770/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
390374
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc=
391375
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
392376
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898 h1:/atklqdjdhuosWIl6AIbOeHJjicWYPqR9bpxqxYG2pA=
@@ -395,6 +379,7 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IV
395379
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
396380
google.golang.org/appengine v1.1.0 h1:igQkv0AAhEIvTEpD5LIpAfav2eeVO9HBTjvKHVJPRSs=
397381
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
382+
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
398383
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
399384
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
400385
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
@@ -421,8 +406,6 @@ gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
421406
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
422407
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
423408
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
424-
honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
425-
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
426409
honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U=
427410
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
428411
mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I=

pkg/commands/linters.go

+7-13
Original file line numberDiff line numberDiff line change
@@ -20,32 +20,26 @@ func (e *Executor) initLinters() {
2020
e.initRunConfiguration(lintersCmd)
2121
}
2222

23-
func IsLinterInConfigsList(name string, linters []*linter.Config) bool {
24-
for _, lc := range linters {
25-
if lc.Name() == name {
26-
return true
27-
}
28-
}
29-
30-
return false
31-
}
32-
3323
func (e *Executor) executeLinters(_ *cobra.Command, args []string) {
3424
if len(args) != 0 {
3525
e.log.Fatalf("Usage: golangci-lint linters")
3626
}
3727

38-
enabledLCs, err := e.EnabledLintersSet.Get(false)
28+
enabledLintersMap, err := e.EnabledLintersSet.GetEnabledLintersMap()
3929
if err != nil {
4030
log.Fatalf("Can't get enabled linters: %s", err)
4131
}
4232

4333
color.Green("Enabled by your configuration linters:\n")
44-
printLinterConfigs(enabledLCs)
34+
enabledLinters := make([]*linter.Config, 0, len(enabledLintersMap))
35+
for _, linter := range enabledLintersMap {
36+
enabledLinters = append(enabledLinters, linter)
37+
}
38+
printLinterConfigs(enabledLinters)
4539

4640
var disabledLCs []*linter.Config
4741
for _, lc := range e.DBManager.GetAllSupportedLinterConfigs() {
48-
if !IsLinterInConfigsList(lc.Name(), enabledLCs) {
42+
if enabledLintersMap[lc.Name()] == nil {
4943
disabledLCs = append(disabledLCs, lc)
5044
}
5145
}

pkg/commands/run.go

+6-12
Original file line numberDiff line numberDiff line change
@@ -285,40 +285,34 @@ func fixSlicesFlags(fs *pflag.FlagSet) {
285285
func (e *Executor) runAnalysis(ctx context.Context, args []string) ([]result.Issue, error) {
286286
e.cfg.Run.Args = args
287287

288-
enabledLinters, err := e.EnabledLintersSet.Get(true)
288+
lintersToRun, err := e.EnabledLintersSet.GetOptimizedLinters()
289289
if err != nil {
290290
return nil, err
291291
}
292292

293-
enabledOriginalLinters, err := e.EnabledLintersSet.Get(false)
293+
enabledLintersMap, err := e.EnabledLintersSet.GetEnabledLintersMap()
294294
if err != nil {
295295
return nil, err
296296
}
297297

298298
for _, lc := range e.DBManager.GetAllSupportedLinterConfigs() {
299-
isEnabled := false
300-
for _, enabledLC := range enabledOriginalLinters {
301-
if enabledLC.Name() == lc.Name() {
302-
isEnabled = true
303-
break
304-
}
305-
}
299+
isEnabled := enabledLintersMap[lc.Name()] != nil
306300
e.reportData.AddLinter(lc.Name(), isEnabled, lc.EnabledByDefault)
307301
}
308302

309-
lintCtx, err := e.contextLoader.Load(ctx, enabledLinters)
303+
lintCtx, err := e.contextLoader.Load(ctx, lintersToRun)
310304
if err != nil {
311305
return nil, errors.Wrap(err, "context loading failed")
312306
}
313307
lintCtx.Log = e.log.Child("linters context")
314308

315309
runner, err := lint.NewRunner(e.cfg, e.log.Child("runner"),
316-
e.goenv, e.lineCache, e.DBManager, lintCtx.Packages)
310+
e.goenv, e.EnabledLintersSet, e.lineCache, e.DBManager, lintCtx.Packages)
317311
if err != nil {
318312
return nil, err
319313
}
320314

321-
issues, err := runner.Run(ctx, enabledLinters, lintCtx)
315+
issues, err := runner.Run(ctx, lintersToRun, lintCtx)
322316
if err != nil {
323317
return nil, err
324318
}

pkg/lint/linter/config.go

+9-3
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@ type Config struct {
2222
InPresets []string
2323
AlternativeNames []string
2424

25-
OriginalURL string // URL of original (not forked) repo, needed for autogenerated README
26-
CanAutoFix bool
27-
IsSlow bool
25+
OriginalURL string // URL of original (not forked) repo, needed for autogenerated README
26+
CanAutoFix bool
27+
IsSlow bool
28+
DoesChangeTypes bool
2829
}
2930

3031
func (lc *Config) ConsiderSlow() *Config {
@@ -67,6 +68,11 @@ func (lc *Config) WithAutoFix() *Config {
6768
return lc
6869
}
6970

71+
func (lc *Config) WithChangeTypes() *Config {
72+
lc.DoesChangeTypes = true
73+
return lc
74+
}
75+
7076
func (lc *Config) AllNames() []string {
7177
return append([]string{lc.Name()}, lc.AlternativeNames...)
7278
}

pkg/lint/lintersdb/enabled_set.go

+15-5
Original file line numberDiff line numberDiff line change
@@ -77,16 +77,22 @@ func (es EnabledSet) build(lcfg *config.Linters, enabledByDefaultLinters []*lint
7777
return resultLintersSet
7878
}
7979

80-
func (es EnabledSet) Get(optimize bool) ([]*linter.Config, error) {
80+
func (es EnabledSet) GetEnabledLintersMap() (map[string]*linter.Config, error) {
81+
if err := es.v.validateEnabledDisabledLintersConfig(&es.cfg.Linters); err != nil {
82+
return nil, err
83+
}
84+
85+
return es.build(&es.cfg.Linters, es.m.GetAllEnabledByDefaultLinters()), nil
86+
}
87+
88+
func (es EnabledSet) GetOptimizedLinters() ([]*linter.Config, error) {
8189
if err := es.v.validateEnabledDisabledLintersConfig(&es.cfg.Linters); err != nil {
8290
return nil, err
8391
}
8492

8593
resultLintersSet := es.build(&es.cfg.Linters, es.m.GetAllEnabledByDefaultLinters())
8694
es.verbosePrintLintersStatus(resultLintersSet)
87-
if optimize {
88-
es.combineGoAnalysisLinters(resultLintersSet)
89-
}
95+
es.combineGoAnalysisLinters(resultLintersSet)
9096

9197
var resultLinters []*linter.Config
9298
for _, lc := range resultLintersSet {
@@ -95,7 +101,11 @@ func (es EnabledSet) Get(optimize bool) ([]*linter.Config, error) {
95101

96102
// Make order of execution of linters (go/analysis metalinter and unused) stable.
97103
sort.Slice(resultLinters, func(i, j int) bool {
98-
return strings.Compare(resultLinters[i].Name(), resultLinters[j].Name()) <= 0
104+
a, b := resultLinters[i], resultLinters[j]
105+
if a.DoesChangeTypes != b.DoesChangeTypes {
106+
return b.DoesChangeTypes // move type-changing linters to the end to optimize speed
107+
}
108+
return strings.Compare(a.Name(), b.Name()) < 0
99109
})
100110

101111
return resultLinters, nil

pkg/lint/lintersdb/manager.go

+1
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
125125
WithPresets(linter.PresetUnused).
126126
WithAlternativeNames(megacheckName).
127127
ConsiderSlow().
128+
WithChangeTypes().
128129
WithURL("https://github.com/dominikh/go-tools/tree/master/unused"),
129130
linter.NewConfig(golinters.NewGosimple()).
130131
WithLoadForGoAnalysis().

pkg/lint/runner.go

+16-13
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import (
77
"runtime/debug"
88
"strings"
99

10+
"github.com/pkg/errors"
11+
1012
"github.com/golangci/golangci-lint/internal/errorutil"
1113
"github.com/golangci/golangci-lint/pkg/config"
1214
"github.com/golangci/golangci-lint/pkg/fsutils"
@@ -27,7 +29,7 @@ type Runner struct {
2729
Log logutils.Log
2830
}
2931

30-
func NewRunner(cfg *config.Config, log logutils.Log, goenv *goutil.Env,
32+
func NewRunner(cfg *config.Config, log logutils.Log, goenv *goutil.Env, es *lintersdb.EnabledSet,
3133
lineCache *fsutils.LineCache, dbManager *lintersdb.Manager, pkgs []*gopackages.Package) (*Runner, error) {
3234
icfg := cfg.Issues
3335
excludePatterns := icfg.ExcludePatterns
@@ -77,11 +79,9 @@ func NewRunner(cfg *config.Config, log logutils.Log, goenv *goutil.Env,
7779
excludeRulesProcessor = processors.NewExcludeRules(excludeRules, lineCache, log.Child("exclude_rules"))
7880
}
7981

80-
enabledLintersSet := lintersdb.NewEnabledSet(dbManager,
81-
lintersdb.NewValidator(dbManager), log.Child("enabledLinters"), cfg)
82-
lcs, err := enabledLintersSet.Get(false)
82+
enabledLinters, err := es.GetEnabledLintersMap()
8383
if err != nil {
84-
return nil, err
84+
return nil, errors.Wrap(err, "failed to get enabled linters")
8585
}
8686

8787
return &Runner{
@@ -103,7 +103,7 @@ func NewRunner(cfg *config.Config, log logutils.Log, goenv *goutil.Env,
103103

104104
excludeProcessor,
105105
excludeRulesProcessor,
106-
processors.NewNolint(log.Child("nolint"), dbManager, lcs),
106+
processors.NewNolint(log.Child("nolint"), dbManager, enabledLinters),
107107

108108
processors.NewUniqByLine(cfg),
109109
processors.NewDiff(icfg.Diff, icfg.DiffFromRevision, icfg.DiffPatchFilePath),
@@ -131,14 +131,17 @@ func (r *Runner) runLinterSafe(ctx context.Context, lintCtx *linter.Context,
131131
}
132132
}()
133133

134-
specificLintCtx := *lintCtx
135-
specificLintCtx.Log = r.Log.Child(lc.Name())
134+
issues, err := lc.Linter.Run(ctx, lintCtx)
135+
136+
if lc.DoesChangeTypes {
137+
// Packages in lintCtx might be dirty due to the last analysis,
138+
// which affects to the next analysis.
139+
// To avoid this issue, we clear type information from the packages.
140+
// See https://github.com/golangci/golangci-lint/pull/944.
141+
// Currently DoesChangeTypes is true only for `unused`.
142+
lintCtx.ClearTypesInPackages()
143+
}
136144

137-
// Packages in lintCtx might be dirty due to the last analysis,
138-
// which affects to the next analysis.
139-
// To avoid this issue, we clear type information from the packages.
140-
specificLintCtx.ClearTypesInPackages()
141-
issues, err := lc.Linter.Run(ctx, &specificLintCtx)
142145
if err != nil {
143146
return nil, err
144147
}

0 commit comments

Comments
 (0)