From e82c28b422abc4e886dcbad2fd120b2c2fad7a8c Mon Sep 17 00:00:00 2001 From: tenntenn Date: Mon, 23 Nov 2020 16:12:03 +0900 Subject: [PATCH 1/2] Add IsGeneratedFile --- file.go | 17 +++++++++++++++++ file_test.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 file_test.go diff --git a/file.go b/file.go index 2aeca1d..05cb5c8 100644 --- a/file.go +++ b/file.go @@ -3,6 +3,7 @@ package analysisutil import ( "go/ast" "go/token" + "regexp" "golang.org/x/tools/go/analysis" ) @@ -16,3 +17,19 @@ func File(pass *analysis.Pass, pos token.Pos) *ast.File { } return nil } + +var genCommentRegexp = regexp.MustCompile(`^// Code generated .* DO NOT EDIT\.$`) + +// IsGeneratedFile reports whether the file has been generated automatically. +// If file is nil, IsGeneratedFile will return false. +func IsGeneratedFile(file *ast.File) bool { + if file == nil || file.Doc == nil { + return false + } + return genCommentRegexp.MatchString(file.Doc.List[0].Text) +} + +// IsGenerated reports whether a file which include pos has been generated automatically. +func IsGenerated(pass *analysis.Pass, pos token.Pos) bool { + return IsGeneratedFile(File(pass, pos)) +} diff --git a/file_test.go b/file_test.go new file mode 100644 index 0000000..341e7c5 --- /dev/null +++ b/file_test.go @@ -0,0 +1,46 @@ +package analysisutil_test + +import ( + "fmt" + "path/filepath" + "testing" + + "github.com/gostaticanalysis/analysisutil" + "golang.org/x/tools/go/analysis" + "golang.org/x/tools/go/analysis/analysistest" +) + +func TestIsGeneratedFile(t *testing.T) { + t.Parallel() + + cases := map[string]struct { + src string + want bool + }{ + "true": {"// Code generated by test; DO NOT EDIT.", true}, + "false": {"//Code generated by test; DO NOT EDIT.", false}, + "empty": {"", false}, + } + + for name, tt := range cases { + name, tt := name, tt + t.Run(name, func(t *testing.T) { + t.Parallel() + a := &analysis.Analyzer{ + Name: name + "Analyzer", + Run: func(pass *analysis.Pass) (interface{}, error) { + got := analysisutil.IsGeneratedFile(pass.Files[0]) + if tt.want != got { + return nil, fmt.Errorf("want %v but got %v", tt.want, got) + } + return nil, nil + }, + } + path := filepath.Join(name, name+".go") + dir := WriteFiles(t, map[string]string{ + path: fmt.Sprintf("%s\npackage %s", tt.src, name), + }) + analysistest.Run(t, dir, a, name) + }) + } +} From 5c234c7442bb570bb585375ca824a2a6c900ec86 Mon Sep 17 00:00:00 2001 From: tenntenn Date: Mon, 23 Nov 2020 16:14:47 +0900 Subject: [PATCH 2/2] Remove IsGenerated --- file.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/file.go b/file.go index 05cb5c8..f7d0e9b 100644 --- a/file.go +++ b/file.go @@ -28,8 +28,3 @@ func IsGeneratedFile(file *ast.File) bool { } return genCommentRegexp.MatchString(file.Doc.List[0].Text) } - -// IsGenerated reports whether a file which include pos has been generated automatically. -func IsGenerated(pass *analysis.Pass, pos token.Pos) bool { - return IsGeneratedFile(File(pass, pos)) -}