Commit Graph

209 Commits

Author SHA1 Message Date
André Martins 73b12cab25 go/analysis/passes/structtag: ignore warning if tag should be ignored
Having a private field with a json tag does not necessary means the
field needs to be exposed publicly. This change ignores the warning of
such fields that contain a json tag with the field tag "-".

The lines added in the unit tests will fail without these changes with
the error:
```
a/a.go:36:2: unexpected diagnostic: struct field b has json tag but is not exported
```

Change-Id: Ife987b99c264ae3b60a702e43a1f9c778f8c2d62
Reviewed-on: https://go-review.googlesource.com/c/tools/+/245857
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
2020-08-10 15:05:53 +00:00
KimMachineGun 7041913083 go/analysis/passes/unmarshal: Add check for asn1.Unmarshal
Unmarshal package checks whether `Unmarshal` and(or) `Decode` call of `encoding/json`, `encoding/xml` and `encoding/gob` package is valid or not. However, it didn't check `encoding/asn1` package's one.

This change makes it check whether `asn1.Unmarshal` call is valid or not as well.

Change-Id: If32d243f3a82ebb5ca3ca80657f4616e5daced2f
GitHub-Last-Rev: e61a96941ee64d7d141e635b374fe07104751283
GitHub-Pull-Request: golang/tools#243
Reviewed-on: https://go-review.googlesource.com/c/tools/+/243397
Reviewed-by: Michael Matloob <matloob@golang.org>
2020-07-22 15:42:47 +00:00
smasher164 c1934b75d0 go/analysis: improve error message for string(int) warning
To an experienced Go user, the previous error message doesn't describe
the error--it merely states a fact. The new error message asks if the
user meant fmt.Sprint(x). If they used the conversion correctly, the
suggested fix to replace string(int) with string(rune(int)) is
understandable and valid. On the other hand, if they used it to print
a digit representation, asking that in the error message further
emphasizes the mistake.

Updates golang/go#39151.

Change-Id: Iab9cdcaf53e9ca134285246fad0546d6f24c3983
Reviewed-on: https://go-review.googlesource.com/c/tools/+/235797
Run-TryBot: Akhil Indurti <aindurti@gmail.com>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Jay Conrod <jayconrod@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-06-16 13:34:36 +00:00
Dominik Honnef eb789aa7ce go/analysis/internal/checker: don't filter facts of parameters
Change-Id: Iec34ff62159b77eda6732e16b710a5809cf7329b
Reviewed-on: https://go-review.googlesource.com/c/tools/+/236526
Run-TryBot: Dominik Honnef <dominik@honnef.co>
Reviewed-by: Michael Matloob <matloob@golang.org>
2020-06-09 16:44:05 +00:00
Michael Matloob 1679474780 go/analysis: suggest to users how to associate diagnostics with severities
Add to the go/analysis docs the suggestion made by Ian Cottrell that diagnostic
severities should be classified by analyzer.

Updates golang/go#34508

Change-Id: I9a75fb1400269ece32c9ca52afbf6c7975d3e205
Reviewed-on: https://go-review.googlesource.com/c/tools/+/230312
Run-TryBot: Michael Matloob <matloob@golang.org>
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
Reviewed-by: Ian Cottrell <iancottrell@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-06-05 17:09:33 +00:00
Michael Schaller 8b020aee10 go/analysis/passes/printf: allow %O in format strings
%O is supported since Go 1.13. See golang.org/design/19308-number-literals for
the background.

Support for %O has been added by copying and adapting the %o implementation.

Updates golang/go#29986

Change-Id: Ic49d3cc8d9aefcc0ecbfcfe5ebf206e6f951d413
Reviewed-on: https://go-review.googlesource.com/c/tools/+/235100
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
2020-05-26 22:44:56 +00:00
Dominik Honnef 4697a2867c go/analysis/analysistest: support testing mutually exclusive suggested fixes
Fixes golang/go#38431.

Change-Id: Ib2e389a7a657b8ff80995972cd3bcbcb937aeabb
Reviewed-on: https://go-review.googlesource.com/c/tools/+/229257
Run-TryBot: Dominik Honnef <dominik@honnef.co>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Michael Matloob <matloob@golang.org>
2020-04-27 21:46:58 +00:00
Dominik Honnef 92398ad77b go/analysis/analysistest: print unified diff for test failures
Instead of printing the golden file and actual output using %#v, print
a unified diff. That way, instead of a possibly long, hard to decipher
error like this

        analysistest.go:134: suggested fixes failed for /home/dominikh/prj/src/honnef.co/go/tools/simple/testdata/src/CheckDeclareAssign/LintDeclareAssign.go, expected:
            "package pkg\n\nfunc fn() {\n\tvar x int = 1\n\t_ = x\n\n\tvar y interface{} = 1\n\t_ = y\n\n\tif true {\n\t\tvar x string = \"a\"\n\t\t_ = x\n\t}\n\n\tvar z []string\n\tz = append(z, \"\")\n\t_ = z\n\n\tvar f func()\n\tf = func() { f() }\n\t_ = f\n\n\tvar a int\n\ta = 1\n\ta = 2\n\t_ = a\n\n\tvar b int\n\tb = 1\n\t// do stuff\n\tb = 2\n\t_ = b\n}\n"
            got:
            "package pkg\n\nfunc fn() {\n\tvar x int = 1\n\t_ = x\n\n\tvar y interface{} = 1\n\t_ = y\n\n\tif true {\n\t\tvar x string = \"\"\n\t\t_ = x\n\t}\n\n\tvar z []string\n\tz = append(z, \"\")\n\t_ = z\n\n\tvar f func()\n\tf = func() { f() }\n\t_ = f\n\n\tvar a int\n\ta = 1\n\ta = 2\n\t_ = a\n\n\tvar b int\n\tb = 1\n\t// do stuff\n\tb = 2\n\t_ = b\n}\n"

we get a much more concise and readable diff:

        analysistest.go:133: suggested fixes failed for /home/dominikh/prj/src/honnef.co/go/tools/simple/testdata/src/CheckDeclareAssign/LintDeclareAssign.go:
            --- /home/dominikh/prj/src/honnef.co/go/tools/simple/testdata/src/CheckDeclareAssign/LintDeclareAssign.go.golden
            +++ actual
            @@ -8,7 +8,7 @@
             	_ = y

             	if true {
            -		var x string = "a"
            +		var x string = ""
             		_ = x
             	}

One downside of this approach is that unprintable characters won't be
visible in the diff. However, the vast majority of Go code does not
contain unprintable characters, and an even smaller amount of
suggested fixes affect unprintable characters. It is worth optimizing
readability for the common case.

Change-Id: I857aa6b6ee719f0fb018d5007eb162882e79cc25
Reviewed-on: https://go-review.googlesource.com/c/tools/+/228118
Run-TryBot: Dominik Honnef <dominik@honnef.co>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
Reviewed-by: Michael Matloob <matloob@golang.org>
2020-04-15 00:09:39 +00:00
Yasuhiro Matsumoto 0037cb7812 all: Fix spelling of Marshaling.
The single "l" form is used throughout the adjacent tools package
and the Go standard library.

Change-Id: I88c3530ef9d3b1354895d342e39403fa20ccd4d1
Reviewed-on: https://go-review.googlesource.com/c/tools/+/228237
Reviewed-by: Ian Cottrell <iancottrell@google.com>
2020-04-14 13:15:30 +00:00
Dominik Honnef ae52e4b557 go/analysis/analysistest: give up if we can't find golden file
Change-Id: I6b3b5aa573edc4bcab50a262306b47cf0665f957
Reviewed-on: https://go-review.googlesource.com/c/tools/+/228117
Reviewed-by: Michael Matloob <matloob@golang.org>
2020-04-14 00:10:08 +00:00
Rohan Challa c12078ef08 go/analysis/passes/unreachable: add suggested-fix to remove dead code
This change adds suggested fixes to the unreachable analysis pass by giving the user a fix to remove the code.

Change-Id: If0add84e6977f12a1cef6e92120a1b4571b95a11
Reviewed-on: https://go-review.googlesource.com/c/tools/+/223664
Run-TryBot: Rohan Challa <rohan@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
2020-03-27 18:58:09 +00:00
Rohan Challa 42235f6384 internal/lsp: add support for type error analyzers
This change adds support within gopls for analyzers that work with type errors to provide suggested fixes.

Updates golang/go#34644

Change-Id: Ia8929173752fda6bd84a9edaabd310e758f25fe8
Reviewed-on: https://go-review.googlesource.com/c/tools/+/222761
Run-TryBot: Rohan Challa <rohan@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
2020-03-27 17:27:16 +00:00
Rohan Challa b1df990128 go/analysis/analysistest: expand testing to handle suggested fixes
This change expands go/analysis to add the ability to verify the suggested fixes returned by an analyzer.

Change-Id: Ic38e1a24342a5c24356f8b83d196da012d8e8e01
Reviewed-on: https://go-review.googlesource.com/c/tools/+/224959
Reviewed-by: Michael Matloob <matloob@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
Run-TryBot: Rohan Challa <rohan@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-03-26 19:47:25 +00:00
Sergey Glushchenko a576cf5246 go/analysis/passes/printf: warn against using %v verb in Error() methods
go vet should warn against using %v verb in Error() methods just like it
does for String().

Fixes golang/go#33884

Change-Id: I14e30aae316dc84adc62e2b2a0144cc157bb2698
GitHub-Last-Rev: 12240ac78d9c8afb12b014eff8f81ea0bf42471f
GitHub-Pull-Request: golang/tools#214
Reviewed-on: https://go-review.googlesource.com/c/tools/+/223239
Reviewed-by: Michael Matloob <matloob@golang.org>
2020-03-24 00:39:44 +00:00
nu50218 797567968e go/analysis/singlechecker: append a newline after "Flags:"
Currently `flag.Usage` set in `Main` prints a message as follows,
```
⋮
Flags:  -V      print version and exit
⋮
```
but this should be
```
⋮
Flags:
  -V      print version and exit
⋮
```
It seems this is caused by [this](https://go-review.googlesource.com/c/tools/+/162717).

Change-Id: Ida7223e87677da4b5f280708213a526b5973ce78
GitHub-Last-Rev: ed2729641cc564c66689fd959fdbcc341b9e7c77
GitHub-Pull-Request: golang/tools#213
Reviewed-on: https://go-review.googlesource.com/c/tools/+/223123
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-03-12 17:39:32 +00:00
Dan Kortschak aafaee8bce go/analysis/passes/printf: give leeway for fmt.Formatter satisfaction
We have no way of knowing the concrete type of an interface value;
it might be a fmt.Formatter. To avoid false positives, assume that
all interface values are fmt.Formatters.

Updates golang/go#36564

Change-Id: Iaf18ba2794e4d3095d0018502c1c6c459a360b42
Reviewed-on: https://go-review.googlesource.com/c/tools/+/217180
Reviewed-by: Rob Pike <r@golang.org>
2020-03-11 09:07:12 +00:00
Jonathan Amsterdam 4fc520f0d3 go/analysis/passes/errorsas: clarify message
Make it clear that the second argument must be a non-nil pointer.

The new message text matches the phrasing used in the errors.As doc.

Updates golang/go#37625.

Change-Id: I69dc2e34a5f3a5573030ba0f63f20e0821be1816
Reviewed-on: https://go-review.googlesource.com/c/tools/+/221877
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
2020-03-03 19:44:43 +00:00
Stephen Searles b1e4e04173 go/analysis/passes/nilness: detecting panic with provably nil values
Calling `panic` with a nil value is not possible to detect using
recover. The existing SSA-based "nilness" analyzer already inspects
relationships with simple comparisons to nil and the surrounding code,
pointing out mistakes where provably nil values are used incorrectly.
This change adds calls to `panic` with similarly provable nil values to
the circumstances to report.

The tests included cover common forms of the mistake. In particular, the
case where the value passed to panic was of type `error` (which is to
say, an interface type), the nil was not properly detected.
Incorporating unpacking the `ChangeInterface` SSA transformation allow
these cases to be detected. This change may have an impact on the cases
caught by existing nilness circumstances, but those only in that they
detect additional true problems. The difference is considered safe
because the ChangeInterface operation does not change the kind of value
or its degree of nilness.

In discussion on this change, it was also pointed out that type
assertions using the CommaOk form do not cause panics when asserting on
nil values. The analyzer previously reported a false positive "nil
dereference" error in those cases and that is now fixed.

Updates golang/go#25448

Change-Id: Ia0c62e84a841c91837ff4b155f66dd2a2739c267
Reviewed-on: https://go-review.googlesource.com/c/tools/+/220777
Reviewed-by: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-03-02 15:56:37 +00:00
Robert Griesemer e1da425f72 Revert "Revert "go/analysis: add pass to check for impossible interface-to-interface type assertions""
This reverts commit 11eff242d1.

Reason for revert: The 1.15 tree is now open for early submits.

The original CL was authored by Akhil Indurti (aindurti@gmail.com).

Change-Id: I8cfcd0253a6666a6392fa938bb19a1b426ba712d
Reviewed-on: https://go-review.googlesource.com/c/tools/+/220139
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Akhil Indurti <aindurti@gmail.com>
Reviewed-by: Andrew Bonventre <andybons@golang.org>
2020-02-21 22:42:23 +00:00
smasher164 d3d48f09aa go/analysis: add pass to check string(int) conversions
Issue golang/go#3939 proposes to remove string(int) from the language on the
grounds that it produces non-obvious results that can't be statically checked.
An intermediate step is to have go vet check for these sorts of conversions.
This change adds an analysis pass to check for string(int) conversions. It
suggests a fix to replace string(int) with string(rune(int)).

Updates golang/go#32479.

Change-Id: Ifafd6d74f9bd4a903ce6b29ac3a3c7a15f8a1ad9
Reviewed-on: https://go-review.googlesource.com/c/tools/+/212919
Reviewed-by: Robert Griesemer <gri@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-02-19 21:13:14 +00:00
Andrew Bonventre 11eff242d1 Revert "go/analysis: add pass to check for impossible interface-to-interface type assertions"
This reverts commit 7a72f3f8e9.

Reason for revert: The 1.15 tree is not open yet.

Change-Id: I5b3e458748bb3d69950f6331672e8c883d6234fb
Reviewed-on: https://go-review.googlesource.com/c/tools/+/219119
Run-TryBot: Andrew Bonventre <andybons@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-02-11 20:56:36 +00:00
smasher164 7a72f3f8e9 go/analysis: add pass to check for impossible interface-to-interface type assertions
For a type assertion V.(T), where V and T are both interfaces, the
concrete type of V cannot possibly implement T if V and T contain a method
with the same name, but different signature. This change adds an
analysis pass to flag such cases.

Updates golang/go#4483.

Change-Id: Ib1e91794ca7079b3f450520cc1a57d91e46e42fa
Reviewed-on: https://go-review.googlesource.com/c/tools/+/218779
Reviewed-by: Alan Donovan <adonovan@google.com>
2020-02-11 17:49:21 +00:00
Rebecca Stambler 207d3de1fa all: fix some staticcheck errors
Updates golang/go#35718

Change-Id: I10bfd5421cd44bb58b8bcaa6e9205040c25f51be
Reviewed-on: https://go-review.googlesource.com/c/tools/+/208257
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Heschi Kreinick <heschi@google.com>
2020-01-29 04:53:41 +00:00
Joel Sing 628e9aa307 go/analysis/passes/asmdecl: add support for riscv64
Updates golang/go#27532

Change-Id: I9598b610c0b6710644988e5cea7661b2681a0314
Reviewed-on: https://go-review.googlesource.com/c/tools/+/216337
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-01-24 16:21:11 +00:00
Emmanuel T Odeke f88bd70502 analysis/passes: consolidate imports helper
Completes a TODO from CL 212920 to consolidate
all the sites that used a custom "imports" helper.

Change-Id: I4ad11a1d90d616102085dfe6f10578da22164e7c
Reviewed-on: https://go-review.googlesource.com/c/tools/+/214857
Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
2020-01-22 00:26:20 +00:00
Rob Findley 78c1766344 go/analysis: remove stale documentation citing vet
This documentation references the go/analysis vet command, which was
deleted in golang.org/cl/192177.

Change-Id: I6dd5d7bfa0e5bb2dc2af07398d8a8e4293dac6d5
Reviewed-on: https://go-review.googlesource.com/c/tools/+/212864
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
2020-01-13 21:10:14 +00:00
Emmanuel T Odeke 53017a39ae analysis/passes: report testing.Fatal* FailNow Skip* misuse in goroutines
Adds an analyzer to report an error if any tests or benchmarks
have any *Fatal, FailNow, Skip* misuses in goroutines which are
forbidden by the package testing, since those functions terminate
the entire benchmark/test yet ideally one goroutine exiting shouldn't
affect the entire benchmark/test.

This first pass only works for plain goroutines and doesn't yet work
with b.RunParallel. That'll be added in a subsequent CL after this
one is reviewed and merged.

Updates golang/go#5746

Change-Id: Ia47e5c9fd96ceced1ae9834b94f529f6ae2edaaa
Reviewed-on: https://go-review.googlesource.com/c/tools/+/212920
Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
2020-01-07 05:03:22 +00:00
Hana (Hyang-Ah) Kim 2912ce79fc go/analysis/analysistest: accept comments of /* */ form
Testing on analysis of location of comments, or lack of comments may
need /* */-style comments to avoid interfere with the tested code.

Change-Id: Id190aa243dc8ca90808c58f6d5dd4db1ade9f1c4
Reviewed-on: https://go-review.googlesource.com/c/tools/+/212636
Reviewed-by: Michael Matloob <matloob@golang.org>
2019-12-30 18:57:20 +00:00
Hana (Hyang-Ah) Kim 065ed046f1 go/analysis: add package docs for findcall, printf, and shadow
Change-Id: I966abb14b78262055b37a1a5db517fc55243be06
Reviewed-on: https://go-review.googlesource.com/c/tools/+/212619
Reviewed-by: Michael Matloob <matloob@golang.org>
2019-12-26 23:03:02 +00:00
Dmitri Shuralyov 53d48bfcf5 go/analysis: gofmt snippets in package documentation
Tab widths may vary, making tabs suitable for indentation but
not alignment. Use spaces for alignment instead, as gofmt does.

This improves the readability of the package comment on pkg.go.dev.

While here, also make use of blank lines more consistent: two blank
lines before a heading, and a single blank line everywhere else.

Change-Id: I6b6a67b413d02066e2ce233f09d49c1ccdf28a84
Reviewed-on: https://go-review.googlesource.com/c/tools/+/209457
Reviewed-by: Michael Matloob <matloob@golang.org>
2019-12-16 21:03:07 +00:00
Michael Matloob 0d967effbd go/analysis/internal/checker: format files modified by -fix
When running a checker in -fix mode, try to format the file before
writing it.

Change-Id: I760f851f0ccd4a68c97949b21dabae39cb4ffaeb
Reviewed-on: https://go-review.googlesource.com/c/tools/+/209861
Run-TryBot: Michael Matloob <matloob@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
2019-12-04 21:18:04 +00:00
Anthony Fok 4054736f96 go/analysis/passes/lostcancel: fix typo
cancelation → cancellation

Change-Id: I40abe4acfc2bf061e20bd9477a520aef6dfe848c
Reviewed-on: https://go-review.googlesource.com/c/tools/+/207845
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2019-11-19 22:05:02 +00:00
Michael Matloob 1ef994f2c9 go/analysis/passes: ensure diagnostic-reporting analyses have exported Doc
This adds an exported Doc constant to the packages for the analyses that don't
have them that contains the Analyzer.Doc string for the package's Analyzer.
The godoc for the Doc constant can then be linked to in urls reported by
analysis tools.

Change-Id: I39df71abcb29bbddf1866286d63aa5216b6224d8
Reviewed-on: https://go-review.googlesource.com/c/tools/+/207612
Run-TryBot: Michael Matloob <matloob@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
2019-11-18 20:21:56 +00:00
Leigh McCulloch 8cb0d02132 go/analysis/unitchecker: add erroras analysis to align with go vet
Add `erroras` analysis to the `unitchecker` example that mimics go vet.

The unitchecker according to its comments is an example of replicating
the analysis performed by go vet using the unitchecker. The example is
missing the erroras analysis that was added to go vet in
golang/go@9f76566. This change brings the example back inline with the
analysis performed by go vet.

Close golang/go#35486

Change-Id: I630146b60c1e62b4685fb173c8c4736d9d713168
GitHub-Last-Rev: 7c3fd4ac8e2465514720238d2c3c1ffb22a6278f
GitHub-Pull-Request: golang/tools#185
Reviewed-on: https://go-review.googlesource.com/c/tools/+/206238
Reviewed-by: Michael Matloob <matloob@golang.org>
2019-11-11 15:48:04 +00:00
Keith Randall 6b7b8b79ae go/analyis/passes/asmdecl: allow loading both parts of a complex with one instruction
Update golang/go#35264

Change-Id: I4317c75cc5acc592ab739b0aab4cd85280858219
Reviewed-on: https://go-review.googlesource.com/c/tools/+/204537
Reviewed-by: Alan Donovan <adonovan@google.com>
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2019-11-04 22:26:24 +00:00
Erik Dubbelboer 288d118ee9 go/analysis/passes/printf: allow # for b flag
Adding the `#` to a `b` flag is allowed and adds a leading `0b` to the output.

Change-Id: I421891f9478d1aaff2585455f38b3aa50e8277ab
GitHub-Last-Rev: 016896ad081bfc23f0c0a481042c90f028509831
GitHub-Pull-Request: golang/tools#182
Reviewed-on: https://go-review.googlesource.com/c/tools/+/203798
Reviewed-by: Erik Dubbelboer <erik@dubbelboer.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
2019-10-29 17:11:02 +00:00
Ilya Sinelnikov d78a1f2664 tools/go/analysis: Fix datarace in set of analysis.Fact
Fixes https://github.com/golang/go/issues/35098

Change-Id: I732edd5129de055138dc22e5e71f8ca3560d13e0
GitHub-Last-Rev: 3582f7669d70c48c5773ecf98f065f77be26c27f
GitHub-Pull-Request: golang/tools#179
Reviewed-on: https://go-review.googlesource.com/c/tools/+/202718
Reviewed-by: Michael Matloob <matloob@golang.org>
2019-10-28 19:41:31 +00:00
Michael Matloob e3efbe408c go/analysis: rename reportNodef to ReportRangef
This adds (or makes exported) a convenience function for reporting diagnostics with a
node directly (which is what folks usually want).

Change-Id: Ieb7ef2703f99d3a24ba7e48a779be62a7761cd0c
Reviewed-on: https://go-review.googlesource.com/c/tools/+/180237
Run-TryBot: Michael Matloob <matloob@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Cottrell <iancottrell@google.com>
2019-10-28 19:16:33 +00:00
Aaron Beitch c8a4b8d038 go/analysis/passes/printf: return Result for querying func Kind
printf.Result has IsPrint function telling the caller if a function is
a Print/Printf function or a wrapper of one.

This aids in developing Ananlyzer's applying checks on Print/Printf
functions.

Implements @alandonovan suggestion from
https://github.com/golang/go/issues/29616#issuecomment-503277625

Change-Id: I203d51f1fcab7d8574d9309c22b404f8e3de43db
GitHub-Last-Rev: 5cb9115d21e89da8e75c5b207bfa1c512c315161
GitHub-Pull-Request: golang/tools#138
Reviewed-on: https://go-review.googlesource.com/c/tools/+/186317
Reviewed-by: Michael Matloob <matloob@golang.org>
2019-10-28 16:16:07 +00:00
Bryan C. Mills 8715e36070 Revert "go/packages: temporarily disable some tests running on go tip with -race"
This reverts CL 200819.

Reason for revert: known races in dependencies have been fixed.

Change-Id: I7019055ea57b846d7546fbcc628fb341b7351a99
Reviewed-on: https://go-review.googlesource.com/c/tools/+/202538
Run-TryBot: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2019-10-28 14:32:39 +00:00
Rohan Verma ff611c50cd go/analysis/passes/inspect: fix incorrect example
Fixes golang/go#35028

Change-Id: I2239b966fdc0b98b3c92f3d0987ce2fd26ea1b4a
GitHub-Last-Rev: 511c3beb15e96ac40f491f85c15438598b2d0f39
GitHub-Pull-Request: golang/tools#177
Reviewed-on: https://go-review.googlesource.com/c/tools/+/202817
Reviewed-by: Agniva De Sarker <agniva.quicksilver@gmail.com>
Run-TryBot: Agniva De Sarker <agniva.quicksilver@gmail.com>
2019-10-23 14:34:23 +00:00
Dominik Honnef ce0314c87e go/analysis, internal/lsp: add support for related information
This CL adds support for "related information", which allows
associating additional source positions and messages with a
diagnostic.

Change-Id: Ifc0634f68c9f3724b6508dc6331c62c819a24f78
Reviewed-on: https://go-review.googlesource.com/c/tools/+/200597
Reviewed-by: Michael Matloob <matloob@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
2019-10-21 19:00:55 +00:00
Caleb Spare 04252eccb9 go/analysis/passes/printf: allow %x/%X for float/complex types
These verbs are supported as of Go 1.13.

Updates golang/go#34993

Change-Id: Ib7892e45b51073e3771bebb652a8fe3a1c6ae3c6
Reviewed-on: https://go-review.googlesource.com/c/tools/+/202041
Run-TryBot: Caleb Spare <cespare@gmail.com>
Reviewed-by: Alan Donovan <adonovan@google.com>
2019-10-18 20:32:02 +00:00
Michael Matloob ba31bb9056 go/analysis: remove requirement for unique Analyzer names
It's hard to prevent two independent analysis writers from
using the same name so enforcing this requiremnet just
causes trouble for analysis writers. Remove the requirement.

It would be nice to guarantee that two packages don't introduce
analyses with the same name, but because analyses are values
and not types, they don't have a logical package.

Change-Id: Iad3493e02ceae04ba3e9015c3e9c68ed9fa4b5a2
Reviewed-on: https://go-review.googlesource.com/c/tools/+/201218
Run-TryBot: Michael Matloob <matloob@golang.org>
Reviewed-by: Dominik Honnef <dominik@honnef.co>
2019-10-16 18:38:41 +00:00
Michael Matloob 539cdc44f8 go/packages: temporarily disable some tests running on go tip with -race
A change in go/types has uncovered a race in go/packages. While we debug,
ignore those tests when running on tip with -race to make the builders
green. This change will be reverted as soon as the issue is fixed.

Updates golang/go#31749

Change-Id: I96f0b30a1bc203a5c36a2ce30c943583b7f8035a
Reviewed-on: https://go-review.googlesource.com/c/tools/+/200819
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
2019-10-14 17:20:00 +00:00
Brad Fitzpatrick b090f1f240 go/analysis/passes/asmdecl: remove amd64p32 support
Updates golang/go#30439

Change-Id: I46c7de8d16c3470f2f20a4d0e03b74bb38c8aff0
Reviewed-on: https://go-review.googlesource.com/c/tools/+/199500
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Andrew Bonventre <andybons@golang.org>
2019-10-09 21:34:38 +00:00
Matts966 d89860af3b go/analysis/analysistest: fix nil pointer dereference when sorting facts
Without this change, we can't use `ExportPackageFact` function with analysistest package.

PackageFacts are keyed by nil and analysistest.check crashed while sorting, due to a nil object dereference.

Change-Id: Ic94c71acc9c74012bf150e1d72e937da8dfdff75
GitHub-Last-Rev: 51c91008a6756e66c630bfeabc9b8da08c12bfdd
GitHub-Pull-Request: golang/tools#163
Reviewed-on: https://go-review.googlesource.com/c/tools/+/196758
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
2019-10-04 19:10:47 +00:00
Hasit Bhatt e4ea94538f go/analysis: fix vet errors
Updating tools version in go fails the builds due to go vet errors as it can be observed in https://golang.org/cl/196843.

Fix vet errors in facts.go and assign.go

Updates golang/go#34062

Change-Id: I8e5a819a08d0bdc91c4fb21761065f026581bcd2
GitHub-Last-Rev: 57d832932859360d4668711ab6b46ac8cdd2e010
GitHub-Pull-Request: golang/tools#164
Reviewed-on: https://go-review.googlesource.com/c/tools/+/197338
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
2019-09-25 21:18:24 +00:00
alkiller22 7460b8e10b cmd/vet: fix a bad case of shadow check about redeclaration
`go tools vet -shadow` ignored the case like this form
```golang
func shadowBlock() {
    var a int
    {
        var a = 3
        _ = a
    }
    _ = a
}
```
This commit fix it on "idiomaticRedecl" func, and add the code above in testcase.

Change-Id: I007f8287766f59cd7ded86072ba6bf6743c392be
GitHub-Last-Rev: b8b302b2048d709a39fb17496ba80917f9f4c889
GitHub-Pull-Request: golang/tools#143
Reviewed-on: https://go-review.googlesource.com/c/tools/+/189158
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
2019-09-19 03:18:56 +00:00
Johan Brandhorst 31e00f45c2 go/analysis: add sortslice pass
The sort.Slice method accepts an empty interface as its first
argument, but a slice type is the only valid use of the method.
This analyzer adds a diagnostic if the user uses the sort.Slice
method with anything other than a slice type as the first argument.

Change-Id: I3b54873faba2e9c2e832223a3cdab15a0b534650
Reviewed-on: https://go-review.googlesource.com/c/tools/+/191598
Run-TryBot: Johan Brandhorst <johan.brandhorst@gmail.com>
Reviewed-by: Ian Cottrell <iancottrell@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
2019-09-14 23:59:51 +00:00