From e2f1a6edb1c890074eea851e5c2fe032eeaa4a77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=AD?= Date: Sun, 9 Apr 2023 13:46:49 +0100 Subject: [PATCH] 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. --- README.md | 2 +- gofmt.go | 10 ++-- testdata/script/ignore-dirs.txtar | 55 ++++++++++++++++++++ testdata/script/ignore-implicit-vendor.txtar | 44 ---------------- 4 files changed, 61 insertions(+), 50 deletions(-) create mode 100644 testdata/script/ignore-dirs.txtar delete mode 100644 testdata/script/ignore-implicit-vendor.txtar diff --git a/README.md b/README.md index 25e1751..a0206ef 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ The project includes copies of `go/printer` and `go/doc/comment` as of Go 1.20 to ensure consistent formatting independent of what Go version is being used. The [added formatting rules](#Added-rules) are implemented in the `format` package. -Note that vendor directories are skipped unless given as explicit arguments. +`vendor` and `testdata` directories are skipped unless given as explicit arguments. Similarly, the added rules do not apply to generated Go files unless they are given as explicit arguments. diff --git a/gofmt.go b/gofmt.go index 9e445f3..384795a 100644 --- a/gofmt.go +++ b/gofmt.go @@ -84,9 +84,6 @@ var fdSem = make(chan bool, 200) var ( fileSet = token.NewFileSet() // per process FileSet parserMode parser.Mode - - // walkingVendorDir is true if we are explicitly walking a vendor directory. - walkingVendorDir bool ) func usage() { @@ -512,11 +509,14 @@ func gofmtMain(s *sequencer) { }) default: // Directories are walked, ignoring non-Go files. - walkingVendorDir = filepath.Base(arg) == "vendor" err := filepath.WalkDir(arg, func(path string, f fs.DirEntry, err error) error { - if !walkingVendorDir && filepath.Base(path) == "vendor" { + // vendor and testdata directories are skipped, + // unless they are explicitly passed as an argument. + base := filepath.Base(path) + if path != arg && (base == "vendor" || base == "testdata") { return filepath.SkipDir } + if err != nil || !isGoFile(f) { return err } diff --git a/testdata/script/ignore-dirs.txtar b/testdata/script/ignore-dirs.txtar new file mode 100644 index 0000000..93ae604 --- /dev/null +++ b/testdata/script/ignore-dirs.txtar @@ -0,0 +1,55 @@ +exec gofumpt orig.go.golden +cp stdout formatted.go.golden +mkdir -p vendor/foo testdata/foo +cp orig.go.golden vendor/foo/foo.go +cp orig.go.golden testdata/foo/foo.go + +# format explicit dirs +exec gofumpt -l vendor testdata +stdout -count=1 'vendor[/\\]foo[/\\]foo.go' +stdout -count=1 'testdata[/\\]foo[/\\]foo.go' +! stderr . + +# format explicit files +exec gofumpt -l vendor/foo/foo.go testdata/foo/foo.go +stdout -count=1 'vendor[/\\]foo[/\\]foo.go' +stdout -count=1 'testdata[/\\]foo[/\\]foo.go' +! stderr . + +# ignore implicit dirs via fs walking +exec gofumpt -l . +! stdout . +! stderr . + +# format explicit pkg while ignoring rest +mkdir vendor/ignore testdata/ignore +cp orig.go.golden vendor/ignore/ignore.go +cp orig.go.golden testdata/ignore/ignore.go +exec gofumpt -l vendor/foo testdata/foo . +stdout -count=1 'vendor[/\\]foo[/\\]foo.go' +stdout -count=1 'testdata[/\\]foo[/\\]foo.go' +! stderr . + +# format explicit dirs without clean paths +exec gofumpt -l $WORK//vendor ./testdata/./ +stdout -count=1 'vendor[/\\]foo[/\\]foo.go' +stdout -count=1 'testdata[/\\]foo[/\\]foo.go' +! stderr . + +-- orig.go.golden -- +package p + +func f() { + if true { + // lone comment + } + { + + } + + { + + // lone comment + + } +} diff --git a/testdata/script/ignore-implicit-vendor.txtar b/testdata/script/ignore-implicit-vendor.txtar deleted file mode 100644 index ba58324..0000000 --- a/testdata/script/ignore-implicit-vendor.txtar +++ /dev/null @@ -1,44 +0,0 @@ -exec gofumpt orig.go.golden -cp stdout formatted.go.golden -mkdir -p vendor/foo -cp orig.go.golden vendor/foo/foo.go - -# format explicit vendor dir -exec gofumpt -l vendor -stdout -count=1 'vendor[/\\]foo[/\\]foo.go' -! stderr . - -# format explicit vendor file -exec gofumpt -l vendor/foo/foo.go -stdout -count=1 'vendor[/\\]foo[/\\]foo.go' -! stderr . - -# ignore implicit vendor call -exec gofumpt -l . -! stdout . -! stderr . - -# format explicit vendor pkg while ignoring rest -mkdir vendor/ignore -cp orig.go.golden vendor/ignore/ignore.go -exec gofumpt -l vendor/foo . -stdout -count=1 'vendor[/\\]foo[/\\]foo.go' -! stderr . - --- orig.go.golden -- -package p - -func f() { - if true { - // lone comment - } - { - - } - - { - - // lone comment - - } -}