github.com/nozzle/golangci-lint@v1.49.0-nz3/pkg/golinters/importas.go (about)

     1  package golinters
     2  
     3  import (
     4  	"fmt"
     5  	"strconv"
     6  
     7  	"github.com/julz/importas" //nolint:misspell
     8  	"golang.org/x/tools/go/analysis"
     9  
    10  	"github.com/golangci/golangci-lint/pkg/config"
    11  	"github.com/golangci/golangci-lint/pkg/golinters/goanalysis"
    12  	"github.com/golangci/golangci-lint/pkg/lint/linter"
    13  )
    14  
    15  func NewImportAs(settings *config.ImportAsSettings) *goanalysis.Linter {
    16  	analyzer := importas.Analyzer
    17  
    18  	return goanalysis.NewLinter(
    19  		analyzer.Name,
    20  		analyzer.Doc,
    21  		[]*analysis.Analyzer{analyzer},
    22  		nil,
    23  	).WithContextSetter(func(lintCtx *linter.Context) {
    24  		if settings == nil {
    25  			return
    26  		}
    27  		if len(settings.Alias) == 0 {
    28  			lintCtx.Log.Infof("importas settings found, but no aliases listed. List aliases under alias: key.") //nolint:misspell
    29  		}
    30  
    31  		if err := analyzer.Flags.Set("no-unaliased", strconv.FormatBool(settings.NoUnaliased)); err != nil {
    32  			lintCtx.Log.Errorf("failed to parse configuration: %v", err)
    33  		}
    34  
    35  		if err := analyzer.Flags.Set("no-extra-aliases", strconv.FormatBool(settings.NoExtraAliases)); err != nil {
    36  			lintCtx.Log.Errorf("failed to parse configuration: %v", err)
    37  		}
    38  
    39  		for _, a := range settings.Alias {
    40  			if a.Pkg == "" {
    41  				lintCtx.Log.Errorf("invalid configuration, empty package: pkg=%s alias=%s", a.Pkg, a.Alias)
    42  				continue
    43  			}
    44  
    45  			err := analyzer.Flags.Set("alias", fmt.Sprintf("%s:%s", a.Pkg, a.Alias))
    46  			if err != nil {
    47  				lintCtx.Log.Errorf("failed to parse configuration: %v", err)
    48  			}
    49  		}
    50  	}).WithLoadMode(goanalysis.LoadModeTypesInfo)
    51  }