Skip to content

Commit

Permalink
variable to skip package name checks (#941)
Browse files Browse the repository at this point in the history
* variable to skip package name checks

* add tests for skipPackageNameChecks

* Add documentation
  • Loading branch information
gburanov committed Nov 30, 2023
1 parent d3aa99c commit 782f0f1
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 20 deletions.
10 changes: 10 additions & 0 deletions RULES_DESCRIPTIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
49 changes: 29 additions & 20 deletions rule/var-naming.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down Expand Up @@ -56,7 +57,29 @@ 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.
Expand All @@ -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)
Expand Down
6 changes: 6 additions & 0 deletions test/var-naming_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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}}},
})

}
3 changes: 3 additions & 0 deletions testdata/var-naming_skipPackageNameChecks-false.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// should fail if skipPackageNameChecks = false (by default)

package pkg_with_underscores // MATCH /don't use an underscore in package name/
3 changes: 3 additions & 0 deletions testdata/var-naming_skipPackageNameChecks-true.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// should pass if skipPackageNameChecks = true

package pkg_with_underscores

0 comments on commit 782f0f1

Please sign in to comment.