From 3f1109b1eb10cae482ac8feb1853cc9e5ab8499a Mon Sep 17 00:00:00 2001 From: Frederik Zipp Date: Tue, 22 Mar 2022 18:19:27 +0100 Subject: [PATCH] ignore 'vendor' and 'testdata' directories and directories with names that begin with '.' or '_' Fixes #42 --- CHANGELOG.md | 5 +++++ analyze.go | 14 ++++++++++++++ analyze_test.go | 4 ++++ testdata/ignore/.dotname/file.go | 3 +++ testdata/ignore/_underscore/file.go | 3 +++ testdata/ignore/testdata/file.go | 3 +++ testdata/ignore/vendor/file.go | 3 +++ 7 files changed, 35 insertions(+) create mode 100644 testdata/ignore/.dotname/file.go create mode 100644 testdata/ignore/_underscore/file.go create mode 100644 testdata/ignore/testdata/file.go create mode 100644 testdata/ignore/vendor/file.go diff --git a/CHANGELOG.md b/CHANGELOG.md index efbc9fe..9bf352e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] +### Changed +- Ignore `vendor` and `testdata` directories and directories with names + that begin with `.` or `_` + ## [0.4.0] - 2021-12-19 ### Added - Support method receivers with type parameters introduced in Go 1.18 diff --git a/analyze.go b/analyze.go index 1f3479a..3a448b6 100644 --- a/analyze.go +++ b/analyze.go @@ -41,6 +41,9 @@ func Analyze(paths []string, ignore *regexp.Regexp) Stats { func analyzeDir(dirname string, ignore *regexp.Regexp, stats Stats) Stats { filepath.WalkDir(dirname, func(path string, entry fs.DirEntry, err error) error { + if isSkipDir(entry) { + return filepath.SkipDir + } if err == nil && isGoFile(entry) { stats = analyzeFile(path, ignore, stats) } @@ -49,6 +52,17 @@ func analyzeDir(dirname string, ignore *regexp.Regexp, stats Stats) Stats { return stats } +var skipDirs = map[string]bool{ + "testdata": true, + "vendor": true, +} + +func isSkipDir(entry fs.DirEntry) bool { + return entry.IsDir() && (skipDirs[entry.Name()] || + strings.HasPrefix(entry.Name(), ".") || + strings.HasPrefix(entry.Name(), "_")) +} + func isGoFile(entry fs.DirEntry) bool { return !entry.IsDir() && strings.HasSuffix(entry.Name(), ".go") } diff --git a/analyze_test.go b/analyze_test.go index 8a790a0..3ddca4f 100644 --- a/analyze_test.go +++ b/analyze_test.go @@ -75,6 +75,10 @@ func TestAnalyze(t *testing.T) { `1 directory b testdata/directory/file2.go:3:1 1 directory a testdata/directory/file1.go:3:1`, }, + { + []string{"testdata/ignore"}, + "", + }, } for _, tt := range tests { diff --git a/testdata/ignore/.dotname/file.go b/testdata/ignore/.dotname/file.go new file mode 100644 index 0000000..ccc228b --- /dev/null +++ b/testdata/ignore/.dotname/file.go @@ -0,0 +1,3 @@ +package dotname + +func a() {} diff --git a/testdata/ignore/_underscore/file.go b/testdata/ignore/_underscore/file.go new file mode 100644 index 0000000..53f97fc --- /dev/null +++ b/testdata/ignore/_underscore/file.go @@ -0,0 +1,3 @@ +package underscore + +func a() {} diff --git a/testdata/ignore/testdata/file.go b/testdata/ignore/testdata/file.go new file mode 100644 index 0000000..8eb84ea --- /dev/null +++ b/testdata/ignore/testdata/file.go @@ -0,0 +1,3 @@ +package testdata + +func a() {} diff --git a/testdata/ignore/vendor/file.go b/testdata/ignore/vendor/file.go new file mode 100644 index 0000000..9bb5cd0 --- /dev/null +++ b/testdata/ignore/vendor/file.go @@ -0,0 +1,3 @@ +package vendor + +func a() {}