cmd/vet/lowerell, drive/driveimpl: forbid variables named "l" or "I"

Add a new vet checker that rejects variables, parameters, named
return values, receivers, range/type-switch bindings, type
parameters, struct fields, and constants named "l" (lowercase ell)
or "I" (uppercase i). Both are hard to distinguish from the digit
"1" and from each other in too many fonts.

Rename the two pre-existing struct fields named "l" (both of type
net.Listener) in drive/driveimpl/drive_test.go to "ln", matching the
convention used elsewhere for net.Listener locals.

Rename the test-fixture struct fields "I" (single int label) to
"Int" in metrics/multilabelmap_test.go and util/deephash/deephash_test.go,
preserving the "first letters of types" convention used alongside
neighboring fields like I8/I16/U/U8.

Also teach pkgdoc_test.go to skip testdata/ directories, which
the go tool ignores; they are not real packages.

Fixes #19631

Change-Id: I71ad2fa990705f7a070406ebcdb8cefa7487d849
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick
2026-05-04 16:50:17 +00:00
committed by Brad Fitzpatrick
parent 0cf899610c
commit 9bb7ca6116
8 changed files with 268 additions and 17 deletions
+3
View File
@@ -41,6 +41,9 @@ func TestPackageDocs(t *testing.T) {
if fi.Mode().IsDir() && path != "." && strings.HasPrefix(filepath.Base(path), ".") {
return filepath.SkipDir // No documentation lives in dot directories (.git, .claude, etc)
}
if fi.Mode().IsDir() && filepath.Base(path) == "testdata" {
return filepath.SkipDir // testdata is ignored by the go tool; not real packages
}
if fi.Mode().IsRegular() && strings.HasSuffix(path, ".go") {
if strings.HasSuffix(path, "_test.go") {
return nil