1
0
mirror of https://github.com/mgechev/revive.git synced 2025-02-07 13:31:42 +02:00

test: add default case when no arguments provided to a rule (#1140)

This commit is contained in:
Oleksandr Redko 2024-11-20 21:19:17 +02:00 committed by GitHub
parent 0e8acea6ce
commit 19834d40a4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
24 changed files with 571 additions and 6 deletions

View File

@ -7,6 +7,10 @@ import (
"github.com/mgechev/revive/rule"
)
func TestArgumentLimitDefault(t *testing.T) {
testRule(t, "argument_limit_default", &rule.ArgumentsLimitRule{}, &lint.RuleConfig{})
}
func TestArgumentLimit(t *testing.T) {
testRule(t, "argument_limit", &rule.ArgumentsLimitRule{}, &lint.RuleConfig{
Arguments: []any{int64(3)},

View File

@ -7,6 +7,10 @@ import (
"github.com/mgechev/revive/rule"
)
func TestBannedCharactersDefault(t *testing.T) {
testRule(t, "banned_characters_default", &rule.BannedCharsRule{}, &lint.RuleConfig{})
}
// Test banned characters in a const, var and func names.
// One banned character is in the comment and should not be checked.
// One banned character from the list is not present in the fixture file.

View File

@ -7,6 +7,10 @@ import (
"github.com/mgechev/revive/rule"
)
func TestCognitiveComplexityDefault(t *testing.T) {
testRule(t, "cognitive_complexity_default", &rule.CognitiveComplexityRule{}, &lint.RuleConfig{})
}
func TestCognitiveComplexity(t *testing.T) {
testRule(t, "cognitive_complexity", &rule.CognitiveComplexityRule{}, &lint.RuleConfig{
Arguments: []any{int64(0)},

View File

@ -7,6 +7,10 @@ import (
"github.com/mgechev/revive/rule"
)
func TestContextAsArgumentDefault(t *testing.T) {
testRule(t, "context_as_argument_default", &rule.ContextAsArgumentRule{}, &lint.RuleConfig{})
}
func TestContextAsArgument(t *testing.T) {
testRule(t, "context_as_argument", &rule.ContextAsArgumentRule{}, &lint.RuleConfig{
Arguments: []any{

View File

@ -7,7 +7,12 @@ import (
"github.com/mgechev/revive/rule"
)
func TestCyclomaticDefault(t *testing.T) {
testRule(t, "cyclomatic_default", &rule.CyclomaticRule{}, &lint.RuleConfig{})
}
func TestCyclomatic(t *testing.T) {
testRule(t, "cyclomatic_default", &rule.CyclomaticRule{}, &lint.RuleConfig{})
testRule(t, "cyclomatic", &rule.CyclomaticRule{}, &lint.RuleConfig{
Arguments: []any{int64(1)},
})

View File

@ -7,12 +7,14 @@ import (
"github.com/mgechev/revive/rule"
)
func TestDotImports(t *testing.T) {
args := []any{map[string]any{
"allowedPackages": []any{"errors", "context", "github.com/BurntSushi/toml"},
}}
func TestDotImportsDefault(t *testing.T) {
testRule(t, "dot_imports_default", &rule.DotImportsRule{}, &lint.RuleConfig{})
}
testRule(t, "import_dot", &rule.DotImportsRule{}, &lint.RuleConfig{
Arguments: args,
func TestDotImports(t *testing.T) {
testRule(t, "dot_imports", &rule.DotImportsRule{}, &lint.RuleConfig{
Arguments: []any{map[string]any{
"allowedPackages": []any{"errors", "context", "github.com/BurntSushi/toml"},
}},
})
}

View File

@ -7,6 +7,10 @@ import (
"github.com/mgechev/revive/rule"
)
func TestEnforceRepeatedArgTypeStyleDefault(t *testing.T) {
testRule(t, "enforce_repeated_arg_type_style_default", &rule.EnforceRepeatedArgTypeStyleRule{}, &lint.RuleConfig{})
}
func TestEnforceRepeatedArgTypeStyleShort(t *testing.T) {
testRule(t, "enforce_repeated_arg_type_style_short_args", &rule.EnforceRepeatedArgTypeStyleRule{}, &lint.RuleConfig{
Arguments: []any{"short"},

View File

@ -7,6 +7,10 @@ import (
"github.com/mgechev/revive/rule"
)
func TestLintFileHeaderDefault(t *testing.T) {
testRule(t, "lint_file_header_default", &rule.FileHeaderRule{}, &lint.RuleConfig{})
}
func TestLintFileHeader(t *testing.T) {
testRule(t, "lint_file_header1", &rule.FileHeaderRule{}, &lint.RuleConfig{
Arguments: []any{"foobar"},

View File

@ -7,6 +7,10 @@ import (
"github.com/mgechev/revive/rule"
)
func TestFuncLengthDefault(t *testing.T) {
testRule(t, "function_length_default", &rule.FunctionLength{}, &lint.RuleConfig{})
}
func TestFuncLengthLimitsStatements(t *testing.T) {
testRule(t, "function_length1", &rule.FunctionLength{}, &lint.RuleConfig{
Arguments: []any{int64(2), int64(100)},

View File

@ -7,6 +7,10 @@ import (
"github.com/mgechev/revive/rule"
)
func TestLineLengthLimitDefault(t *testing.T) {
testRule(t, "line_length_limit_default", &rule.LineLengthLimitRule{}, &lint.RuleConfig{})
}
func TestLineLengthLimit(t *testing.T) {
testRule(t, "line_length_limit", &rule.LineLengthLimitRule{}, &lint.RuleConfig{
Arguments: []any{int64(100)},

View File

@ -7,6 +7,10 @@ import (
"github.com/mgechev/revive/rule"
)
func TestMaxControlNestingDefault(t *testing.T) {
testRule(t, "max_control_nesting_default", &rule.MaxControlNestingRule{}, &lint.RuleConfig{})
}
func TestMaxControlNesting(t *testing.T) {
testRule(t, "max_control_nesting", &rule.MaxControlNestingRule{}, &lint.RuleConfig{
Arguments: []any{int64(2)}},

7
testdata/argument_limit_default.go vendored Normal file
View File

@ -0,0 +1,7 @@
package fixtures
func foo(a, b, c, d, e, f, g, h int) {
}
func bar(a, b, c, d, e, f, g, h, i int64) { // MATCH /maximum number of arguments per function exceeded; max 8 but got 9/
}

3
testdata/banned_characters_default.go vendored Normal file
View File

@ -0,0 +1,3 @@
package fixtures
const Ω = "Omega"

View File

@ -0,0 +1,13 @@
package pkg
func l() { // MATCH /function l has cognitive complexity 8 (> max enabled 7)/
for i := 1; i <= max; i++ {
for j := 2; j < i; j++ {
if (i%j == 0) || (i%j == 1) {
continue
}
total += i
}
}
return total && max
}

View File

@ -0,0 +1,9 @@
package foo
import (
"context"
"testing"
)
func x(_ AllowedBeforePtrStruct, ctx context.Context) { // MATCH /context.Context should be the first parameter of a function/
}

19
testdata/cyclomatic_default.go vendored Normal file
View File

@ -0,0 +1,19 @@
package pkg
import "log"
func f(x int) bool { // MATCH /function f has cyclomatic complexity 11 (> max enabled 10)/
if x > 0 && true || false {
return true
} else {
log.Printf("non-positive x: %d", x)
}
switch x {
case 1:
case 2:
case 3:
case 4:
default:
}
return true || true && true
}

5
testdata/dot_imports_default.go vendored Normal file
View File

@ -0,0 +1,5 @@
package fixtures
import (
. "context" // MATCH /should not use dot imports/
)

View File

@ -0,0 +1,21 @@
package fixtures
func compliantFunc(a, b int, c string) {}
func nonCompliantFunc1(a int, b int, c string) {}
func nonCompliantFunc2(a int, b, c int) {}
type myStruct struct{}
func (m myStruct) compliantMethod(a, b int, c string) {}
func (m myStruct) nonCompliantMethod1(a int, b int, c string) {}
func (m myStruct) nonCompliantMethod2(a int, b, c int) {}
func variadicFunction(a int, b ...int) {}
func singleArgFunction(a int) {}
func multiTypeArgs(a int, b string, c float64) {}
func mixedCompliance(a, b int, c int, d string) {}

View File

@ -21,4 +21,289 @@ func funLengthA() (a int) {
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
}

134
testdata/function_length_default.go vendored Normal file
View File

@ -0,0 +1,134 @@
package fixtures
func funLengthA() (a int) { // MATCH /maximum number of statements per function exceeded; max 50 but got 51/
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
println()
}
func funLengthB(file *ast.File, fset *token.FileSet, lineLimit, stmtLimit int) []Message { // MATCH /maximum number of lines per function exceeded; max 75 but got 76/
if true {
a = b
if false {
c = d
for _, f := range list {
_, ok := f.(int64)
if !ok {
continue
}
}
}
}
if true {
a = b
if false {
c = d
for _, f := range list {
_, ok := f.(int64)
if !ok {
continue
}
}
switch a {
case 1:
println()
case 2:
println()
println()
default:
println()
}
}
}
if true {
a = b
if false {
c = d
for _, f := range list {
_, ok := f.(int64)
if !ok {
continue
}
}
switch a {
case 1:
println()
case 2:
println()
println()
default:
println()
}
}
}
if true {
a = b
if false {
c = d
for _, f := range list {
_, ok := f.(int64)
if !ok {
continue
}
}
switch a {
case 1:
println()
default:
println()
}
}
}
return
}

9
testdata/line_length_limit_default.go vendored Normal file
View File

@ -0,0 +1,9 @@
package fixtures
import "fmt"
func foo(a, b int) {
fmt.Printf("loooooooooooooooooooooooooooooooooooooooooong line out of limit")
}
// MATCH:6 /line is 81 characters, out of limit 80/

1
testdata/lint_file_header_default.go vendored Normal file
View File

@ -0,0 +1 @@
package fixtures

16
testdata/max_control_nesting_default.go vendored Normal file
View File

@ -0,0 +1,16 @@
package fixtures
func mcn() {
if true {
if true {
if true {
if true {
if true {
if true { // MATCH /control flow nesting exceeds 5/
}
}
}
}
}
}
}