Add check for MixedCaps in package name Lint already checks for underscores in package names, but did not yet check for lower case names. The section on Package names in the Effective Go document states that "By convention, packages packages are given lower case, single-word names; there should be no need for underscores or mixedCaps." GitHub-Last-Rev: 91b0fc6545806c03760f2ceef4d148271965bbc9 GitHub-Pull-Request: golang/lint#285 Change-Id: Ibb234166360b67f0f561b463a951a87399cad1d3 Reviewed-on: https://go-review.googlesource.com/96080 Reviewed-by: Andrew Bonventre <andybons@golang.org>
diff --git a/lint.go b/lint.go index 8bb1faa..946936e 100644 --- a/lint.go +++ b/lint.go
@@ -527,7 +527,10 @@ }) } -var allCapsRE = regexp.MustCompile(`^[A-Z0-9_]+$`) +var ( + allCapsRE = regexp.MustCompile(`^[A-Z0-9_]+$`) + anyCapsRE = regexp.MustCompile(`[A-Z]`) +) // knownNameExceptions is a set of names that are known to be exempt from naming checks. // This is usually because they are constrained by having to match names in the @@ -544,6 +547,9 @@ if strings.Contains(f.f.Name.Name, "_") && !strings.HasSuffix(f.f.Name.Name, "_test") { f.errorf(f.f, 1, link("http://golang.org/doc/effective_go.html#package-names"), category("naming"), "don't use an underscore in package name") } + if anyCapsRE.MatchString(f.f.Name.Name) { + f.errorf(f.f, 1, link("http://golang.org/doc/effective_go.html#package-names"), category("mixed-caps"), "don't use MixedCaps in package name; %s should be %s", f.f.Name.Name, strings.ToLower(f.f.Name.Name)) + } check := func(id *ast.Ident, thing string) { if id.Name == "_" {
diff --git a/testdata/pkg-caps.go b/testdata/pkg-caps.go new file mode 100644 index 0000000..72225d7 --- /dev/null +++ b/testdata/pkg-caps.go
@@ -0,0 +1,4 @@ +// MixedCaps package name + +// Package PkgName ... +package PkgName // MATCH /don't use MixedCaps in package name/