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 }