github.com/grafana/tanka@v0.26.1-0.20240506093700-c22cfc35c21a/cmd/tk/lint.go (about)

     1  package main
     2  
     3  import (
     4  	"github.com/go-clix/cli"
     5  	"github.com/gobwas/glob"
     6  	"github.com/posener/complete"
     7  
     8  	"github.com/grafana/tanka/pkg/jsonnet"
     9  )
    10  
    11  func lintCmd() *cli.Command {
    12  	cmd := &cli.Command{
    13  		Use:   "lint <FILES|DIRECTORIES>",
    14  		Short: "lint Jsonnet code",
    15  		Args: cli.Args{
    16  			Validator: cli.ArgsMin(1),
    17  			Predictor: complete.PredictFiles("*.*sonnet"),
    18  		},
    19  	}
    20  
    21  	exclude := cmd.Flags().StringSliceP("exclude", "e", []string{"**/.*", ".*", "**/vendor/**", "vendor/**"}, "globs to exclude")
    22  	parallelism := cmd.Flags().IntP("parallelism", "n", 4, "amount of workers")
    23  
    24  	// this is now always sent as debug logs
    25  	cmd.Flags().BoolP("verbose", "v", false, "print each checked file")
    26  	if err := cmd.Flags().MarkDeprecated("verbose", "logs are sent to debug now, this is unused"); err != nil {
    27  		panic(err)
    28  	}
    29  
    30  	cmd.Run = func(cmd *cli.Command, args []string) error {
    31  		globs := make([]glob.Glob, len(*exclude))
    32  		for i, e := range *exclude {
    33  			g, err := glob.Compile(e)
    34  			if err != nil {
    35  				return err
    36  			}
    37  			globs[i] = g
    38  		}
    39  
    40  		return jsonnet.Lint(args, &jsonnet.LintOpts{Excludes: globs, Parallelism: *parallelism})
    41  	}
    42  
    43  	return cmd
    44  }