@@ -3,15 +3,18 @@ package lint
3
3
import (
4
4
"context"
5
5
"fmt"
6
+ "go/ast"
6
7
"go/build"
7
8
"go/parser"
9
+ "go/token"
8
10
"os"
9
11
"path/filepath"
10
12
"strings"
11
13
"time"
12
14
13
15
"github.com/golangci/golangci-lint/pkg/goutils"
14
16
"github.com/golangci/golangci-lint/pkg/logutils"
17
+ "github.com/golangci/golangci-lint/pkg/result/processors"
15
18
16
19
"github.com/golangci/go-tools/ssa"
17
20
"github.com/golangci/go-tools/ssa/ssautil"
@@ -258,6 +261,30 @@ func separateNotCompilingPackages(lintCtx *linter.Context) {
258
261
}
259
262
}
260
263
264
+ func removeFakePkgFiles (info * loader.PackageInfo , fset * token.FileSet ) {
265
+ newFiles := make ([]* ast.File , 0 , len (info .Files ))
266
+ for _ , f := range info .Files {
267
+ if ! processors .IsCgoFilename (fset .Position (f .Pos ()).Filename ) {
268
+ newFiles = append (newFiles , f )
269
+ }
270
+ }
271
+ info .Files = newFiles
272
+ }
273
+
274
+ func removeFakePackages (prog * loader.Program ) {
275
+ if prog .Created != nil {
276
+ for _ , info := range prog .Created {
277
+ removeFakePkgFiles (info , prog .Fset )
278
+ }
279
+ }
280
+
281
+ if prog .Imported != nil {
282
+ for _ , info := range prog .Imported {
283
+ removeFakePkgFiles (info , prog .Fset )
284
+ }
285
+ }
286
+ }
287
+
261
288
//nolint:gocyclo
262
289
func LoadContext (ctx context.Context , linters []linter.Config , cfg * config.Config ,
263
290
log logutils.Log ) (* linter.Context , error ) {
@@ -298,6 +325,10 @@ func LoadContext(ctx context.Context, linters []linter.Config, cfg *config.Confi
298
325
ssaProg = buildSSAProgram (ctx , prog , log )
299
326
}
300
327
328
+ if prog != nil {
329
+ removeFakePackages (prog )
330
+ }
331
+
301
332
astLog := log .Child ("astcache" )
302
333
var astCache * astcache.Cache
303
334
if prog != nil {
0 commit comments