The test correctly identified a problem.
Suppressing test to keep dashboard cleean, pending a fix.
Updates golang/go#28566
Change-Id: Ib3a8dbdd617c9f5701b5d6673434917d284dfb32
Reviewed-on: https://go-review.googlesource.com/c/147199
Run-TryBot: Alan Donovan <adonovan@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
Also:
- add cmd/vet-lite, a version of cmd/vet that doesn't depend on
go/packages and must be run under "go vet". This will be vendored
into $GOROOT/src/cmd/vet.
- add an integration test for a unitchecker-based command under "go vet".
Change-Id: Id613dac2812816c6d6372fa6d1536c8d4e4c2676
Reviewed-on: https://go-review.googlesource.com/c/143418
Reviewed-by: Ian Cottrell <iancottrell@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
Package facts provides an implementation of the Import/Export methods
of the analysis.Pass interface and functions to encode and decode
facts, using Gob encoding, to a file. It will be part of the vet-lite
driver (invoked by go vet) but the same logic has been validated in
other build systems such as Blaze.
Change-Id: I60ef561e84e833b9a3b17c269ab358e7d0800ff3
Reviewed-on: https://go-review.googlesource.com/c/144737
Reviewed-by: Jay Conrod <jayconrod@google.com>
Reviewed-by: Ian Cottrell <iancottrell@google.com>
packagestest.Modules is now available pre-go1.11 but doesn't add
itself to packagestest.All.
strings.ReplaceAll is not available in pre-go1.11
Change-Id: Ia8bf0e82bb853c6f29d31ca5c54651097342b19c
Reviewed-on: https://go-review.googlesource.com/c/143419
Reviewed-by: Ian Cottrell <iancottrell@google.com>
This is the new vet command. It can be run standalone:
$ vet my/project/...
or (soon) under go vet:
$ GOVETTOOL=$(which vet) go vet my/project/...
A forthcoming CL will add support for the second mode, and define a
vet-lite command that supports only that mode, but has fewer
dependencies; it is intended to be vendored into $GOROOT/src/cmd/vet.
Change-Id: I57696ae6d43aa31fd10b370247b7e7497f0f3597
Reviewed-on: https://go-review.googlesource.com/c/143417
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
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>
The default value of -findcall.name has been changed to ""
to avoid producing noise.
Change-Id: I71554080bcc7b6e23f632b49e30590fa0b0bc034
Reviewed-on: https://go-review.googlesource.com/c/143297
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
All the passes have been moved into their own packages.
The README file has been saved for the new cmd/analyze command,
which will shortly be renamed to vet.
Change-Id: I68c765a4da2f8d5a2b0161b462bd81483b5ceed5
Reviewed-on: https://go-review.googlesource.com/c/143301
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Due to a bug in go/types, a function f(...T) has no type
recorded for the parameter type expression ...T, and apparently
this has never occcured in a file checked by asmdecl before.
The addParams function should really be simplified to use types.Signature.
Updates golang/go#28277
Change-Id: I5b73535a7739b6771ffef1c0a7568f5161d564d5
Reviewed-on: https://go-review.googlesource.com/c/143298
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
vet's "divergent" testdata package exercises various mistakes
in naming Example functions.
vet's "incomplete" testdata package has been deleted because
it is no longer applicable. It was intended to ensure that a
x_test.go file specified on its own would not trigger false
positives without the corresponding x.go files, but the
new Analysis API always analysis complete packages.
Change-Id: I1a40ead340c806b571302fdaa537f481514b0c22
Reviewed-on: https://go-review.googlesource.com/c/143300
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
This check uses the control-flow graph and SSA value graph to detect
problems such as:
p := &v
...
if p != nil { // tautological condition
}
and:
if p == nil {
print(*p) // nil dereference
}
(It was originally developed within Google's Go analysis framework and
can now be published in a form useful to all analysis drivers.)
This CL also includes buildssa, an Analyzer that constructs SSA for
later analysis passes but does not report diagnostics or facts of its
own.
Change-Id: I27bc4eea10d71d958685a403234879112c21f433
Reviewed-on: https://go-review.googlesource.com/c/142698
Reviewed-by: Michael Matloob <matloob@golang.org>
These structs appear in test main files generated by "go test"
and so can be trusted.
Change-Id: I1514a8cdcbd633392ccaaedfa8eccf944d514129
Reviewed-on: https://go-review.googlesource.com/c/142699
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
...and other trivial cleanups.
Multi-line doc comments have been moved to exported Doc constants for
the sake of godoc.
Change-Id: Ib1cbec5806c699d51283c34685c4cd96953f5384
Reviewed-on: https://go-review.googlesource.com/c/142360
Reviewed-by: Michael Matloob <matloob@golang.org>
Guide to changes:
- The -printfuncs flag is renamed -printf.funcs.
It no longer supports "pkg.T.f" form, requiring instead
"(dir/pkg.T).f" or "(*dir/pkg.T).f".
The legacy ":%d" suffix is no longer supported.
- (*testing.T).Errorf and friends are removed from the isPrint map
because they are discovered by induction while analyzing package
"testing".
- localPrintfLike map operations are replaced by the Fact mechanism.
- The go/types representation is used instead of strings/ast.Nodes in
various places. For example:
pkgpath, name string -> *types.Func (to identify a function)
format, args *ast.Field -> *types.Var (to identify format/args params)
This was required to fix a latent bug in maybePrintfWrapper's
handling of format string parameters` declared using "factored"
syntax, such as: func f(foo, format string, args...interface{}).
See L253 of the original testdata file for a testcase that ensured
the buggy (?) behavior.
- func printfLike is removed as it was deadcode.
- isFormatter is rewritten to avoid a global variable.
- "if verbose { warn }" is replaced by "if false { report }" for now.
- recursive stringer is rewritten more simply in term of go/types.
Change-Id: Ia6ee827117b611c686e38207916a21fe1fc296e2
Reviewed-on: https://go-review.googlesource.com/c/142239
Reviewed-by: Michael Matloob <matloob@golang.org>
This is just a rename for ease of review.
The logic change will follow.
Change-Id: I8856b22f2157d63c6983c0f00a12c87e5d5dd1a4
Reviewed-on: https://go-review.googlesource.com/c/142357
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
CL 121876 made sync.noCopy implement sync.Locker and
added this as an assumption to vet. But now that copylock
is no longer in the standard library it cannot
assume that it is analyzing a recent standard library
in which noCopy has an Unlock method.
Change-Id: I5a30b3711ae6cc0855eb246fdd93b1906779bdde
Reviewed-on: https://go-review.googlesource.com/c/141683
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This file is nominally part of the core vet tool but in reality it is
only used by the printf checker.
This is just a rename; the actual change will come in a follow-up.
Change-Id: I5497d6888228e6781cf0d3ae62b7c6b5b723e151
Reviewed-on: https://go-review.googlesource.com/c/142240
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
This is a straight rename to simplify review of the actual change in a
follow-up CL. (This is a workaround for git diff's weak support for
renames.)
Change-Id: If63336d4f782e12066fce83a848465371013cdde
Reviewed-on: https://go-review.googlesource.com/c/142237
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
Now that asmdecl is not in the standard repo, we must not assume
that types.SizesFor knows about all architectures and panic if it
does not. This change makes it print a warning and assume 64-bit
norms.
Change-Id: Idacad350b2fc9343adfb32539fec7003b39380ed
Reviewed-on: https://go-review.googlesource.com/c/141679
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Duplicate root analyzers caused duplicate flag registration and other problems.
Change-Id: Id0c2761529c57ed1f9a63b669e62401ebf035cc2
Reviewed-on: https://go-review.googlesource.com/c/141159
Reviewed-by: Michael Matloob <matloob@golang.org>
This checker needed some reworking because whereas vet sees
unprocessed cgo source files (with partial type information), the
analysis API sees cgo-processed files with complete type information.
However, that means the checker must effectively undo some of the
transformations done by cgo, making it more fragile during changes to
cgo.
Change-Id: I3a243260f59b16e2e546e8f3e4585b93d3731192
Reviewed-on: https://go-review.googlesource.com/c/141157
Reviewed-by: Michael Matloob <matloob@golang.org>
The analysistest.Run function now applies a single analysis to
a set of packages, not just one, as this is necessary for testing
the "tests" Analyzer. The Run function also returns a richer
Result for each package, allowing a test to perform additional
checks if necessary.
I really don't understand how Gerrit decides whether to render
a file such as passes/tests/tests.go as a mv+edit or an add;
small changes to the CL seem to perturb the heuristic.
When reviewing these CLs please inspect the logical diff of
passes/vet/tests.go -> passes/tests/tests.go
Change-Id: I7812837278b20c8608ccbb6c709c675588a84db1
Reviewed-on: https://go-review.googlesource.com/c/140457
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
And rename from "bool" to "bools".
Using analysistest unearthed a minor bug,
github.com/golang/go/issues/28086.
To avoid complicating the diff we work
around it in the tests for now.
Change-Id: I682f33506de778dfdfe97841cd2b16e3d47062b8
Reviewed-on: https://go-review.googlesource.com/c/140737
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
Also: don't abort loading just because there were parse/type errors.
It's the driver's job to decide whether to fail due to errors.
Change-Id: I055033fb89319d957b328c4fa4a30144afc7457c
Reviewed-on: https://go-review.googlesource.com/c/140738
Run-TryBot: Michael Matloob <matloob@golang.org>
Reviewed-by: Michael Matloob <matloob@golang.org>
Also, rename to stdmethods and add more tests.
Change-Id: I09b65899dc02a8062f3ec1d909c2eae45472e236
Reviewed-on: https://go-review.googlesource.com/c/140761
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
Also: create internal/analysisutil package for
trivial helper functions shared by many vet analyzers.
(Eventually we may want to export some of these functions.)
Change-Id: I2b721a16989826756d0426bc7f70089dfb1ef9ce
Reviewed-on: https://go-review.googlesource.com/c/140577
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
This analysis was renamed from "rangeloops" since it applies equally
to non-range for-loops.
Change-Id: I441378b29d36aaf7fe102913c5b3aaa7cfd351a0
Reviewed-on: https://go-review.googlesource.com/c/140578
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
Also: extend analysistest to extract '// want ...' comments
out of non-Go source files such as assembly.
This change also moves asm8.s file into the right directory
so that it gets exercised by the test.
All the .s files were git-mv'd and then the ERROR comments
were changed to 'want'; also +build vet_test tags were removed.
Sadly Gerrit reports the old and new files as unrelated...
Change-Id: I8a2ecd6dd6fb0e20630f0ba6205c4378e4e912b3
Reviewed-on: https://go-review.googlesource.com/c/140120
Reviewed-by: Michael Matloob <matloob@golang.org>
buildtag checker:
- This checker has been modified from the version in vet to handle Go
and non-Go files differently, to avoid having to re-read-and-parse
Go files in the common case.
- The old cmd/vet driver would run this check on all the files in
a directory whereas new drivers will run it only on the files
selected for a particular configuration, so some of the checks
(those in checkArguments) will never fire. But this is not a regression
relative to 'go vet', because it too presents cmd/vet with only the
files selected as part of the package.
analysistest:
- fix bug that processed a block of //-comments as one.
- treat "...// want..." within a //-comment as a want comment.
This is required for adding expectations on lines that are already comments.
Change-Id: Iacf3684864e07532f77176481afbf059a9638f3b
Reviewed-on: https://go-review.googlesource.com/c/139797
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
The ctrlflow Analyzer builds a control-flow graph (see
golang.org/x/tools/go/cfg) for each named and unnamed function in the
package.
It computes for each function whether it can never return, either
because the function is an intrinsic that stops the thread (e.g.
os.Exit), or because control never reaches a return statement, or
because the function inevitably calls another function that never
returns. For each such function it exports a noReturn fact.
This change also:
- adds 'inspect', another Analyzer that builds an optimized AST
traversal table for use by nearly every other Analyzer.
- changes analysistest.Run to return the analysis result to enable
further testing.
(This required changing it to analyze one package at a time,
which is no less efficient, and is the typical case.)
Change-Id: I877e2b2363a365a9976aa9c2719ad3fba4df2634
Reviewed-on: https://go-review.googlesource.com/c/139478
Reviewed-by: Michael Matloob <matloob@golang.org>
internal/checker
- don't display "[name.category]" in diagnostic
output. Most users don't care which analyzer reported the message.
The -json output retains this information.
- print better log messages for analyze -debug=f.
- print (non-JSON) text output to standard error, like a compiler would.
passes/pkgfact
- fix a nil deref panic when encountering non-renaming imports.
- require names to have underscores before and after (_x_)
as this avoids a huge number of spurious matches in (e.g.) the
syscall package.
- don't export empty facts.
Change-Id: I86c003b96521334e371f9d5fcea1323cd779d7f0
Reviewed-on: https://go-review.googlesource.com/c/139657
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
CL 139320 unset these env vars for the whole process in two tests,
but the correct fix is to unset them for subprocesses forked by go/packages.
Change-Id: I35e3ab9e424b00326e9e813e4daf0ae92ec36e26
Reviewed-on: https://go-review.googlesource.com/c/139477
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This fixes 'go test ./...' in the root of the tools repo with GO111MODULE=on.
Updates golang/go#27858
Change-Id: I7492d2a2406997a399fe2badd24882fcb19d37c5
Reviewed-on: https://go-review.googlesource.com/c/139320
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Michael Matloob <matloob@golang.org>
This change adds support for testing the facts produced by an Analyzer
using a similar mechanism to the way it checks for diagnostics.
A "// want ..." comment may now contain a mixture of expectations for
diagnostics and facts. Diagnostics are indicated by a string literal,
as before. Facts are indicated by name:"regexp" where name identifies
the object (declared on the same line) with which the fact is
associated.
func neverReturns() { // want neverReturns:"noReturn"
for {}
}
Also:
- analysistest: report errors during package loading.
(We don't yet have a way to test RunDespiteErrors Analyzers in the
face of errors.)
- tests for Facts produced by findcall and pkgfacts.
(Findcall now produces facts just for testing.)
- Add String method to various Fact types.
Should the Fact interface have this method?
Change-Id: Ifa15fbd49d6ec3042b5fe9d3ebf22f4bdfdc8769
Reviewed-on: https://go-review.googlesource.com/139157
Reviewed-by: Michael Matloob <matloob@golang.org>