--- /dev/null
+<h2>Big restructuring</h2>
+
+<p>
+ At the core of the 2019.1 release lies the grand restructuring of all of the staticcheck tools.
+ All of the individual checkers, as well as megacheck, have been merged into a single tool,
+ which is simply called <em>staticcheck</em>.
+ From this point forward, staticcheck will be <em>the</em> static analyzer for Go code.
+ It will cover all of the existing categories of checks – bugs, simplifications, performance –
+ as well as future categories, such as the new style checks.
+</p>
+
+<p>
+ This change makes a series of simplifications possible.
+ Per-tool command line flags in megacheck have been replaced with unified flags
+ (<code>-checks</code> and <code>-fail</code>)
+ that operate on arbitrary subsets of checks.
+ Consumers of the JSON output no longer need to know about different checker names
+ and can instead rely solely on user-controllable severities.
+ And not to be neglected: gone is the silly name of <em>megacheck</em>.
+</p>
+
+<p>
+ This change will require some changes to your pipelines.
+ Even though the gosimple, unused, and megacheck tools still exist, they have been deprecated
+ and will be removed in the next release of staticcheck.
+ Additionally, megacheck's <code>-<tool>.exit-non-zero</code> flags have been rendered inoperable.
+ Instead, you will have to use the <code>-fail</code> flag.
+ Furthermore,, <code>-fail</code> defaults to <code>all</code>, meaning all checks will cause non-zero exiting.
+ Previous versions of megacheck had different defaults for different checkers, trying to guess the user's intention.
+ Instead of guessing, staticcheck expects you to provide the correct flags.
+</p>
+
+<p>
+ Since all of the tools have been merged into staticcheck, it will no longer run just one group of checks.
+ This may lead to additional problems being reported.
+ To restore the old behavior, you can use the new <code>-checks</code> flag.
+ <code>-checks "SA*"</code> will run the same set of checks that the old staticcheck tool did.
+ The same flag should be used in place of megacheck's – now deprecated – <code>-<tool>.enabled</code> flags.
+</p>
+
+<p>
+ Details on all of the command-line flags can be found <a href="/docs/#cli">in the documentation.</a>
+</p>
+
+<h2>Configuration files</h2>
+
+<p>
+ Staticcheck 2019.1 adds support for per-project configuration files.
+ With these it will be possible to standardize and codify linter settings, the set of enabled checks, and more.
+ Please see the <a href="/docs/#configuration">documentation page on configuration</a> for all the details!
+</p>
+
+<h2>Build system integration</h2>
+
+<p>
+ Beginning with this release, staticcheck calls out to the tools of the underlying build system
+ (<code>go</code> for most people) to determine the list of Go files to process.
+ This change should not affect most people.
+ It does, however, have some implications:
+ the system that staticcheck runs on needs access to a full Go toolchain –
+ just the source code of the standard library no longer suffices.
+ Furthermore, setting <code>GOROOT</code> to use a different Go installation no longer works as expected.
+ Instead, <code>PATH</code> has to be modified so that <code>go</code> resolves to the desired Go command.
+</p>
+
+<p>
+ This change has been necessary to support Go modules.
+ Additionally, it will allow us to support alternative build systems such as Bazel in the future.
+</p>
+
+<h2>Handling of broken packages</h2>
+
+<p>
+ We have redesigned the way staticcheck handles broken packages.
+ Previously, if you ran <code>staticcheck ...</code> and any package wouldn't compile,
+ staticcheck would refuse to check any packages whatsoever.
+ Now, it will skip broken packages, as well as any of their dependents, and check only the remaining packages.
+ Any build errors that are encountered will be reported as problems.
+</p>
+
+<h2>Checks</h2>
+
+<h3>New checks</h3>
+<p>
+ Staticcheck 2019.1 adds a new category of checks, ST1.
+ ST1 contains checks for common style violations – poor variable naming, incorrectly formatted comments and the like.
+ It brings the good parts of <a href="https://github.com/golang/lint">golint</a> to staticcheck,
+ and adds some checks of its own.
+</p>
+
+<p>
+ In addition, some other checks have been added.
+</p>
+
+<p>
+ {{ check "S1032" }} recommends replacing <code>sort.Sort(sort.StringSlice(...))</code> with <code>sort.Strings(...)</code>;
+ similarly for other types that have helpers for sorting.
+</p>
+
+<p>
+ {{ check "SA9004" }} flags groups of constants where only the first one is given an explicit type.
+</p>
+
+<p>
+ {{ check "SA1025" }} checks for incorrect uses of <code>(*time.Timer).Reset</code>.
+</p>
+
+<h3>Changed checks</h3>
+
+<p>
+ Several checks have been tweaked, either making them more accurate or finding more issues.
+</p>
+
+<p>
+ {{ check "S1002" }} no longer applies to code in tests.
+ While <code>if aBool == true</code> is usually an anti-pattern,
+ it can feel more natural in unit tests,
+ as it mirrors the <code>if got != want</code> pattern.
+</p>
+
+<p>
+ {{ check "S1005" }} now flags <code>for x, _ := range</code> because of the unnecessary blank assignment.
+</p>
+
+<p>
+ {{ check "S1007" }} no longer suggests using raw strings for regular expressions containing backquotes.
+</p>
+
+<p>
+ {{ check "S1016" }} now considers the targeted Go version.
+ It will no longer suggest type conversions between struct types with different field tags
+ unless Go 1.8 or later is being targeted.
+</p>
+
+<p>
+ {{ check "SA1000" }} now checks arguments passed to the <code>regexp.Match</code> class of functions.
+</p>
+
+<p>
+ {{ check "SA1014" }} now checks arguments passed to <code>(*encoding/xml.Decoder).DecodeElement</code>.
+</p>
+
+<p>
+ {{ check "SA6002" }} now realizes that unsafe.Pointer is a pointer.
+</p>
+
+<p>
+ {{ check "U1000" }} has fewer false positives in the presence of embedding.
+</p>
+
+<h3>Removed checks</h3>
+<p>
+ {{ check "S1013" }} has been removed,
+ no longer suggesting replacing <code>if err != nil { return err }; return nil</code> with <code>return err</code>.
+ This check has been the source of contention and more often than not, it reduced the consistency of the surrounding code.
+</p>
+
+<h2>Deprecation notices</h2>
+
+<p>
+ This release deprecates various features of staticcheck.
+ These features will be removed in the next release.
+</p>
+
+<p>
+ As already explained earlier, the <em>unused</em>, <em>gosimple</em>, and <em>megacheck</em> tools
+ have been replaced by <em>staticcheck</em>.
+ Similarly, the flags <code>-<tool>.enabled</code> and <code>-<tool>.exit-non-zero</code>
+ have been replaced by <code>-checks</code> and <code>-fail</code>.
+ Finally, the <code>-ignore</code> flag has been replaced
+ by <a href="/docs/#ignoring-problems">linter directives</a>.
+</p>
+
+<h2>Binary releases</h2>
+
+<p>
+ Beginning with this release, we're publishing
+ <a href="https://github.com/dominikh/go-tools/releases">prebuilt binaries to GitHub</a>.
+ These releases still require a functioning Go installation in order to operate, however.
+</p>
+
+<h2>Other changes</h2>
+
+<p>
+ We've removed the <code>-min_confidence</code> flag.
+ This flag hasn't been doing anything for years.
+</p>
+
+<p>
+ A new formatter called <a href="/docs/formatters">Stylish</a>
+ (usable with <code>-f stylish</code>)
+ provides output that is designed for easier consumption by humans.
+</p>
+
+<p>
+ Due to the restructuring of checkers, the <code>checker</code> field in JSON output has been replaced
+ with the <code>severity</code> field.
+</p>
+
+<h2 id="2019.1.1">Staticcheck 2019.1.1 Release Notes</h2>
+
+<p>
+ The 2019.1.1 release of Staticcheck is the first bug fix release, fixing several bugs and improving performance.
+</p>
+
+<h3>Changes</h3>
+<ul>
+ <li>
+ The ST category of checks no longer flag style issues of
+ aliased types when the aliased type exists in a package
+ we aren't explicitly checking. This avoids crashes and
+ erratic error reports.
+ </li>
+ <li>
+ Compiler errors now have correct position information.
+ </li>
+ <li>
+ A crash in the Stylish reporter has been fixed.
+ </li>
+ <li>
+ We no longer flag unused objects that belong to cgo internals.
+ </li>
+ <li>
+ The {{ check "U1000" }} check has been optimized, reducing its memory
+ usage and runtime.
+ </li>
+</ul>