Enable depguard so a non-test file cannot import test support #59
Reference in New Issue
Block a user
Delete Branch "enable-depguard-test-support"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
depguardwas in the disable list. It is now enabled with one rule,test-support: in files that are neither test files nor inside a package whosedirectory name ends in
test, the imports named underdenyare refused.Canonical denies
net/http/httptest, which serves tests only and is the samein every repository.
This replaces
internal/testimportgatein sneak/homoicon, a package whose onlyjob was to refuse a non-test Go file importing an in-module package whose last
path segment ends in
test. sneak ruled onsneak/homoicon#1029 that the rule moves into linter
configuration here.
depguard cannot express that rule generically. Its package lists are prefix
lists -- its own README says so, and I confirmed it:
*test,**testand$gomod/**testeach match nothing, while a full import path matches. "Inmodule" is not generic either, since the module path differs per repository.
And depguard refuses a rule with no allow or deny list, so this file cannot
ship the rule pre-armed and empty for each repository to fill in.
The closest expressible rule is the one here. The file half is generic and
exact; the package half is a deny list each repository extends with its own
test-support packages, by full import path. REPO_POLICIES.md now says that list
is the one part of a vendored copy a repository may add to.
Tested with golangci-lint v2.12.2 on a scratch module: a production file
importing a denied
*testpackage fails, and the same import from a_test.gofile and from inside the
*testpackage passes.make checkhere is green.Model: opus-5
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.