github.com/elek/golangci-lint@v1.42.2-0.20211208090441-c05b7fcb3a9a/pkg/golinters/storjcopyright.go (about) 1 // Copyright (C) 2019 Storj Labs, Inc. 2 // See LICENSE for copying information. 3 4 package golinters 5 6 import ( 7 "bytes" 8 "errors" 9 "fmt" 10 "github.com/elek/golangci-lint/pkg/golinters/goanalysis" 11 "github.com/elek/golangci-lint/pkg/lint/linter" 12 "golang.org/x/tools/go/analysis" 13 "io" 14 "os" 15 "path/filepath" 16 ) 17 18 var checkFiles = map[string]bool{ 19 ".go": true, 20 ".ts": true, 21 ".js": true, 22 ".vue": true, 23 } 24 25 var ignoreFolder = map[string]bool{ 26 ".git": true, 27 "node_modules": true, 28 "coverage": true, 29 "dist": true, 30 } 31 32 func NewCopyrightCheck() *goanalysis.Linter { 33 analyzer := analysis.Analyzer{ 34 Name: "storjcopyright", 35 Doc: "asd", 36 } 37 return goanalysis.NewLinter( 38 "storjcopyright", 39 "Check STORJ copyrightheaders", 40 []*analysis.Analyzer{ 41 &analyzer, 42 }, 43 nil, 44 ).WithContextSetter(func(context *linter.Context) { 45 analyzer.Run = func(pass *analysis.Pass) (interface{}, error) { 46 for _, file := range pass.Files { 47 context.Log.Infof("Ahoj %s", file) 48 } 49 return nil, nil 50 } 51 }) 52 } 53 54 func foobar() { 55 var failed int 56 57 err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error { 58 if err != nil { 59 fmt.Println(err) 60 return nil 61 } 62 if info.IsDir() && ignoreFolder[info.Name()] { 63 return filepath.SkipDir 64 } 65 if !checkFiles[filepath.Ext(path)] { 66 return nil 67 } 68 69 file, err := os.Open(path) 70 if err != nil { 71 failed++ 72 fmt.Printf("failed to read %v: %v\n", path, err) 73 return nil 74 } 75 defer func() { 76 if err := file.Close(); err != nil { 77 fmt.Println(err) 78 } 79 }() 80 81 var header [256]byte 82 n, err := file.Read(header[:]) 83 if err != nil && !errors.Is(err, io.EOF) { 84 fmt.Printf("failed to read %v: %v\n", path, err) 85 return nil 86 } 87 88 if bytes.Contains(header[:n], []byte(`AUTOGENERATED`)) || 89 bytes.Contains(header[:n], []byte(`Code generated`)) || 90 bytes.Contains(header[:n], []byte(`Autogenerated`)) { 91 return nil 92 } 93 94 if !bytes.Contains(header[:n], []byte(`Copyright `)) { 95 failed++ 96 fmt.Printf("missing copyright: %v\n", path) 97 } 98 99 return nil 100 }) 101 if err != nil { 102 fmt.Println(err) 103 } 104 105 if failed > 0 { 106 os.Exit(1) 107 } 108 }