@@ -3,15 +3,18 @@ package lint
33import (
44 "context"
55 "fmt"
6+ "go/ast"
67 "go/build"
78 "go/parser"
9+ "go/token"
810 "os"
911 "path/filepath"
1012 "strings"
1113 "time"
1214
1315 "github.com/golangci/golangci-lint/pkg/goutils"
1416 "github.com/golangci/golangci-lint/pkg/logutils"
17+ "github.com/golangci/golangci-lint/pkg/result/processors"
1518
1619 "github.com/golangci/go-tools/ssa"
1720 "github.com/golangci/go-tools/ssa/ssautil"
@@ -258,6 +261,30 @@ func separateNotCompilingPackages(lintCtx *linter.Context) {
258261 }
259262}
260263
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+
261288//nolint:gocyclo
262289func LoadContext (ctx context.Context , linters []linter.Config , cfg * config.Config ,
263290 log logutils.Log ) (* linter.Context , error ) {
@@ -298,6 +325,10 @@ func LoadContext(ctx context.Context, linters []linter.Config, cfg *config.Confi
298325 ssaProg = buildSSAProgram (ctx , prog , log )
299326 }
300327
328+ if prog != nil {
329+ removeFakePackages (prog )
330+ }
331+
301332 astLog := log .Child ("astcache" )
302333 var astCache * astcache.Cache
303334 if prog != nil {
0 commit comments