View Source
const (
	OutFormatJSON              = "json"
	OutFormatLineNumber        = "line-number"
	OutFormatColoredLineNumber = "colored-line-number"
	OutFormatTab               = "tab"
	OutFormatCheckstyle        = "checkstyle"
	OutFormatCodeClimate       = "code-climate"
	OutFormatJunitXML          = "junit-xml"
	OutFormatGithubActions     = "github-actions"


View Source
var DefaultExcludePatterns = []ExcludePattern{
		ID: "EXC0001",
		Pattern: "Error return value of .((os\\.)?std(out|err)\\..*|.*Close" +
			"|.*Flush|os\\.Remove(All)?|.*print(f|ln)?|os\\.(Un)?Setenv). is not checked",
		Linter: "errcheck",
		Why:    "Almost all programs ignore errors on these functions and in most cases it's ok",
		ID: "EXC0002",
		Pattern: "(comment on exported (method|function|type|const)|" +
			"should have( a package)? comment|comment should be of the form)",
		Linter: "golint",
		Why:    "Annoying issue about not having a comment. The rare codebase has such comments",
		ID:      "EXC0003",
		Pattern: "func name will be used as test\\.Test.* by other packages, and that stutters; consider calling this",
		Linter:  "golint",
		Why:     "False positive when tests are defined in package 'test'",
		ID:      "EXC0004",
		Pattern: "(possible misuse of unsafe.Pointer|should have signature)",
		Linter:  "govet",
		Why:     "Common false positives",
		ID:      "EXC0005",
		Pattern: "ineffective break statement. Did you mean to break out of the outer loop",
		Linter:  "staticcheck",
		Why:     "Developers tend to write in C-style with an explicit 'break' in a 'switch', so it's ok to ignore",
		ID:      "EXC0006",
		Pattern: "Use of unsafe calls should be audited",
		Linter:  "gosec",
		Why:     "Too many false-positives on 'unsafe' usage",
		ID:      "EXC0007",
		Pattern: "Subprocess launch(ed with variable|ing should be audited)",
		Linter:  "gosec",
		Why:     "Too many false-positives for parametrized shell calls",
		ID:      "EXC0008",
		Pattern: "(G104|G307)",
		Linter:  "gosec",
		Why:     "Duplicated errcheck checks",
		ID:      "EXC0009",
		Pattern: "(Expect directory permissions to be 0750 or less|Expect file permissions to be 0600 or less)",
		Linter:  "gosec",
		Why:     "Too many issues in popular repos",
		ID:      "EXC0010",
		Pattern: "Potential file inclusion via variable",
		Linter:  "gosec",
		Why:     "False positive is triggered by 'src, err := ioutil.ReadFile(filename)'",
		ID: "EXC0011",
		Pattern: "(comment on exported (method|function|type|const)|" +
			"should have( a package)? comment|comment should be of the form)",
		Linter: "stylecheck",
		Why:    "Annoying issue about not having a comment. The rare codebase has such comments",
		ID:      "EXC0012",
		Pattern: "exported (method|function|type|const) (.+) should have comment or be unexported",
		Linter:  "revive",
		Why:     "Annoying issue about not having a comment. The rare codebase has such comments",
		ID:      "EXC0013",
		Pattern: `package comment should be of the form "Package (.+) ..."`,
		Linter:  "revive",
		Why:     "Annoying issue about not having a comment. The rare codebase has such comments",


func GetDefaultExcludePatternsStrings

func GetDefaultExcludePatternsStrings() []string


type BaseRule

type BaseRule struct {
	Linters []string
	Path    string
	Text    string
	Source  string

func (BaseRule) Validate

func (b BaseRule) Validate(minConditionsCount int) error

type Config

type Config struct {
	Run Run

	Output Output

	LintersSettings LintersSettings `mapstructure:"linters-settings"`
	Linters         Linters
	Issues          Issues
	Severity        Severity
	Version         Version

	InternalCmdTest bool `mapstructure:"internal-cmd-test"` // Option is used only for testing golangci-lint command, don't use it
	InternalTest    bool // Option is used only for testing golangci-lint code, don't use it

func NewDefault

func NewDefault() *Config

type CustomLinterSettings

type CustomLinterSettings struct {
	Path        string
	Description string
	OriginalURL string `mapstructure:"original-url"`

type Cyclop

type Cyclop struct {
	MaxComplexity  int     `mapstructure:"max-complexity"`
	PackageAverage float64 `mapstructure:"package-average"`
	SkipTests      bool    `mapstructure:"skip-tests"`

type DepGuardSettings

type DepGuardSettings struct {
	ListType                 string `mapstructure:"list-type"`
	Packages                 []string
	IncludeGoRoot            bool              `mapstructure:"include-go-root"`
	PackagesWithErrorMessage map[string]string `mapstructure:"packages-with-error-message"`

type DogsledSettings

type DogsledSettings struct {
	MaxBlankIdentifiers int `mapstructure:"max-blank-identifiers"`

type DuplSettings

type DuplSettings struct {
	Threshold int

type ErrcheckSettings

type ErrcheckSettings struct {
	CheckTypeAssertions bool   `mapstructure:"check-type-assertions"`
	CheckAssignToBlank  bool   `mapstructure:"check-blank"`
	Ignore              string `mapstructure:"ignore"`
	Exclude             string `mapstructure:"exclude"`

type ErrorLintSettings

type ErrorLintSettings struct {
	Errorf     bool `mapstructure:"errorf"`
	Asserts    bool `mapstructure:"asserts"`
	Comparison bool `mapstructure:"comparison"`

type ExcludePattern

type ExcludePattern struct {
	ID      string
	Pattern string
	Linter  string
	Why     string

func GetExcludePatterns

func GetExcludePatterns(include []string) []ExcludePattern

type ExcludeRule

type ExcludeRule struct {
	BaseRule `mapstructure:",squash"`

func (ExcludeRule) Validate

func (e ExcludeRule) Validate() error

type ExhaustiveSettings

type ExhaustiveSettings struct {
	CheckGenerated             bool `mapstructure:"check-generated"`
	DefaultSignifiesExhaustive bool `mapstructure:"default-signifies-exhaustive"`

type ExhaustiveStructSettings

type ExhaustiveStructSettings struct {
	StructPatterns []string `mapstructure:"struct-patterns"`

type FileReader

type FileReader struct {
	// contains filtered or unexported fields

func NewFileReader

func NewFileReader(toCfg, commandLineCfg *Config, log logutils.Log) *FileReader

func (*FileReader) Read

func (r *FileReader) Read() error

type ForbidigoSettings

type ForbidigoSettings struct {
	Forbid               []string `mapstructure:"forbid"`
	ExcludeGodocExamples bool     `mapstructure:"exclude-godoc-examples"`

type FunlenSettings

type FunlenSettings struct {
	Lines      int
	Statements int

type GciSettings

type GciSettings struct {
	LocalPrefixes string `mapstructure:"local-prefixes"`

type GoConstSettings

type GoConstSettings struct {
	MatchWithConstants  bool `mapstructure:"match-constant"`
	MinStringLen        int  `mapstructure:"min-len"`
	MinOccurrencesCount int  `mapstructure:"min-occurrences"`
	ParseNumbers        bool `mapstructure:"numbers"`
	NumberMin           int  `mapstructure:"min"`
	NumberMax           int  `mapstructure:"max"`
	IgnoreCalls         bool `mapstructure:"ignore-calls"`

type GoCycloSettings

type GoCycloSettings struct {
	MinComplexity int `mapstructure:"min-complexity"`

type GoFmtSettings

type GoFmtSettings struct {
	Simplify bool

type GoHeaderSettings

type GoHeaderSettings struct {
	Values       map[string]map[string]string `mapstructure:"values"`
	Template     string                       `mapstructure:"template"`
	TemplatePath string                       `mapstructure:"template-path"`

type GoImportsSettings

type GoImportsSettings struct {
	LocalPrefixes string `mapstructure:"local-prefixes"`

type GoLintSettings

type GoLintSettings struct {
	MinConfidence float64 `mapstructure:"min-confidence"`

type GoMndSettings

type GoMndSettings struct {
	Settings map[string]map[string]interface{}

type GoModDirectivesSettings

type GoModDirectivesSettings struct {
	ReplaceAllowList          []string `mapstructure:"replace-allow-list"`
	ReplaceLocal              bool     `mapstructure:"replace-local"`
	ExcludeForbidden          bool     `mapstructure:"exclude-forbidden"`
	RetractAllowNoExplanation bool     `mapstructure:"retract-allow-no-explanation"`

type GoModGuardSettings

type GoModGuardSettings struct {
	Allowed struct {
		Modules []string `mapstructure:"modules"`
		Domains []string `mapstructure:"domains"`
	} `mapstructure:"allowed"`
	Blocked struct {
		Modules []map[string]struct {
			Recommendations []string `mapstructure:"recommendations"`
			Reason          string   `mapstructure:"reason"`
		} `mapstructure:"modules"`
		Versions []map[string]struct {
			Version string `mapstructure:"version"`
			Reason  string `mapstructure:"reason"`
		} `mapstructure:"versions"`
		LocalReplaceDirectives bool `mapstructure:"local_replace_directives"`
	} `mapstructure:"blocked"`

type GoSecSettings

type GoSecSettings struct {
	Includes []string
	Excludes []string
	Config   map[string]interface{} `mapstructure:"config"`

type GocognitSettings

type GocognitSettings struct {
	MinComplexity int `mapstructure:"min-complexity"`

type GocriticCheckSettings

type GocriticCheckSettings map[string]interface{}

type GocriticSettings

type GocriticSettings struct {
	EnabledChecks    []string                         `mapstructure:"enabled-checks"`
	DisabledChecks   []string                         `mapstructure:"disabled-checks"`
	EnabledTags      []string                         `mapstructure:"enabled-tags"`
	DisabledTags     []string                         `mapstructure:"disabled-tags"`
	SettingsPerCheck map[string]GocriticCheckSettings `mapstructure:"settings"`
	// contains filtered or unexported fields

func (*GocriticSettings) GetLowercasedParams

func (s *GocriticSettings) GetLowercasedParams() map[string]GocriticCheckSettings

func (*GocriticSettings) InferEnabledChecks

func (s *GocriticSettings) InferEnabledChecks(log logutils.Log)

func (*GocriticSettings) IsCheckEnabled

func (s *GocriticSettings) IsCheckEnabled(name string) bool

func (*GocriticSettings) Validate

func (s *GocriticSettings) Validate(log logutils.Log) error

type GodotSettings

type GodotSettings struct {
	Scope   string   `mapstructure:"scope"`
	Exclude []string `mapstructure:"exclude"`
	Capital bool     `mapstructure:"capital"`

	// Deprecated: use `Scope` instead
	CheckAll bool `mapstructure:"check-all"`

type GodoxSettings

type GodoxSettings struct {
	Keywords []string

type GofumptSettings

type GofumptSettings struct {
	ExtraRules bool `mapstructure:"extra-rules"`

type GovetSettings

type GovetSettings struct {
	CheckShadowing bool `mapstructure:"check-shadowing"`
	Settings       map[string]map[string]interface{}

	Enable     []string
	Disable    []string
	EnableAll  bool `mapstructure:"enable-all"`
	DisableAll bool `mapstructure:"disable-all"`

func (GovetSettings) Validate

func (cfg GovetSettings) Validate() error

type IfshortSettings

type IfshortSettings struct {
	MaxDeclLines int `mapstructure:"max-decl-lines"`
	MaxDeclChars int `mapstructure:"max-decl-chars"`

type ImportAsAlias

type ImportAsAlias struct {
	Pkg   string
	Alias string

type ImportAsSettings

type ImportAsSettings struct {
	Alias       []ImportAsAlias
	NoUnaliased bool `mapstructure:"no-unaliased"`

type Issues

type Issues struct {
	IncludeDefaultExcludes []string      `mapstructure:"include"`
	ExcludeCaseSensitive   bool          `mapstructure:"exclude-case-sensitive"`
	ExcludePatterns        []string      `mapstructure:"exclude"`
	ExcludeRules           []ExcludeRule `mapstructure:"exclude-rules"`
	UseDefaultExcludes     bool          `mapstructure:"exclude-use-default"`

	MaxIssuesPerLinter int `mapstructure:"max-issues-per-linter"`
	MaxSameIssues      int `mapstructure:"max-same-issues"`

	DiffFromRevision  string `mapstructure:"new-from-rev"`
	DiffPatchFilePath string `mapstructure:"new-from-patch"`
	Diff              bool   `mapstructure:"new"`

	NeedFix bool `mapstructure:"fix"`

type Linters

type Linters struct {
	Enable     []string
	Disable    []string
	EnableAll  bool `mapstructure:"enable-all"`
	DisableAll bool `mapstructure:"disable-all"`
	Fast       bool

	Presets []string

type LllSettings

type LllSettings struct {
	LineLength int `mapstructure:"line-length"`
	TabWidth   int `mapstructure:"tab-width"`

type MakezeroSettings

type MakezeroSettings struct {
	Always bool

type MalignedSettings

type MalignedSettings struct {
	SuggestNewOrder bool `mapstructure:"suggest-new"`

type MisspellSettings

type MisspellSettings struct {
	Locale      string
	IgnoreWords []string `mapstructure:"ignore-words"`

type NakedretSettings

type NakedretSettings struct {
	MaxFuncLines int `mapstructure:"max-func-lines"`

type NestifSettings

type NestifSettings struct {
	MinComplexity int `mapstructure:"min-complexity"`

type NoLintLintSettings

type NoLintLintSettings struct {
	RequireExplanation bool     `mapstructure:"require-explanation"`
	AllowLeadingSpace  bool     `mapstructure:"allow-leading-space"`
	RequireSpecific    bool     `mapstructure:"require-specific"`
	AllowNoExplanation []string `mapstructure:"allow-no-explanation"`
	AllowUnused        bool     `mapstructure:"allow-unused"`

type Output

type Output struct {
	Format              string
	Color               string
	PrintIssuedLine     bool   `mapstructure:"print-issued-lines"`
	PrintLinterName     bool   `mapstructure:"print-linter-name"`
	UniqByLine          bool   `mapstructure:"uniq-by-line"`
	SortResults         bool   `mapstructure:"sort-results"`
	PrintWelcomeMessage bool   `mapstructure:"print-welcome"`
	PathPrefix          string `mapstructure:"path-prefix"`

type PreallocSettings

type PreallocSettings struct {
	Simple     bool
	RangeLoops bool `mapstructure:"range-loops"`
	ForLoops   bool `mapstructure:"for-loops"`

type PredeclaredSettings

type PredeclaredSettings struct {
	Ignore    string `mapstructure:"ignore"`
	Qualified bool   `mapstructure:"q"`

type PromlinterSettings

type PromlinterSettings struct {
	Strict          bool     `mapstructure:"strict"`
	DisabledLinters []string `mapstructure:"disabled-linters"`

type ReviveSettings

type ReviveSettings struct {
	IgnoreGeneratedHeader bool `mapstructure:"ignore-generated-header"`
	Confidence            float64
	Severity              string
	Rules                 []struct {
		Name      string
		Arguments []interface{}
		Severity  string
	ErrorCode   int `mapstructure:"error-code"`
	WarningCode int `mapstructure:"warning-code"`
	Directives  []struct {
		Name     string
		Severity string

type RowsErrCheckSettings

type RowsErrCheckSettings struct {
	Packages []string

type Run

type Run struct {
	IsVerbose           bool `mapstructure:"verbose"`
	Silent              bool
	CPUProfilePath      string
	MemProfilePath      string
	TracePath           string
	Concurrency         int
	PrintResourcesUsage bool `mapstructure:"print-resources-usage"`

	Config   string
	NoConfig bool

	Args []string

	BuildTags           []string `mapstructure:"build-tags"`
	ModulesDownloadMode string   `mapstructure:"modules-download-mode"`

	ExitCodeIfIssuesFound int  `mapstructure:"issues-exit-code"`
	AnalyzeTests          bool `mapstructure:"tests"`

	// Deprecated: Deadline exists for historical compatibility
	// and should not be used. To set run timeout use Timeout instead.
	Deadline time.Duration
	Timeout  time.Duration

	PrintVersion       bool
	SkipFiles          []string `mapstructure:"skip-files"`
	SkipDirs           []string `mapstructure:"skip-dirs"`
	UseDefaultSkipDirs bool     `mapstructure:"skip-dirs-use-default"`

	AllowParallelRunners bool `mapstructure:"allow-parallel-runners"`
	AllowSerialRunners   bool `mapstructure:"allow-serial-runners"`

type Severity

type Severity struct {
	Default       string         `mapstructure:"default-severity"`
	CaseSensitive bool           `mapstructure:"case-sensitive"`
	Rules         []SeverityRule `mapstructure:"rules"`

type SeverityRule

type SeverityRule struct {
	BaseRule `mapstructure:",squash"`
	Severity string

func (*SeverityRule) Validate

func (s *SeverityRule) Validate() error

type StaticCheckSettings

type StaticCheckSettings struct {
	GoVersion string `mapstructure:"go"`

type StructCheckSettings

type StructCheckSettings struct {
	CheckExportedFields bool `mapstructure:"exported-fields"`

type TagliatelleSettings

type TagliatelleSettings struct {
	Case struct {
		Rules        map[string]string
		UseFieldName bool `mapstructure:"use-field-name"`

type TestpackageSettings

type TestpackageSettings struct {
	SkipRegexp string `mapstructure:"skip-regexp"`

type ThelperSettings

type ThelperSettings struct {
	Test struct {
		First bool `mapstructure:"first"`
		Name  bool `mapstructure:"name"`
		Begin bool `mapstructure:"begin"`
	} `mapstructure:"test"`
	Benchmark struct {
		First bool `mapstructure:"first"`
		Name  bool `mapstructure:"name"`
		Begin bool `mapstructure:"begin"`
	} `mapstructure:"benchmark"`
	TB struct {
		First bool `mapstructure:"first"`
		Name  bool `mapstructure:"name"`
		Begin bool `mapstructure:"begin"`
	} `mapstructure:"tb"`

type UnparamSettings

type UnparamSettings struct {
	CheckExported bool `mapstructure:"check-exported"`
	Algo          string

type VarCheckSettings

type VarCheckSettings struct {
	CheckExportedFields bool `mapstructure:"exported-fields"`

type Version

type Version struct {
	Format string `mapstructure:"format"`

type WSLSettings

type WSLSettings struct {
	StrictAppend                     bool `mapstructure:"strict-append"`
	AllowAssignAndCallCuddle         bool `mapstructure:"allow-assign-and-call"`
	AllowAssignAndAnythingCuddle     bool `mapstructure:"allow-assign-and-anything"`
	AllowMultiLineAssignCuddle       bool `mapstructure:"allow-multiline-assign"`
	AllowCuddleDeclaration           bool `mapstructure:"allow-cuddle-declarations"`
	AllowTrailingComment             bool `mapstructure:"allow-trailing-comment"`
	AllowSeparatedLeadingComment     bool `mapstructure:"allow-separated-leading-comment"`
	ForceCuddleErrCheckAndAssign     bool `mapstructure:"force-err-cuddling"`
	ForceExclusiveShortDeclarations  bool `mapstructure:"force-short-decl-cuddling"`
	ForceCaseTrailingWhitespaceLimit int  `mapstructure:"force-case-trailing-whitespace"`

type WhitespaceSettings

type WhitespaceSettings struct {
	MultiIf   bool `mapstructure:"multi-if"`
	MultiFunc bool `mapstructure:"multi-func"`

type WrapcheckSettings

type WrapcheckSettings struct {
	IgnoreSigs []string `mapstructure:"ignoreSigs"`