Skip to content

Commit e2f1a6e

Browse files
committed
skip over testdata dirs like we do with vendor
And, just like vendor, one can opt into formatting them by explicitly passing them as arguments. Updates #250. Fixes #260.
1 parent 48add90 commit e2f1a6e

File tree

4 files changed

+61
-50
lines changed

4 files changed

+61
-50
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ The project includes copies of `go/printer` and `go/doc/comment` as of Go 1.20
1919
to ensure consistent formatting independent of what Go version is being used.
2020
The [added formatting rules](#Added-rules) are implemented in the `format` package.
2121

22-
Note that vendor directories are skipped unless given as explicit arguments.
22+
`vendor` and `testdata` directories are skipped unless given as explicit arguments.
2323
Similarly, the added rules do not apply to generated Go files unless they are
2424
given as explicit arguments.
2525

gofmt.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,6 @@ var fdSem = make(chan bool, 200)
8484
var (
8585
fileSet = token.NewFileSet() // per process FileSet
8686
parserMode parser.Mode
87-
88-
// walkingVendorDir is true if we are explicitly walking a vendor directory.
89-
walkingVendorDir bool
9087
)
9188

9289
func usage() {
@@ -512,11 +509,14 @@ func gofmtMain(s *sequencer) {
512509
})
513510
default:
514511
// Directories are walked, ignoring non-Go files.
515-
walkingVendorDir = filepath.Base(arg) == "vendor"
516512
err := filepath.WalkDir(arg, func(path string, f fs.DirEntry, err error) error {
517-
if !walkingVendorDir && filepath.Base(path) == "vendor" {
513+
// vendor and testdata directories are skipped,
514+
// unless they are explicitly passed as an argument.
515+
base := filepath.Base(path)
516+
if path != arg && (base == "vendor" || base == "testdata") {
518517
return filepath.SkipDir
519518
}
519+
520520
if err != nil || !isGoFile(f) {
521521
return err
522522
}

testdata/script/ignore-dirs.txtar

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
exec gofumpt orig.go.golden
2+
cp stdout formatted.go.golden
3+
mkdir -p vendor/foo testdata/foo
4+
cp orig.go.golden vendor/foo/foo.go
5+
cp orig.go.golden testdata/foo/foo.go
6+
7+
# format explicit dirs
8+
exec gofumpt -l vendor testdata
9+
stdout -count=1 'vendor[/\\]foo[/\\]foo.go'
10+
stdout -count=1 'testdata[/\\]foo[/\\]foo.go'
11+
! stderr .
12+
13+
# format explicit files
14+
exec gofumpt -l vendor/foo/foo.go testdata/foo/foo.go
15+
stdout -count=1 'vendor[/\\]foo[/\\]foo.go'
16+
stdout -count=1 'testdata[/\\]foo[/\\]foo.go'
17+
! stderr .
18+
19+
# ignore implicit dirs via fs walking
20+
exec gofumpt -l .
21+
! stdout .
22+
! stderr .
23+
24+
# format explicit pkg while ignoring rest
25+
mkdir vendor/ignore testdata/ignore
26+
cp orig.go.golden vendor/ignore/ignore.go
27+
cp orig.go.golden testdata/ignore/ignore.go
28+
exec gofumpt -l vendor/foo testdata/foo .
29+
stdout -count=1 'vendor[/\\]foo[/\\]foo.go'
30+
stdout -count=1 'testdata[/\\]foo[/\\]foo.go'
31+
! stderr .
32+
33+
# format explicit dirs without clean paths
34+
exec gofumpt -l $WORK//vendor ./testdata/./
35+
stdout -count=1 'vendor[/\\]foo[/\\]foo.go'
36+
stdout -count=1 'testdata[/\\]foo[/\\]foo.go'
37+
! stderr .
38+
39+
-- orig.go.golden --
40+
package p
41+
42+
func f() {
43+
if true {
44+
// lone comment
45+
}
46+
{
47+
48+
}
49+
50+
{
51+
52+
// lone comment
53+
54+
}
55+
}

testdata/script/ignore-implicit-vendor.txtar

-44
This file was deleted.

0 commit comments

Comments
 (0)