1// Copyright 2012 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package main
6
7import (
8	"cmd/internal/objabi"
9	"cmd/internal/telemetry/counter"
10	"flag"
11
12	"golang.org/x/tools/go/analysis/unitchecker"
13
14	"golang.org/x/tools/go/analysis/passes/appends"
15	"golang.org/x/tools/go/analysis/passes/asmdecl"
16	"golang.org/x/tools/go/analysis/passes/assign"
17	"golang.org/x/tools/go/analysis/passes/atomic"
18	"golang.org/x/tools/go/analysis/passes/bools"
19	"golang.org/x/tools/go/analysis/passes/buildtag"
20	"golang.org/x/tools/go/analysis/passes/cgocall"
21	"golang.org/x/tools/go/analysis/passes/composite"
22	"golang.org/x/tools/go/analysis/passes/copylock"
23	"golang.org/x/tools/go/analysis/passes/defers"
24	"golang.org/x/tools/go/analysis/passes/directive"
25	"golang.org/x/tools/go/analysis/passes/errorsas"
26	"golang.org/x/tools/go/analysis/passes/framepointer"
27	"golang.org/x/tools/go/analysis/passes/httpresponse"
28	"golang.org/x/tools/go/analysis/passes/ifaceassert"
29	"golang.org/x/tools/go/analysis/passes/loopclosure"
30	"golang.org/x/tools/go/analysis/passes/lostcancel"
31	"golang.org/x/tools/go/analysis/passes/nilfunc"
32	"golang.org/x/tools/go/analysis/passes/printf"
33	"golang.org/x/tools/go/analysis/passes/shift"
34	"golang.org/x/tools/go/analysis/passes/sigchanyzer"
35	"golang.org/x/tools/go/analysis/passes/slog"
36	"golang.org/x/tools/go/analysis/passes/stdmethods"
37	"golang.org/x/tools/go/analysis/passes/stdversion"
38	"golang.org/x/tools/go/analysis/passes/stringintconv"
39	"golang.org/x/tools/go/analysis/passes/structtag"
40	"golang.org/x/tools/go/analysis/passes/testinggoroutine"
41	"golang.org/x/tools/go/analysis/passes/tests"
42	"golang.org/x/tools/go/analysis/passes/timeformat"
43	"golang.org/x/tools/go/analysis/passes/unmarshal"
44	"golang.org/x/tools/go/analysis/passes/unreachable"
45	"golang.org/x/tools/go/analysis/passes/unsafeptr"
46	"golang.org/x/tools/go/analysis/passes/unusedresult"
47)
48
49func main() {
50	counter.Open()
51	objabi.AddVersionFlag()
52
53	counter.Inc("vet/invocations")
54	unitchecker.Main(
55		appends.Analyzer,
56		asmdecl.Analyzer,
57		assign.Analyzer,
58		atomic.Analyzer,
59		bools.Analyzer,
60		buildtag.Analyzer,
61		cgocall.Analyzer,
62		composite.Analyzer,
63		copylock.Analyzer,
64		defers.Analyzer,
65		directive.Analyzer,
66		errorsas.Analyzer,
67		framepointer.Analyzer,
68		httpresponse.Analyzer,
69		ifaceassert.Analyzer,
70		loopclosure.Analyzer,
71		lostcancel.Analyzer,
72		nilfunc.Analyzer,
73		printf.Analyzer,
74		shift.Analyzer,
75		sigchanyzer.Analyzer,
76		slog.Analyzer,
77		stdmethods.Analyzer,
78		stdversion.Analyzer,
79		stringintconv.Analyzer,
80		structtag.Analyzer,
81		tests.Analyzer,
82		testinggoroutine.Analyzer,
83		timeformat.Analyzer,
84		unmarshal.Analyzer,
85		unreachable.Analyzer,
86		unsafeptr.Analyzer,
87		unusedresult.Analyzer,
88	)
89
90	// It's possible that unitchecker will exit early. In
91	// those cases the flags won't be counted.
92	counter.CountFlags("vet/flag:", *flag.CommandLine)
93}
94