mirror of
https://github.com/mgechev/revive.git
synced 2025-07-07 00:35:38 +02:00
better messages for rules' config errors (#563)
This commit is contained in:
@ -12,9 +12,7 @@ type ArgumentsLimitRule struct{}
|
|||||||
|
|
||||||
// Apply applies the rule to given file.
|
// Apply applies the rule to given file.
|
||||||
func (r *ArgumentsLimitRule) Apply(file *lint.File, arguments lint.Arguments) []lint.Failure {
|
func (r *ArgumentsLimitRule) Apply(file *lint.File, arguments lint.Arguments) []lint.Failure {
|
||||||
if len(arguments) != 1 {
|
checkNumberOfArguments(1, arguments, r.Name())
|
||||||
panic(`invalid configuration for "argument-limit"`)
|
|
||||||
}
|
|
||||||
|
|
||||||
total, ok := arguments[0].(int64) // Alt. non panicking version
|
total, ok := arguments[0].(int64) // Alt. non panicking version
|
||||||
if !ok {
|
if !ok {
|
||||||
|
@ -14,17 +14,15 @@ type CognitiveComplexityRule struct{}
|
|||||||
|
|
||||||
// Apply applies the rule to given file.
|
// Apply applies the rule to given file.
|
||||||
func (r *CognitiveComplexityRule) Apply(file *lint.File, arguments lint.Arguments) []lint.Failure {
|
func (r *CognitiveComplexityRule) Apply(file *lint.File, arguments lint.Arguments) []lint.Failure {
|
||||||
var failures []lint.Failure
|
checkNumberOfArguments(1, arguments, r.Name())
|
||||||
|
|
||||||
const expectedArgumentsCount = 1
|
|
||||||
if len(arguments) < expectedArgumentsCount {
|
|
||||||
panic(fmt.Sprintf("not enough arguments for cognitive-complexity, expected %d, got %d", expectedArgumentsCount, len(arguments)))
|
|
||||||
}
|
|
||||||
complexity, ok := arguments[0].(int64)
|
complexity, ok := arguments[0].(int64)
|
||||||
if !ok {
|
if !ok {
|
||||||
panic(fmt.Sprintf("invalid argument type for cognitive-complexity, expected int64, got %T", arguments[0]))
|
panic(fmt.Sprintf("invalid argument type for cognitive-complexity, expected int64, got %T", arguments[0]))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var failures []lint.Failure
|
||||||
|
|
||||||
linter := cognitiveComplexityLinter{
|
linter := cognitiveComplexityLinter{
|
||||||
file: file,
|
file: file,
|
||||||
maxComplexity: int(complexity),
|
maxComplexity: int(complexity),
|
||||||
|
@ -15,16 +15,15 @@ type CyclomaticRule struct{}
|
|||||||
|
|
||||||
// Apply applies the rule to given file.
|
// Apply applies the rule to given file.
|
||||||
func (r *CyclomaticRule) Apply(file *lint.File, arguments lint.Arguments) []lint.Failure {
|
func (r *CyclomaticRule) Apply(file *lint.File, arguments lint.Arguments) []lint.Failure {
|
||||||
var failures []lint.Failure
|
checkNumberOfArguments(1, arguments, r.Name())
|
||||||
|
|
||||||
if len(arguments) == 0 {
|
|
||||||
panic("not enough arguments for " + r.Name())
|
|
||||||
}
|
|
||||||
complexity, ok := arguments[0].(int64) // Alt. non panicking version
|
complexity, ok := arguments[0].(int64) // Alt. non panicking version
|
||||||
if !ok {
|
if !ok {
|
||||||
panic("invalid argument for cyclomatic complexity")
|
panic("invalid argument for cyclomatic complexity")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var failures []lint.Failure
|
||||||
|
|
||||||
fileAst := file.AST
|
fileAst := file.AST
|
||||||
walker := lintCyclomatic{
|
walker := lintCyclomatic{
|
||||||
file: file,
|
file: file,
|
||||||
|
@ -16,9 +16,7 @@ var (
|
|||||||
|
|
||||||
// Apply applies the rule to given file.
|
// Apply applies the rule to given file.
|
||||||
func (r *FileHeaderRule) Apply(file *lint.File, arguments lint.Arguments) []lint.Failure {
|
func (r *FileHeaderRule) Apply(file *lint.File, arguments lint.Arguments) []lint.Failure {
|
||||||
if len(arguments) != 1 {
|
checkNumberOfArguments(1, arguments, r.Name())
|
||||||
panic(`invalid configuration for "file-header" rule`)
|
|
||||||
}
|
|
||||||
|
|
||||||
header, ok := arguments[0].(string)
|
header, ok := arguments[0].(string)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
@ -12,9 +12,7 @@ type FunctionResultsLimitRule struct{}
|
|||||||
|
|
||||||
// Apply applies the rule to given file.
|
// Apply applies the rule to given file.
|
||||||
func (r *FunctionResultsLimitRule) Apply(file *lint.File, arguments lint.Arguments) []lint.Failure {
|
func (r *FunctionResultsLimitRule) Apply(file *lint.File, arguments lint.Arguments) []lint.Failure {
|
||||||
if len(arguments) != 1 {
|
checkNumberOfArguments(1, arguments, r.Name())
|
||||||
panic(`invalid configuration for "function-result-limit"`)
|
|
||||||
}
|
|
||||||
|
|
||||||
max, ok := arguments[0].(int64) // Alt. non panicking version
|
max, ok := arguments[0].(int64) // Alt. non panicking version
|
||||||
if !ok {
|
if !ok {
|
||||||
|
@ -16,9 +16,7 @@ type LineLengthLimitRule struct{}
|
|||||||
|
|
||||||
// Apply applies the rule to given file.
|
// Apply applies the rule to given file.
|
||||||
func (r *LineLengthLimitRule) Apply(file *lint.File, arguments lint.Arguments) []lint.Failure {
|
func (r *LineLengthLimitRule) Apply(file *lint.File, arguments lint.Arguments) []lint.Failure {
|
||||||
if len(arguments) != 1 {
|
checkNumberOfArguments(1, arguments, r.Name())
|
||||||
panic(`invalid configuration for "line-length-limit"`)
|
|
||||||
}
|
|
||||||
|
|
||||||
max, ok := arguments[0].(int64) // Alt. non panicking version
|
max, ok := arguments[0].(int64) // Alt. non panicking version
|
||||||
if !ok || max < 0 {
|
if !ok || max < 0 {
|
||||||
|
@ -13,11 +13,15 @@ type MaxPublicStructsRule struct{}
|
|||||||
|
|
||||||
// Apply applies the rule to given file.
|
// Apply applies the rule to given file.
|
||||||
func (r *MaxPublicStructsRule) Apply(file *lint.File, arguments lint.Arguments) []lint.Failure {
|
func (r *MaxPublicStructsRule) Apply(file *lint.File, arguments lint.Arguments) []lint.Failure {
|
||||||
var failures []lint.Failure
|
checkNumberOfArguments(1, arguments, r.Name())
|
||||||
if len(arguments) == 0 {
|
|
||||||
panic("not enough arguments for " + r.Name())
|
max, ok := arguments[0].(int64) // Alt. non panicking version
|
||||||
|
if !ok {
|
||||||
|
panic(`invalid value passed as argument number to the "max-public-structs" rule`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var failures []lint.Failure
|
||||||
|
|
||||||
fileAst := file.AST
|
fileAst := file.AST
|
||||||
walker := &lintMaxPublicStructs{
|
walker := &lintMaxPublicStructs{
|
||||||
fileAst: fileAst,
|
fileAst: fileAst,
|
||||||
@ -28,11 +32,6 @@ func (r *MaxPublicStructsRule) Apply(file *lint.File, arguments lint.Arguments)
|
|||||||
|
|
||||||
ast.Walk(walker, fileAst)
|
ast.Walk(walker, fileAst)
|
||||||
|
|
||||||
max, ok := arguments[0].(int64) // Alt. non panicking version
|
|
||||||
if !ok {
|
|
||||||
panic(`invalid value passed as argument number to the "max-public-structs" rule`)
|
|
||||||
}
|
|
||||||
|
|
||||||
if walker.current > max {
|
if walker.current > max {
|
||||||
walker.onFailure(lint.Failure{
|
walker.onFailure(lint.Failure{
|
||||||
Failure: "you have exceeded the maximum number of public struct declarations",
|
Failure: "you have exceeded the maximum number of public struct declarations",
|
||||||
|
@ -190,3 +190,10 @@ func gofmt(x interface{}) string {
|
|||||||
printer.Fprint(&buf, fs, x)
|
printer.Fprint(&buf, fs, x)
|
||||||
return buf.String()
|
return buf.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// checkNumberOfArguments fails if the given number of arguments is not, at least, the expected one
|
||||||
|
func checkNumberOfArguments(expected int, args lint.Arguments, ruleName string) {
|
||||||
|
if len(args) < expected {
|
||||||
|
panic(fmt.Sprintf("not enough arguments for %s rule, expected %d, got %d. Please check the rule's documentation", ruleName, expected, len(args)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user