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  }