Commit Graph

6 Commits

Author SHA1 Message Date
Daniel Martí c161412db0 go/analysis/singlechecker: use Stderr in flag.Usage
It was using a mix of stdout and stderr. Most users won't notice, but
it's inconsistent for no apparent reason. In particular, I noticed as
some of my tool execution tests started failing.

Change-Id: I9afe5f5bed0a575d3ba20e8dc1cc593c35565cf9
Reviewed-on: https://go-review.googlesource.com/c/162717
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
2019-02-14 16:35:53 +00:00
Alan Donovan 17409aa234 go/analysis/unitchecker: a main function for vet-lite tools
(By "vet lite", we mean static tools that must be invoked by a build
system, such as 'go vet'.)

This CL publishes the former internal/unitchecker package.
Its misnamed Main function is renamed Run, and it has a new Main
that does the steps of a real main (log, flag, etc).

The motivation for this change is to reduce cmd/vet-lite to the point
of triviality to simplify the maintenance of the vendored copy of
x/tools in GOROOT, because GOROOT/src/cmd/vet will need a copy of that
logic. It is now essentially a one-liner.

Also, improve usage messages; analysisflags.PrintUsage wasn't
appropriate for all callers so it has been eliminated.
Each of {single,multi,unit}checker prints its own 1-line usage message.

Change-Id: I214c0e4ae7a2923eee8df3f7548341f2320cad2b
Reviewed-on: https://go-review.googlesource.com/c/149742
Reviewed-by: Michael Matloob <matloob@golang.org>
2018-11-15 16:00:22 +00:00
Alan Donovan 7d6b83ca4d go/analysis: exit nonzero upon diagnostics
This change causes singlechecker and multichecker to exit with the
correct error code: 0 for success, 1 for load/analysis and other
errors, 3 for diagnostics.  (We avoid 2 because the flag package uses
it.)

In JSON mode, errors in package loading, parsing, typechecking and
analysis are successfully in JSON format, with exit code 0.

+ Test.

Change-Id: Iaf130ed3d4cb3e747a628af6da8dc97d065aa869
Reviewed-on: https://go-review.googlesource.com/c/149603
Run-TryBot: Alan Donovan <adonovan@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2018-11-14 17:55:09 +00:00
Alan Donovan a019f6b7c5 go/analysis/internal/analysisflags: common flag handling
The analysisflags package provides a function to help
ensure that all drivers support consistent command-line
interfaces.  In particular, -analyzer.enable flags use
tristate logic as in vet, and the -flags flag dumps
a list of flags in JSON for use by 'go vet' and other
build systems.

This code is in a separate package from internal/checker
(the common parts of multichecker, singlechecker)
because we don't want the forthcoming vet-lite (formerly
known as doctor) driver to have an unnecessary dependency
on go/packages.  (When go/packages is promoted to the
standard library we can consolidate them.)

+ Test of tristate analyzer selection logic.

Change-Id: I5ea4e556e0f56505df06eb8fa9dd9eed884a1b47
Reviewed-on: https://go-review.googlesource.com/c/143197
Reviewed-by: Michael Matloob <matloob@golang.org>
2018-10-19 17:43:12 +00:00
Alan Donovan 51aacb1402 go/analysis: add command-line help
The format of Analyzer.Doc is now specified as a short title followed
by a longer description. This allows us to build a nice
self-documenting command-line interface. Much of the documentation in
vet's doc.go and file-level comments can now be displayed to the user.

Change-Id: I462343e97ac9b743284aaa3e06e7a81d11e9593f
Reviewed-on: https://go-review.googlesource.com/138396
Reviewed-by: Michael Matloob <matloob@golang.org>
2018-09-28 16:51:45 +00:00
Alan Donovan d5fdb01c2f go/analysis/internal/checker: analysis driver based on go/packages
Package checker is a driver for the analysis API.
It is an internal package, but is exposed by three different APIs:
analysistest, singlechecker, and multichecker.

Checker uses go/packages to load the specified packages (plus their
dependencies, if any analysis uses facts) from source code.

It constructs a graph of actions (analysis passes), whose dependency
edges may be "horizontal", when one analyzer depends on the output of
another applied to the same package, or "vertical", when an an
analyzer consumes facts produced by the same analyzer applied to a
dependency package.
The graph is executed in parallel, unless -debug=p.

Facts are passed from one pass to another in memory.
If -debug=s, facts are serialized, to exercise that logic.

Findings are printed at the end.
The -json flag selects JSON output.

Use -debug=t to print timing information.
Always use -debug=tp, for sequential mode, when timing.

Also:
- analysistest:  a wrapper for testing checkers
- multichecker:  a wrapper for writing multi-checker tools
                 Analysis flags are prefixed by name: -findcall.name=foo.
- cmd/analyze:   a command-line tool based on multichecker
- singlechecker: a wrapper for writing single-checker tools
                 Analysis flags are unprefixed: -name=foo.
- passes/findcall/cmd/findcall: a standalone tool for the findcall analysis
- tests for findcall
- tests for pkgfact

Change-Id: Icfd4a49cee17e7de1ddb6ec15a62dc667fb2db04
Reviewed-on: https://go-review.googlesource.com/135679
Reviewed-by: Ian Cottrell <iancottrell@google.com>
2018-09-26 01:25:07 +00:00