From 987751cbe39f1ca694a9a7b4d5c7637d06dadbdf Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Wed, 10 Mar 2021 11:33:01 +0100 Subject: [PATCH] revive: the default configuration is only applied when no dedicated configuration. --- pkg/golinters/revive.go | 25 ++++++++++++++----------- test/testdata/configs/revive.yml | 4 +--- test/testdata/revive.go | 21 +++++++++++++++++++-- test/testdata/revive_default.go | 29 +++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+), 16 deletions(-) create mode 100644 test/testdata/revive_default.go diff --git a/pkg/golinters/revive.go b/pkg/golinters/revive.go index 0420731fd395..6622aab3db57 100644 --- a/pkg/golinters/revive.go +++ b/pkg/golinters/revive.go @@ -6,6 +6,7 @@ import ( "fmt" "go/token" "io/ioutil" + "reflect" "github.com/BurntSushi/toml" "github.com/mgechev/dots" @@ -136,20 +137,22 @@ func NewRevive(cfg *config.ReviveSettings) *goanalysis.Linter { // https://github.com/golangci/golangci-lint/issues/1745 // https://github.com/mgechev/revive/blob/389ba853b0b3587f0c3b71b5f0c61ea4e23928ec/config/config.go#L155 func getReviveConfig(cfg *config.ReviveSettings) (*lint.Config, error) { - rawRoot := createConfigMap(cfg) - - buf := bytes.NewBuffer(nil) + conf := defaultConfig() - err := toml.NewEncoder(buf).Encode(rawRoot) - if err != nil { - return nil, err - } + if !reflect.DeepEqual(cfg, &config.ReviveSettings{}) { + rawRoot := createConfigMap(cfg) + buf := bytes.NewBuffer(nil) - conf := defaultConfig() + err := toml.NewEncoder(buf).Encode(rawRoot) + if err != nil { + return nil, err + } - _, err = toml.DecodeReader(buf, conf) - if err != nil { - return nil, err + conf = &lint.Config{} + _, err = toml.DecodeReader(buf, conf) + if err != nil { + return nil, err + } } normalizeConfig(conf) diff --git a/test/testdata/configs/revive.yml b/test/testdata/configs/revive.yml index 84ee90e9fe4e..acbcd18e46ae 100644 --- a/test/testdata/configs/revive.yml +++ b/test/testdata/configs/revive.yml @@ -3,12 +3,10 @@ linters-settings: ignore-generated-header: true severity: warning rules: - - name: indent-error-flow - severity: warning - name: cognitive-complexity arguments: [ 7 ] - name: line-length-limit - arguments: [ 110 ] + arguments: [ 130 ] - name: function-result-limit arguments: [ 3 ] - name: argument-limit diff --git a/test/testdata/revive.go b/test/testdata/revive.go index 83e3d18d3c7e..ce6a396e7b14 100644 --- a/test/testdata/revive.go +++ b/test/testdata/revive.go @@ -2,12 +2,29 @@ //config_path: testdata/configs/revive.yml package testdata -import "time" +import ( + "net/http" + "time" +) func testRevive(t *time.Duration) error { if t == nil { return nil - } else { // ERROR "indent-error-flow: if block ends with a return statement, .*" + } else { return nil } } + +func testReviveComplexity(s string) { // ERROR "cyclomatic: function testReviveComplexity has cyclomatic complexity 22" + if s == http.MethodGet || s == "2" || s == "3" || s == "4" || s == "5" || s == "6" || s == "7" { + return + } + + if s == "1" || s == "2" || s == "3" || s == "4" || s == "5" || s == "6" || s == "7" { + return + } + + if s == "1" || s == "2" || s == "3" || s == "4" || s == "5" || s == "6" || s == "7" { + return + } +} diff --git a/test/testdata/revive_default.go b/test/testdata/revive_default.go new file mode 100644 index 000000000000..dff44f881a77 --- /dev/null +++ b/test/testdata/revive_default.go @@ -0,0 +1,29 @@ +//args: -Erevive +package testdata + +import ( + "net/http" + "time" +) + +func testReviveDefault(t *time.Duration) error { + if t == nil { + return nil + } else { // ERROR "indent-error-flow: if block ends with a return statement, .*" + return nil + } +} + +func testReviveComplexityDefault(s string) { + if s == http.MethodGet || s == "2" || s == "3" || s == "4" || s == "5" || s == "6" || s == "7" { + return + } + + if s == "1" || s == "2" || s == "3" || s == "4" || s == "5" || s == "6" || s == "7" { + return + } + + if s == "1" || s == "2" || s == "3" || s == "4" || s == "5" || s == "6" || s == "7" { + return + } +}