aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/mgechev/revive/config
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2021-02-22 20:37:25 +0100
committerDmitry Vyukov <dvyukov@google.com>2021-02-22 21:02:12 +0100
commitfcc6d71be2c3ce7d9305c04fc2e87af554571bac (patch)
treeb01dbb3d1e2988e28ea158d2d543d603ec0b9569 /vendor/github.com/mgechev/revive/config
parent8f23c528ad5a943b9ffec5dcaf332fd0f614006e (diff)
go.mod: update golangci-lint to v1.37
Diffstat (limited to 'vendor/github.com/mgechev/revive/config')
-rw-r--r--vendor/github.com/mgechev/revive/config/config.go192
1 files changed, 192 insertions, 0 deletions
diff --git a/vendor/github.com/mgechev/revive/config/config.go b/vendor/github.com/mgechev/revive/config/config.go
new file mode 100644
index 000000000..1357bc744
--- /dev/null
+++ b/vendor/github.com/mgechev/revive/config/config.go
@@ -0,0 +1,192 @@
+package config
+
+import (
+ "errors"
+ "fmt"
+ "io/ioutil"
+
+ "github.com/mgechev/revive/formatter"
+
+ "github.com/BurntSushi/toml"
+ "github.com/mgechev/revive/lint"
+ "github.com/mgechev/revive/rule"
+)
+
+var defaultRules = []lint.Rule{
+ &rule.VarDeclarationsRule{},
+ &rule.PackageCommentsRule{},
+ &rule.DotImportsRule{},
+ &rule.BlankImportsRule{},
+ &rule.ExportedRule{},
+ &rule.VarNamingRule{},
+ &rule.IndentErrorFlowRule{},
+ &rule.IfReturnRule{},
+ &rule.RangeRule{},
+ &rule.ErrorfRule{},
+ &rule.ErrorNamingRule{},
+ &rule.ErrorStringsRule{},
+ &rule.ReceiverNamingRule{},
+ &rule.IncrementDecrementRule{},
+ &rule.ErrorReturnRule{},
+ &rule.UnexportedReturnRule{},
+ &rule.TimeNamingRule{},
+ &rule.ContextKeysType{},
+ &rule.ContextAsArgumentRule{},
+}
+
+var allRules = append([]lint.Rule{
+ &rule.ArgumentsLimitRule{},
+ &rule.CyclomaticRule{},
+ &rule.FileHeaderRule{},
+ &rule.EmptyBlockRule{},
+ &rule.SuperfluousElseRule{},
+ &rule.ConfusingNamingRule{},
+ &rule.GetReturnRule{},
+ &rule.ModifiesParamRule{},
+ &rule.ConfusingResultsRule{},
+ &rule.DeepExitRule{},
+ &rule.UnusedParamRule{},
+ &rule.UnreachableCodeRule{},
+ &rule.AddConstantRule{},
+ &rule.FlagParamRule{},
+ &rule.UnnecessaryStmtRule{},
+ &rule.StructTagRule{},
+ &rule.ModifiesValRecRule{},
+ &rule.ConstantLogicalExprRule{},
+ &rule.BoolLiteralRule{},
+ &rule.RedefinesBuiltinIDRule{},
+ &rule.ImportsBlacklistRule{},
+ &rule.FunctionResultsLimitRule{},
+ &rule.MaxPublicStructsRule{},
+ &rule.RangeValInClosureRule{},
+ &rule.RangeValAddress{},
+ &rule.WaitGroupByValueRule{},
+ &rule.AtomicRule{},
+ &rule.EmptyLinesRule{},
+ &rule.LineLengthLimitRule{},
+ &rule.CallToGCRule{},
+ &rule.DuplicatedImportsRule{},
+ &rule.ImportShadowingRule{},
+ &rule.BareReturnRule{},
+ &rule.UnusedReceiverRule{},
+ &rule.UnhandledErrorRule{},
+ &rule.CognitiveComplexityRule{},
+ &rule.StringOfIntRule{},
+ &rule.EarlyReturnRule{},
+ &rule.UnconditionalRecursionRule{},
+ &rule.IdenticalBranchesRule{},
+ &rule.DeferRule{},
+ &rule.UnexportedNamingRule{},
+}, defaultRules...)
+
+var allFormatters = []lint.Formatter{
+ &formatter.Stylish{},
+ &formatter.Friendly{},
+ &formatter.JSON{},
+ &formatter.NDJSON{},
+ &formatter.Default{},
+ &formatter.Unix{},
+ &formatter.Checkstyle{},
+ &formatter.Plain{},
+}
+
+func getFormatters() map[string]lint.Formatter {
+ result := map[string]lint.Formatter{}
+ for _, f := range allFormatters {
+ result[f.Name()] = f
+ }
+ return result
+}
+
+// GetLintingRules yields the linting rules activated in the configuration
+func GetLintingRules(config *lint.Config) ([]lint.Rule, error) {
+ rulesMap := map[string]lint.Rule{}
+ for _, r := range allRules {
+ rulesMap[r.Name()] = r
+ }
+
+ lintingRules := []lint.Rule{}
+ for name := range config.Rules {
+ rule, ok := rulesMap[name]
+ if !ok {
+ return nil, fmt.Errorf("cannot find rule: %s", name)
+ }
+ lintingRules = append(lintingRules, rule)
+ }
+
+ return lintingRules, nil
+}
+
+func parseConfig(path string) (*lint.Config, error) {
+ config := &lint.Config{}
+ file, err := ioutil.ReadFile(path)
+ if err != nil {
+ return nil, errors.New("cannot read the config file")
+ }
+ _, err = toml.Decode(string(file), config)
+ if err != nil {
+ return nil, fmt.Errorf("cannot parse the config file: %v", err)
+ }
+ return config, nil
+}
+
+func normalizeConfig(config *lint.Config) {
+ if config.Confidence == 0 {
+ config.Confidence = 0.8
+ }
+ severity := config.Severity
+ if severity != "" {
+ for k, v := range config.Rules {
+ if v.Severity == "" {
+ v.Severity = severity
+ }
+ config.Rules[k] = v
+ }
+ for k, v := range config.Directives {
+ if v.Severity == "" {
+ v.Severity = severity
+ }
+ config.Directives[k] = v
+ }
+ }
+}
+
+// GetConfig yields the configuration
+func GetConfig(configPath string) (*lint.Config, error) {
+ config := defaultConfig()
+ if configPath != "" {
+ var err error
+ config, err = parseConfig(configPath)
+ if err != nil {
+ return nil, err
+ }
+ }
+ normalizeConfig(config)
+ return config, nil
+}
+
+// GetFormatter yields the formatter for lint failures
+func GetFormatter(formatterName string) (lint.Formatter, error) {
+ formatters := getFormatters()
+ formatter := formatters["default"]
+ if formatterName != "" {
+ f, ok := formatters[formatterName]
+ if !ok {
+ return nil, fmt.Errorf("unknown formatter %v", formatterName)
+ }
+ formatter = f
+ }
+ return formatter, nil
+}
+
+func defaultConfig() *lint.Config {
+ defaultConfig := lint.Config{
+ Confidence: 0.0,
+ Severity: lint.SeverityWarning,
+ Rules: map[string]lint.RuleConfig{},
+ }
+ for _, r := range defaultRules {
+ defaultConfig.Rules[r.Name()] = lint.RuleConfig{}
+ }
+ return &defaultConfig
+}