Skip to content

Commit 09fb350

Browse files
authored
unused-param,unused-receiver: refactor configure func (#1157)
1 parent 7f7d024 commit 09fb350

File tree

4 files changed

+49
-34
lines changed

4 files changed

+49
-34
lines changed

rule/unused_param.go

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import (
99
"github.com/mgechev/revive/lint"
1010
)
1111

12+
var allowBlankIdentifierRegex = regexp.MustCompile("^_$")
13+
1214
// UnusedParamRule lints unused params in functions.
1315
type UnusedParamRule struct {
1416
// regex to check if some name is valid for unused parameter, "^_$" by default
@@ -21,30 +23,29 @@ type UnusedParamRule struct {
2123
func (r *UnusedParamRule) configure(args lint.Arguments) {
2224
// while by default args is an array, i think it's good to provide structures inside it by default, not arrays or primitives
2325
// it's more compatible to JSON nature of configurations
24-
var allowRegexStr string
26+
r.allowRegex = allowBlankIdentifierRegex
27+
r.failureMsg = "parameter '%s' seems to be unused, consider removing or renaming it as _"
2528
if len(args) == 0 {
26-
allowRegexStr = "^_$"
27-
r.failureMsg = "parameter '%s' seems to be unused, consider removing or renaming it as _"
28-
} else {
29-
// Arguments = [{}]
30-
options := args[0].(map[string]any)
31-
// Arguments = [{allowRegex="^_"}]
32-
33-
if allowRegexParam, ok := options["allowRegex"]; ok {
34-
allowRegexStr, ok = allowRegexParam.(string)
35-
if !ok {
36-
panic(fmt.Errorf("error configuring %s rule: allowRegex is not string but [%T]", r.Name(), allowRegexParam))
37-
}
38-
}
29+
return
30+
}
31+
// Arguments = [{}]
32+
options := args[0].(map[string]any)
33+
34+
allowRegexParam, ok := options["allowRegex"]
35+
if !ok {
36+
return
37+
}
38+
// Arguments = [{allowRegex="^_"}]
39+
allowRegexStr, ok := allowRegexParam.(string)
40+
if !ok {
41+
panic(fmt.Errorf("error configuring %s rule: allowRegex is not string but [%T]", r.Name(), allowRegexParam))
3942
}
4043
var err error
4144
r.allowRegex, err = regexp.Compile(allowRegexStr)
4245
if err != nil {
4346
panic(fmt.Errorf("error configuring %s rule: allowRegex is not valid regex [%s]: %v", r.Name(), allowRegexStr, err))
4447
}
45-
if r.failureMsg == "" {
46-
r.failureMsg = "parameter '%s' seems to be unused, consider removing or renaming it to match " + r.allowRegex.String()
47-
}
48+
r.failureMsg = "parameter '%s' seems to be unused, consider removing or renaming it to match " + r.allowRegex.String()
4849
}
4950

5051
// Apply applies the rule to given file.

rule/unused_receiver.go

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,29 @@ type UnusedReceiverRule struct {
2121
func (r *UnusedReceiverRule) configure(args lint.Arguments) {
2222
// while by default args is an array, i think it's good to provide structures inside it by default, not arrays or primitives
2323
// it's more compatible to JSON nature of configurations
24-
var allowRegexStr string
24+
r.allowRegex = allowBlankIdentifierRegex
25+
r.failureMsg = "method receiver '%s' is not referenced in method's body, consider removing or renaming it as _"
2526
if len(args) == 0 {
26-
allowRegexStr = "^_$"
27-
r.failureMsg = "method receiver '%s' is not referenced in method's body, consider removing or renaming it as _"
28-
} else {
29-
// Arguments = [{}]
30-
options := args[0].(map[string]any)
31-
// Arguments = [{allowRegex="^_"}]
32-
33-
if allowRegexParam, ok := options["allowRegex"]; ok {
34-
allowRegexStr, ok = allowRegexParam.(string)
35-
if !ok {
36-
panic(fmt.Errorf("error configuring [unused-receiver] rule: allowRegex is not string but [%T]", allowRegexParam))
37-
}
38-
}
27+
return
28+
}
29+
// Arguments = [{}]
30+
options := args[0].(map[string]any)
31+
32+
allowRegexParam, ok := options["allowRegex"]
33+
if !ok {
34+
return
35+
}
36+
// Arguments = [{allowRegex="^_"}]
37+
allowRegexStr, ok := allowRegexParam.(string)
38+
if !ok {
39+
panic(fmt.Errorf("error configuring [unused-receiver] rule: allowRegex is not string but [%T]", allowRegexParam))
3940
}
4041
var err error
4142
r.allowRegex, err = regexp.Compile(allowRegexStr)
4243
if err != nil {
4344
panic(fmt.Errorf("error configuring [unused-receiver] rule: allowRegex is not valid regex [%s]: %v", allowRegexStr, err))
4445
}
45-
if r.failureMsg == "" {
46-
r.failureMsg = "method receiver '%s' is not referenced in method's body, consider removing or renaming it to match " + r.allowRegex.String()
47-
}
46+
r.failureMsg = "method receiver '%s' is not referenced in method's body, consider removing or renaming it to match " + r.allowRegex.String()
4847
}
4948

5049
// Apply applies the rule to given file.

test/unused_param_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ import (
99

1010
func TestUnusedParam(t *testing.T) {
1111
testRule(t, "unused_param", &rule.UnusedParamRule{})
12+
testRule(t, "unused_param", &rule.UnusedParamRule{}, &lint.RuleConfig{Arguments: []any{}})
13+
testRule(t, "unused_param", &rule.UnusedParamRule{}, &lint.RuleConfig{Arguments: []any{
14+
map[string]any{"a": "^xxx"},
15+
}})
1216
testRule(t, "unused_param_custom_regex", &rule.UnusedParamRule{}, &lint.RuleConfig{Arguments: []any{
1317
map[string]any{"allowRegex": "^xxx"},
1418
}})

test/unused_receiver_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,18 @@ import (
99

1010
func TestUnusedReceiver(t *testing.T) {
1111
testRule(t, "unused_receiver", &rule.UnusedReceiverRule{})
12+
testRule(t, "unused_receiver", &rule.UnusedReceiverRule{}, &lint.RuleConfig{Arguments: []any{}})
13+
testRule(t, "unused_receiver", &rule.UnusedReceiverRule{}, &lint.RuleConfig{Arguments: []any{
14+
map[string]any{"a": "^xxx"},
15+
}})
1216
testRule(t, "unused_receiver_custom_regex", &rule.UnusedReceiverRule{}, &lint.RuleConfig{Arguments: []any{
1317
map[string]any{"allowRegex": "^xxx"},
1418
}})
1519
}
20+
21+
func BenchmarkUnusedReceiver(b *testing.B) {
22+
var t *testing.T
23+
for i := 0; i <= b.N; i++ {
24+
testRule(t, "unused_receiver", &rule.UnusedReceiverRule{})
25+
}
26+
}

0 commit comments

Comments
 (0)