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

variable to skip package name checks (#941)

* variable to skip package name checks

* add tests for skipPackageNameChecks

* Add documentation
This commit is contained in:
Georgy Buranov 2023-11-30 14:19:31 +01:00 committed by GitHub
parent d3aa99cf8b
commit 782f0f118c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 51 additions and 20 deletions

View File

@ -886,6 +886,16 @@ Example:
arguments = [["ID"], ["VM"], [{upperCaseConst=true}]]
```
You can also add "skipPackageNameChecks=true" to skip package name checks.
Example:
```toml
[rule.var-naming]
arguments = [[], [], [{skipPackageNameChecks=true}]]
```
## waitgroup-by-value
_Description_: Function parameters that are passed by value, are in fact a copy of the original argument. Passing a copy of a `sync.WaitGroup` is usually not what the developer wants to do.

View File

@ -18,10 +18,11 @@ var upperCaseConstRE = regexp.MustCompile(`^_?[A-Z][A-Z\d]*(_[A-Z\d]+)*$`)
// VarNamingRule lints given else constructs.
type VarNamingRule struct {
configured bool
whitelist []string
blacklist []string
upperCaseConst bool // if true - allows to use UPPER_SOME_NAMES for constants
configured bool
whitelist []string
blacklist []string
upperCaseConst bool // if true - allows to use UPPER_SOME_NAMES for constants
skipPackageNameChecks bool
sync.Mutex
}
@ -56,9 +57,31 @@ func (r *VarNamingRule) configure(arguments lint.Arguments) {
panic(fmt.Sprintf("Invalid third argument to the var-naming rule. Expecting a %s of type slice, of len==1, with map, but %T", "options", asSlice[0]))
}
r.upperCaseConst = fmt.Sprint(args["upperCaseConst"]) == "true"
r.skipPackageNameChecks = fmt.Sprint(args["skipPackageNameChecks"]) == "true"
}
}
func (r *VarNamingRule) applyPackageCheckRules(walker *lintNames) {
// Package names need slightly different handling than other names.
if strings.Contains(walker.fileAst.Name.Name, "_") && !strings.HasSuffix(walker.fileAst.Name.Name, "_test") {
walker.onFailure(lint.Failure{
Failure: "don't use an underscore in package name",
Confidence: 1,
Node: walker.fileAst.Name,
Category: "naming",
})
}
if anyCapsRE.MatchString(walker.fileAst.Name.Name) {
walker.onFailure(lint.Failure{
Failure: fmt.Sprintf("don't use MixedCaps in package name; %s should be %s", walker.fileAst.Name.Name, strings.ToLower(walker.fileAst.Name.Name)),
Confidence: 1,
Node: walker.fileAst.Name,
Category: "naming",
})
}
}
// Apply applies the rule to given file.
func (r *VarNamingRule) Apply(file *lint.File, arguments lint.Arguments) []lint.Failure {
r.configure(arguments)
@ -78,22 +101,8 @@ func (r *VarNamingRule) Apply(file *lint.File, arguments lint.Arguments) []lint.
upperCaseConst: r.upperCaseConst,
}
// Package names need slightly different handling than other names.
if strings.Contains(walker.fileAst.Name.Name, "_") && !strings.HasSuffix(walker.fileAst.Name.Name, "_test") {
walker.onFailure(lint.Failure{
Failure: "don't use an underscore in package name",
Confidence: 1,
Node: walker.fileAst.Name,
Category: "naming",
})
}
if anyCapsRE.MatchString(walker.fileAst.Name.Name) {
walker.onFailure(lint.Failure{
Failure: fmt.Sprintf("don't use MixedCaps in package name; %s should be %s", walker.fileAst.Name.Name, strings.ToLower(walker.fileAst.Name.Name)),
Confidence: 1,
Node: walker.fileAst.Name,
Category: "naming",
})
if !r.skipPackageNameChecks {
r.applyPackageCheckRules(&walker)
}
ast.Walk(&walker, fileAst)

View File

@ -18,4 +18,10 @@ func TestVarNaming(t *testing.T) {
testRule(t, "var-naming_upperCaseConst-true", &rule.VarNamingRule{}, &lint.RuleConfig{
Arguments: []any{[]any{}, []any{}, []any{map[string]any{"upperCaseConst": true}}},
})
testRule(t, "var-naming_skipPackageNameChecks-false", &rule.VarNamingRule{}, &lint.RuleConfig{})
testRule(t, "var-naming_skipPackageNameChecks-true", &rule.VarNamingRule{}, &lint.RuleConfig{
Arguments: []any{[]any{}, []any{}, []any{map[string]any{"skipPackageNameChecks": true}}},
})
}

View File

@ -0,0 +1,3 @@
// should fail if skipPackageNameChecks = false (by default)
package pkg_with_underscores // MATCH /don't use an underscore in package name/

View File

@ -0,0 +1,3 @@
// should pass if skipPackageNameChecks = true
package pkg_with_underscores