aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/vet/main.go
diff options
context:
space:
mode:
authorAlan Donovan <adonovan@google.com>2018-10-16 14:35:01 -0400
committerAlan Donovan <adonovan@google.com>2018-10-17 21:39:52 +0000
commit398b54df56ed57e3e1b333d7621dac414eda612e (patch)
tree44d1560bb877fb5b3e24e4323eeac95fa283c95e /src/cmd/vet/main.go
parent4bea6c65947caf815ad4dde8bf50c43dcca539be (diff)
downloadgo-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.go30
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).