Skip to content
master
Go to file
Code

Latest commit

In the past, the '-go' flag defaulted to the version of Go that
Staticcheck was built with. This wasn't a great default as it was
usually too aggressive, suggesting new language features right away,
despite most people wanting to support the last N versions of Go.

Go modules themselves specify a Go version to support. This version
restricts the set of Go language features that can be used in a
module. This maps quite well to our '-go' flag, which similarly
suppresses suggestions that would depend on a newer version of Go.

The mapping isn't perfect, in particular because we conflate language
features and the version of the standard library (a Go module
targeting Go 1.0 can't use newer language features, but it can still
use parts of the stdlib that were introduced in later versions), but
it is better than our previous default.

The user is still able to override the default if needed.

Due to the design of flags in go/analysis, we can't easily specify
different versions for different packages. In theory, this should not
be a problem, as the Go build system only allows operating on one
module at a time. We may still see a mix of packages where some have a
module and others don't – this is because the synthetic "foo.test"
packages are not part of the module. We can skip those. Should we ever
see more than one module, we fall back to the old default and emit a
warning.

If the user isn't operating in module mode, we fall back to the old
default.

Closes gh-853
c5ce990

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
Sep 14, 2020

README.md

Staticcheck logo
The advanced Go linter

Staticcheck is a state of the art linter for the Go programming language. Using static analysis, it finds bugs and performance issues, offers simplifications, and enforces style rules.

Financial support by private and corporate sponsors guarantees the tool's continued development. Please become a sponsor if you or your company rely on Staticcheck.

Documentation

You can find extensive documentation on Staticcheck on its website.

Installation

Releases

It is recommended that you run released versions of the tools. These releases can be found as git tags (e.g. 2019.1) as well as prebuilt binaries in the releases tab.

The easiest way of using the releases from source is to use a Go package manager such as Godep or Go modules. Alternatively you can use a combination of git clone -b and go get to check out the appropriate tag and download its dependencies.

Master

You can also run the master branch instead of a release. Note that while the master branch is usually stable, it may still contain new checks or backwards incompatible changes that break your build. By using the master branch you agree to become a beta tester.

Tools

All of the following tools can be found in the cmd/ directory. Each tool is accompanied by its own README, describing it in more detail.

Tool Description
keyify Transforms an unkeyed struct literal into a keyed one.
rdeps Find all reverse dependencies of a set of packages
staticcheck Go static analysis, detecting bugs, performance issues, and much more.
structlayout Displays the layout (field sizes and padding) of structs.
structlayout-optimize Reorders struct fields to minimize the amount of padding.
structlayout-pretty Formats the output of structlayout with ASCII art.

Libraries

In addition to the aforementioned tools, this repository contains the libraries necessary to implement these tools.

Unless otherwise noted, none of these libraries have stable APIs. Their main purpose is to aid the implementation of the tools. If you decide to use these libraries, please vendor them and expect regular backwards-incompatible changes.

System requirements

We support the last two versions of Go.

You can’t perform that action at this time.