1// Copyright 2017 The OPA Authors. All rights reserved. 2// Use of this source code is governed by an Apache2 3// license that can be found in the LICENSE file. 4 5package cmd 6 7import ( 8 "fmt" 9 10 "github.com/spf13/pflag" 11 12 "github.com/open-policy-agent/opa/ast" 13 "github.com/open-policy-agent/opa/util" 14) 15 16func addFailFlag(fs *pflag.FlagSet, fail *bool, value bool) { 17 fs.BoolVarP(fail, "fail", "", value, "exits with non-zero exit code on undefined/empty result and errors") 18} 19 20func addDataFlag(fs *pflag.FlagSet, paths *repeatedStringFlag) { 21 fs.VarP(paths, "data", "d", "set data file(s) or directory path(s)") 22} 23 24func addBundleFlag(fs *pflag.FlagSet, paths *repeatedStringFlag) { 25 fs.VarP(paths, "bundle", "b", "set bundle file(s) or directory path(s)") 26} 27 28func addInputFlag(fs *pflag.FlagSet, inputPath *string) { 29 fs.StringVarP(inputPath, "input", "i", "", "set input file path") 30} 31 32func addImportFlag(fs *pflag.FlagSet, imports *repeatedStringFlag) { 33 fs.VarP(imports, "import", "", "set query import(s)") 34} 35 36func addPackageFlag(fs *pflag.FlagSet, pkg *string) { 37 fs.StringVarP(pkg, "package", "", "", "set query package") 38} 39 40func addQueryStdinFlag(fs *pflag.FlagSet, stdin *bool) { 41 fs.BoolVarP(stdin, "stdin", "", false, "read query from stdin") 42} 43 44func addInputStdinFlag(fs *pflag.FlagSet, stdinInput *bool) { 45 fs.BoolVarP(stdinInput, "stdin-input", "I", false, "read input document from stdin") 46} 47 48func addMetricsFlag(fs *pflag.FlagSet, metrics *bool, value bool) { 49 fs.BoolVarP(metrics, "metrics", "", value, "report query performance metrics") 50} 51 52func addOutputFormat(fs *pflag.FlagSet, outputFormat *util.EnumFlag) { 53 fs.VarP(outputFormat, "format", "f", "set output format") 54} 55 56func addBenchmemFlag(fs *pflag.FlagSet, benchMem *bool, value bool) { 57 fs.BoolVar(benchMem, "benchmem", value, "report memory allocations with benchmark results") 58} 59 60func addCountFlag(fs *pflag.FlagSet, count *int, cmdType string) { 61 fs.IntVar(count, "count", 1, fmt.Sprintf("number of times to repeat each %s (default 1)", cmdType)) 62} 63 64func addMaxErrorsFlag(fs *pflag.FlagSet, errLimit *int) { 65 fs.IntVarP(errLimit, "max-errors", "m", ast.CompileErrorLimitDefault, "set the number of errors to allow before compilation fails early") 66} 67 68func addIgnoreFlag(fs *pflag.FlagSet, ignoreNames *[]string) { 69 fs.StringSliceVarP(ignoreNames, "ignore", "", []string{}, "set file and directory names to ignore during loading (e.g., '.*' excludes hidden files)") 70} 71 72const ( 73 explainModeOff = "off" 74 explainModeFull = "full" 75 explainModeNotes = "notes" 76 explainModeFails = "fails" 77) 78 79func newExplainFlag(modes []string) *util.EnumFlag { 80 return util.NewEnumFlag(modes[0], modes) 81} 82 83func setExplainFlag(fs *pflag.FlagSet, explain *util.EnumFlag) { 84 fs.VarP(explain, "explain", "", "enable query explanations") 85} 86