From d92f14dfd01c5952f8dee780e6f3d12820c8b58e Mon Sep 17 00:00:00 2001 From: Oleksandr Redko Date: Sat, 26 Oct 2024 12:55:59 +0300 Subject: [PATCH] Set 0 to disable the rule --- RULES_DESCRIPTIONS.md | 6 +- rule/file-length-limit.go | 27 +- test/file-length-limit_test.go | 8 +- testdata/file-length-limit-default.go | 1001 ------------------------ testdata/file-length-limit-disabled.go | 8 + 5 files changed, 36 insertions(+), 1014 deletions(-) delete mode 100644 testdata/file-length-limit-default.go create mode 100644 testdata/file-length-limit-disabled.go diff --git a/RULES_DESCRIPTIONS.md b/RULES_DESCRIPTIONS.md index 4d7b51f42..3ef2acdb9 100644 --- a/RULES_DESCRIPTIONS.md +++ b/RULES_DESCRIPTIONS.md @@ -508,9 +508,9 @@ _Description_: This rule enforces a maximum number of lines per file, in order t _Configuration_: -* `max` (int) a maximum number of lines in a file (default `1000`) -* `skipComments` (bool) if true ignore and do not count lines containing just comments (default `false`) -* `skipBlankLines` (bool) if true ignore and do not count lines made up purely of whitespace (default `false`) +* `max` (int) a maximum number of lines in a file. Must be non-negative integers. 0 means the rule is disabled (default `0`); +* `skipComments` (bool) if true ignore and do not count lines containing just comments (default `false`); +* `skipBlankLines` (bool) if true ignore and do not count lines made up purely of whitespace (default `false`). Example: diff --git a/rule/file-length-limit.go b/rule/file-length-limit.go index fdc014f89..f1826ee19 100644 --- a/rule/file-length-limit.go +++ b/rule/file-length-limit.go @@ -12,12 +12,13 @@ import ( "github.com/mgechev/revive/lint" ) -const defaultFileLengthLimitMax = 1000 - // FileLengthLimitRule lints the number of lines in a file. type FileLengthLimitRule struct { - max int - skipComments bool + // max is the maximum number of lines allowed in a file. 0 means the rule is disabled. + max int + // skipComments indicates whether to skip comment lines when counting lines. + skipComments bool + // skipBlankLines indicates whether to skip blank lines when counting lines. skipBlankLines bool sync.Mutex } @@ -26,6 +27,11 @@ type FileLengthLimitRule struct { func (r *FileLengthLimitRule) Apply(file *lint.File, arguments lint.Arguments) []lint.Failure { r.configure(arguments) + if r.max <= 0 { + // when max is negative or 0 the rule is disabled + return nil + } + all := 0 blank := 0 scanner := bufio.NewScanner(bytes.NewReader(file.Content())) @@ -72,9 +78,12 @@ func (r *FileLengthLimitRule) configure(arguments lint.Arguments) { r.Lock() defer r.Unlock() - if len(arguments) == 0 { - r.max = defaultFileLengthLimitMax - return + if r.max != 0 { + return // already configured + } + + if len(arguments) < 1 { + return // use default } argKV, ok := arguments[0].(map[string]any) @@ -85,8 +94,8 @@ func (r *FileLengthLimitRule) configure(arguments lint.Arguments) { switch k { case "max": maxLines, ok := v.(int64) - if !ok || maxLines < 1 { - panic(fmt.Sprintf(`invalid configuration value for max lines in "file-length-limit" rule; need int64 but got %T`, arguments[0])) + if !ok || maxLines < 0 { + panic(fmt.Sprintf(`invalid configuration value for max lines in "file-length-limit" rule; need positive int64 but got %T`, arguments[0])) } r.max = int(maxLines) case "skipComments": diff --git a/test/file-length-limit_test.go b/test/file-length-limit_test.go index 7eefa9e89..c000daa44 100644 --- a/test/file-length-limit_test.go +++ b/test/file-length-limit_test.go @@ -8,9 +8,15 @@ import ( ) func TestFileLengthLimit(t *testing.T) { - testRule(t, "file-length-limit-default", &rule.FileLengthLimitRule{}, &lint.RuleConfig{ + testRule(t, "file-length-limit-disabled", &rule.FileLengthLimitRule{}, &lint.RuleConfig{ Arguments: []any{}, }) + testRule(t, "file-length-limit-disabled", &rule.FileLengthLimitRule{}, &lint.RuleConfig{ + Arguments: []any{map[string]any{"max": int64(0)}}, + }) + testRule(t, "file-length-limit-disabled", &rule.FileLengthLimitRule{}, &lint.RuleConfig{ + Arguments: []any{map[string]any{"skipComments": true, "skipBlankLines": true}}, + }) testRule(t, "file-length-limit-9", &rule.FileLengthLimitRule{}, &lint.RuleConfig{ Arguments: []any{map[string]any{"max": int64(9)}}, }) diff --git a/testdata/file-length-limit-default.go b/testdata/file-length-limit-default.go deleted file mode 100644 index e3c7d480d..000000000 --- a/testdata/file-length-limit-default.go +++ /dev/null @@ -1,1001 +0,0 @@ -package fixtures - -import "fmt" - -// Foo is a function. -func Foo(a, b int) { - fmt.Println("Hello, world!") -} - -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// - -func Bar(a, b int) { - fmt.Println("Hello, world!") -} - -// MATCH /file length is 1001 lines, which exceeds the limit of 1000/ diff --git a/testdata/file-length-limit-disabled.go b/testdata/file-length-limit-disabled.go new file mode 100644 index 000000000..1066985b1 --- /dev/null +++ b/testdata/file-length-limit-disabled.go @@ -0,0 +1,8 @@ +package fixtures + +import "fmt" + +// Foo is a function. +func Foo(a, b int) { + fmt.Println("Hello, world!") +}