diff options
author | Alan Donovan <adonovan@google.com> | 2018-10-16 14:35:01 -0400 |
---|---|---|
committer | Alan Donovan <adonovan@google.com> | 2018-10-17 21:39:52 +0000 |
commit | 398b54df56ed57e3e1b333d7621dac414eda612e (patch) | |
tree | 44d1560bb877fb5b3e24e4323eeac95fa283c95e /src/cmd/vet/main.go | |
parent | 4bea6c65947caf815ad4dde8bf50c43dcca539be (diff) | |
download | go-398b54df56ed57e3e1b333d7621dac414eda612e.tar.gz go-398b54df56ed57e3e1b333d7621dac414eda612e.zip |
cmd/go: make go vet query cmd/vet for its flags
Add -flags flag to cmd/vet that causes it to describe its flags as JSON.
go vet's "-vettool" flag has been replaced with an environment
variable, GOVETTOOL, for two reasons:
1) we need its value before flag processing,
because we must run vet to discover its flags.
2) users may change the env var to opt in/out of the new vet tool
during the upcoming transition to vet based on the analysis API.
Change-Id: I5d8f90817623022f4170b88fab3c92c9b2fbdc37
Reviewed-on: https://go-review.googlesource.com/c/142617
Run-TryBot: Alan Donovan <adonovan@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Diffstat (limited to 'src/cmd/vet/main.go')
-rw-r--r-- | src/cmd/vet/main.go | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/src/cmd/vet/main.go b/src/cmd/vet/main.go index 6e885121c8..cf91e4d596 100644 --- a/src/cmd/vet/main.go +++ b/src/cmd/vet/main.go @@ -22,6 +22,7 @@ import ( "go/types" "io" "io/ioutil" + "log" "os" "path/filepath" "sort" @@ -31,10 +32,9 @@ import ( "cmd/internal/objabi" ) -// Important! If you add flags here, make sure to update cmd/go/internal/vet/vetflag.go. - var ( verbose = flag.Bool("v", false, "verbose") + flags = flag.Bool("flags", false, "print flags in JSON") source = flag.Bool("source", false, "import from source instead of compiled object files") tags = flag.String("tags", "", "space-separated list of build tags to apply when parsing") tagList = []string{} // exploded version of tags flag; set in main @@ -259,6 +259,32 @@ func main() { flag.Usage = Usage flag.Parse() + // -flags: print flags as JSON. Used by go vet. + if *flags { + type jsonFlag struct { + Name string + Bool bool + Usage string + } + var jsonFlags []jsonFlag + flag.VisitAll(func(f *flag.Flag) { + isBool := false + switch v := f.Value.(type) { + case interface{ BoolFlag() bool }: + isBool = v.BoolFlag() + case *triState: + isBool = true // go vet should treat it as boolean + } + jsonFlags = append(jsonFlags, jsonFlag{f.Name, isBool, f.Usage}) + }) + data, err := json.MarshalIndent(jsonFlags, "", "\t") + if err != nil { + log.Fatal(err) + } + os.Stdout.Write(data) + os.Exit(0) + } + // If any flag is set, we run only those checks requested. // If all flag is set true or if no flags are set true, set all the non-experimental ones // not explicitly set (in effect, set the "-all" flag). |