Skip to content

gopls/v0.6.0

Compare
Choose a tag to compare
@stamblerre stamblerre released this 16 Dec 16:49
· 3186 commits to master since this release

gopls/v0.6.0

Features

Default to -mod=readonly

In Go 1.16, the Go command will no longer modify user's go.mod and go.sum files automatically (https://tip.golang.org/doc/go1.16#tools). In order to match this behavior, gopls now also uses -mod=readonly when running the go command. Any errors reported by the go command will be presented with a suggested fix to make the necessary fixes to your go.mod or go.sum files. As a consequence, your workspace may be in a partially broken state while you have errors in your go.mod or go.sum file. golang/go#42266 will mitigate this, but it will likely not be resolved until February.

Not recommended: If you must opt out of this behavior, you can set the allowModfileModifications configuration to true.

Default to GOPROXY=off

gopls no longer accesses the network implicitly. This should improve latency in all cases, but it also means that gopls will no longer automatically download modules that are not found in your local module cache. The one exception is that gopls will still download dependencies on start-up, so it will continue to work as expected if you have cloned a repository for the first time. If gopls detects a missing module, it will offer you a suggested fix that downloads it.

Not recommended: If you must opt out of this behavior, you can set the allowImplicitNetworkaccess configuration to true.

Inclusion/exclusion filters for directories

gopls now supports excluding certain directories in your workspace from analysis. This may be useful if you are only working on a subset of a large repository. Note that these filters are not propagated to the go command, so gopls will still load metadata for these directories, which may be expensive. Configure the included/excluded directories through the directoryFilters setting.

Debouncing for diagnostics

Diagnostics are now reported instantly only for the packages currently being edited. Diagnostics for other packages in the workspace will now only be computed after 250 milliseconds, meaning that, if you are actively typing, gopls will not start these more costly operations. This should significantly reduce CPU utilization. This debounce delay can be optionally configured via the experimentalDiagnosticsDelay setting.

"Upgrade direct dependencies" code lens

In gopls/v0.5.4, we removed the per-require "Upgrade dependency" code lens, as it was very high latency, and its UX did not meet user needs. Some users have expressed disappointment about this, so, to bridge the gap, we have separated the existing "Upgrade all dependencies" code lens into two: "Upgrade transitive dependencies" and "Upgrade direct dependencies". The first is the equivalent of running go get -u all, while the second go gets each of your module's requires independently. We are continuing to work on improving these features and will likely bring back the "Upgrade dependency" code lens as a suggested fix (learn more: golang/go#38339).

Support for filling a partially-populated struct

The "Fill struct" suggested fix will now be suggested for structs that have some, but not all, fields set.

Experimental

Field alignment analyzer

A new analyzer has been added to suggest reordering fields in a struct in order to achieve the optimal alignment in memory. It is still off by default, but can be enabled by adding the following to your gopls settings:

"analyses": {		
	"fieldalignment": true
}

Fixes

Improvements to diagnostics tracking

Diagnostic messages were not being updated correctly when the GC details code lens was toggled on. New handling to differentiate diagnostics by sources should have resolved this issue.

File watching for directories

gopls now correctly handles the deletion of a directory.

Other

"codelens" setting name changed to "codelenses"

This misspelling has now been corrected, so please update your configurations appropriately.

Disabled support for symlinks

gopls has historically had insufficient and untested support for symlinks. We have not yet decided how to move forward with symlinks, so in the interim, we have completely disabled support for symlinks. See golang/go#42833 for more details, and please weigh in if you have opinions or suggestions.


A full list of all issues fixed can be found in the gopls/v0.6.0 milestone. To report a new problem, please file a new issue at https://golang.org/issues/new.

Thank you to our contributors!

@findleyr @heschik @pjweinb @leitzler @jadekler @muirdm @singalhimanshu @imsodin @mengzhuo