Staticcheck 2022.1 release notes
Improvements
This release adds support for Go 1.18 and type parameters (generics).
Furthermore, it adds two new flags for handling build tags, -matrix
and -merge
. Their use is extensively documented
on the new Build tags page. Their intended use is for
avoiding false positives when dealing with different build tags.
Not tied directly to this release, but worth mentioning regardless: Staticcheck has an official GitHub Action now, which may simplify your CI pipeline.
Minor changes include slightly nicer output from staticcheck -explain
, better error messages, and allowing whitespace in flags like -checks
.
Checks
New checks
The following new checks have been added:
- SA4028 flags
x % 1
, which always yields zero, and is sometimes accidentally used instead ofx % 2
- SA4029 flags misuses of
sort.IntSlice
and related types - SA4030 flags misuses of
math/rand
that always generate zeros - SA4031 flags comparisons of never-nil values against nil
- SA9007 flags attempts at deleting system directories
- SA9008 flags accidental shadowing in the else branches of type assertions
Changed checks
The following checks have been improved:
- S1001 now simplifies more loops
- S1038 now simplifies formatted printing in
log
andtesting
, in addition tofmt
- SA1019 no longer flags deprecated API in the Go standard library if it doesn’t know when the API was
deprecated. This is to avoid false positives when using older versions of Staticcheck on newer versions of Go, in
particular Go’s
master
branch. - SA1020 no longer flags
net/http.ListenAndServe
with a completely empty address - ST1001 various packages of
github.com/mmcloughlin/avo
have been whitelisted by default - ST1008 no longer flags functions that return
(..., error, bool)
- ST1018 no longer flags emoji sequences
- ST1023 no longer makes erroneous suggestions
- Numerous checks have a better understanding of integer literals and can detect mistakes involving unconventional
literals such as
---1
instead of-1
- Some runtime crashes have been fixed
Staticcheck 2022.1.1 release notes
This release addresses the following false positives, crashes, and infinite loops:
- SA1026 and SA5008 no longer get stuck in infinite loops when code attempts to marshal cyclic pointer types (issue 1202)
- U1000 no longer crashes when code contains mutually recursive type instantiations (issue 1247)
- U1000 no longer crashes when generic functions use composite literals of type parameter types (0ccdb5c9dad7e96a8e3a3136738192491b37dbdb)
- ST1021 now understands type names that are also English articles (issue 1187)
- SA4023 no longer gets confused by the nilness of type parameters (issue 1242)
- Some checks no longer crash when trying to generate automated code fixes that involve function literals (issue 1134)
- SA1026 no longer claims that
encoding/json
cannot marshal generic maps (golang/go#52467) - The
binary
format has been improved to handle OS-specific file paths correctly, in turn making the-merge
flag work more reliably (1846305a946b13d350894512c7ac1e5ed71dc331) - When using the
-merge
or-matrix
flags, diagnostics reported by SA4008 now have to occur in all runs to be reported, reducing the number of false positives (0e678cbe1c8b3f09ac481673453886b1afc9906a) - U1000 now understands struct type conversions involving type parameters, reducing the number of false positives (90804df0287d9265e565bcabbe19568efbe374fa)
Staticcheck 2022.1.2 release notes
This release addresses the following false positives, crashes, infinite loops, and performance issues:
- For certain packages that contain tens of thousands of types and methods, such as those generated by ygot, Staticcheck now finishes much faster.
- Several infinite loops when handling recursive type parameters have been fixed
- S1009 no longer mistakes user-defined functions named
len
for the builtin (issue 1181) - ST1015 no longer reorders
switch
statements if their order is significant due to the use offallthrough
(issue 1188) - SA1013 now detects constants more robustly, avoiding both false negatives and false positives.
Furthermore, it makes sure that offending methods implement io.Seeker and doesn’t just rely on the name
Seek
(issue 1213). - SA5008 now understands more third-party extensions to
json
struct tags - A crash involving functions named
_
has been fixed (issue 1268) - A crash involving slicing type parameters of type
string | []byte
has been fixed (issue 1270) - SA1019 now handles imports of deprecated standard library packages in the same way it handles other deprecated API, taking the targeted Go version into consideration (issue 1117)
Additionally it is strongly recommended to use Go 1.18.2 for building Staticcheck, as it fixes further generics-related bugs in the type checker.
Staticcheck 2022.1.3 release notes
This release addresses the following issues:
- Staticcheck maintains a cache to speed up repeated runs. This cache needs to be pruned regularly to keep its size in check. This is meant to happen automatically, but it hasn’t since Staticcheck 2020.2. This release corrects that (issue 1283.)
- Some type sets containing both bidirectional and unidirectional channels would lead to panics (issue 1304)