Skip to content

Releases: golang/tools

gopls/v0.6.0

16 Dec 16:49
Compare
Choose a tag to compare

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

gopls/v0.5.5

04 Dec 19:46
Compare
Choose a tag to compare

gopls/v0.5.5

This is a patch release to fix two bugs in gopls/v0.5.4.

Fixes

Excessive reloading of packages outside of GOPATH or a module

See golang/go#42813.

File corruption with CRLF line endings and //-style comments

golang/go#42646 was supposed to have been fixed in gopls/v0.5.4, but it was not. golang/go#42923 was reported and fixed.


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

gopls/v0.5.4

30 Nov 19:00
Compare
Choose a tag to compare

Features

Opening a project that contains a module in a subdirectory

Previously, gopls required that you open your editor exactly at or below the module root (the directory containing the go.mod). Now, you can open a directory that contains exactly one module in a subdirectory, and gopls will work as expected. For details on multi-module workspaces, see below.

Removal of the granular go.mod upgrade codelenses

Previously, we offered a code lens to suggest upgrades for each require in a go.mod file. In anticipation of changes that limit the amount that gopls accesses the network, we have decided to remove and reevaluate this feature. Users had mentioned that the code lenses cluttered their go.mod files, especially if they didn't actually want to upgrade. golang/go#38339 tracks the work to revamp this feature. An "Upgrade all dependencies" code lens should still appear at the top of your go.mod file.

Improved error message reports

Previously, critical error messages were reported as message pop-up that would re-trigger as you type. Many users would find this annoying. We have changed the approach to show error messages as progress reports, which should be less intrusive and appear more like status bars.

Improved memory usage for workspaces with multiple folders

We are now using a coarser cache key for package type information. If you use the gopls daemon, this may reduce your total memory usage.

Experimental

Multi-module workspace support

The proposal described in golang/go#32394 is still in development and off by default. See our progress by tracking the multi-module workspace milestone and project.

Enable multi-module workspace support by adding the following to your settings:

"gopls": {
    "experimentalWorkspaceModule": true,
}

With this setting, you will be able to open a directory that contains multiple modules or a directory that contains nested modules.

Give this a try if you're interested in this new feature, but please note that it is still very experimental. Please file issues if you encounter bugs.

Fixes

File corruption with CRLF line endings and /**/-style comments

Previously, when you organized the imports in a file with CRLF line endings and multi-line comments, the formatter might output incorrect content for the file, rendering it invalid Go code. This issue has popped up a number of times, but we believe it has finally been fixed for good. If you are using Windows with CRLF line ending, please report any regressions. For full details, see golang/go#42646.


A full list of all issues fixed can be found in the gopls/v0.5.4 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 @yangwenmai @matloob @golopot @muirdm

gopls/v0.5.3

12 Nov 21:26
Compare
Choose a tag to compare

gopls/v0.5.3

Features

Automatic updates to go.sum

Previously, go.mod-related quick fixes would not make corresponding changes to your go.sum file. Now, when you add or remove dependencies from your module, your go.sum will be updated accordingly.

Removed support for go mod tidy on save

We have removed the support for running go mod tidy on save for go.mod files. It proved to be too slow and expensive to be worth it.

Experimental

Multi-module workspace support

The proposal described in golang/go#32394 is still in development and off by default. See our progress by tracking the multi-module workspace milestone and project.

Enable multi-module workspace support by adding the following to your settings:

"gopls": {
    "experimentalWorkspaceModule": true,
}

With this setting, you will be able to open a directory that contains multiple modules. Most features will work across modules, but some, such as goimports, will not work as expected.

Give this a try if you're interested in this new feature, but please note that it is still very experimental.

Fixes

A list of all issues fixed can be found in the gopls/v0.5.3 milestone.

Thank you to our contributors!

@heschik @findleyr @pjweinb

gopls/v0.5.2

28 Oct 18:06
Compare
Choose a tag to compare

gopls/v0.5.2

Features

No new features have been added in this release.

Experimental

We have added support for a new allExperiments setting. By enabling this flag, you will enable all experimental features that we intend to roll out slowly. You can still disable individual settings (full list of settings). In-progress features, such as multi-module workspaces (below), will remain disabled until they are ready for users.

Improved CPU utilization: experimentalDiagnosticsDelay

experimentalDiagnosticsDelay controls the amount of time that gopls waits after the most recent file modification before computing deep diagnostics. Simple diagnostics (parsing and type-checking) are always run immediately on recently modified packages.

Enable it by setting it to a duration string, for example "200ms". With allExperiments, this is set to "200ms".

Improved memory usage for workspaces with multiple folders: experimentalPackageCacheKey

experimentalPackageCacheKey controls whether to use a coarser cache key for package type information. If you use the gopls daemon, this may reduce your total memory usage.

Enable it by setting it to true. With allExperiments, this is set to true.

Multi-module workspace support

The proposal described in golang/go#32394 is still in development and off by default. See our progress by tracking the multi-module workspace milestone and project.

Enable multi-module workspace support by adding the following to your settings:

"gopls": {
    "experimentalWorkspaceModule": true,
}

With this setting, you will be able to open a directory that contains multiple modules. Most features will work across modules, but some, such as goimports, will not work as expected.

Give this a try if you're interested in this new feature, but please note that it is still very experimental.

Support for semantic tokens

This is a new, unreleased LSP feature that provides additional syntax highlighting. In advance of this new LSP version, we have added preliminary support for this feature. Enable it by setting:

"gopls": {
    "semanticTokens": true,
}

It will not be enabled with allExperiments.

Fixes

A list of all issues fixed can be found in the gopls/v0.5.2 milestone.

For editor clients

All command names have been given gopls. prefixes, to avoid conflicting with commands registered by other language servers.
This should not have affected any clients.

Thank you to our contributors!

@heschik @findleyr @dandua98 @pjweinb @leitzler @kortschak @bcmills @hyangah @jadekler

gopls/v0.5.1

05 Oct 16:41
Compare
Choose a tag to compare

gopls/v0.5.1

Features

Completion speed improvements

https://golang.org/cl/257240 eliminated some duplicate type-checking in completions (and some other features), halving latency in most cases.

Improvements to symbol rankings

From https://golang.org/cl/254037:

Downrank symbols if they are:

  1. Unexported and outside of the workspace. Since one wouldn't jump to these symbols to e.g. view documentation, they are less relevant.
  2. Fields and interface methods. Usually one would jump to the type name, so having fields highly ranked can be noisy.

Warnings for excluded files

You will now see diagnostics if you open a file that is excluded from the current build, likely by build tags. This should aid in understanding cases when gopls fails to work on a certain file.

Better error reporting when code lenses fail

A pop-up with an error will appear if a code lens fails to run its command.

Experimental

Multi-module workspace support

The proposal described in golang/go#32394 is partially implemented, but off by default.
Enable multi-module workspace support by adding the following to your settings:

"gopls": {
    "experimentalWorkspaceModule": true,
}

With this setting, you will be able to open a directory that contains multiple modules. Most features will work across modules, but some, such as go mod tidy diagnostics, are not yet implemented.

Give this a try if you're interested in this new feature, but please note that it is still very experimental.

Fixes

Toggle GC Details on Windows

There was a bug in the new experimental GC details code lens on Windows machines (golang/go#41614). We added a work-around to fix the issue.

A list of all issues fixed can be found in the gopls/v0.5.1 milestone.

Documentation

The documentation for settings is now automatically generated so it will stay up-to-date. Documentation was also updated for working with Neovim and for working on the Go project itself.

Thank you to our contributors!

@heschik @findleyr @dandua98 @pjweinb @ainar-g

gopls/v0.5.0

15 Sep 16:13
Compare
Choose a tag to compare

A full list of issues closed can be found in the gopls/v0.5.0 milestone.

Memory usage

  • Rewrite of caching model, resulting in significant memory usage improvements (@heschik).

New features

  • Extract to function: Support for extracting code blocks that contain return statements (@joshbaum).
  • Workspace symbols: Support for fzf-style search syntax (@findleyr). The following syntax is supported:
    • ' for exact matching
    • ^ for prefix matching
    • $ for suffix matching

Note: This feature does not yet work in VS Code. See golang/vscode-go#647 and microsoft/vscode#106788.

  • An experimental new code lens to view GC optimization details (@pjweinb). Once the code lens is enabled, you will see a Toggle gc details annotation at the top of your file. Clicking it will show optimization diagnostics produced by the Go compiler, and clicking it once again will hide these diagnostics. Enable the code lens by adding the following to your settings:
     "codelens": {
     	"gc_details": true
     }
  • go mod tidy and go mod vendor code lenses for go.mod files (@dandua98).
  • Support for filling in matching in-scope variables instead of just empty values in fillstruct and fillreturns (@joshbaum).
  • Autocompletion within import statements (@dandua98).
  • Autocompletion within package declarations (@dandua98).

Improvements

  • Improvements to workspace symbols ranking and fuzzy matching (@findleyr, @myitcv).
  • Better completion suggestions in type switch case clauses and for calls to append, function literals, and unnamed types (@muirdm).

Thank you

Thank you to everyone who contributed to this release!

@heschik
@findleyr
@pjweinb
@joshbaum
@mcjcloud
@dandua98
@muirdm
@leitzler
@myitcv
@matloob
@tennashi
@ainar-g
@hasheddan

gopls/v0.4.4

03 Aug 14:20
Compare
Choose a tag to compare
  • Support for opening a single file. Previously, gopls required you to open an entire directory.
  • Support features and diagnostics for the entire module, even when you open a subdirectory of the module.
  • Extract a selected range to a variable or to a function. This feature is still relatively new, so please report issues if you encounter any. (@joshbaum)
  • Fillstruct performance improvements. It is now enabled by default again. (@joshbaum)
  • Improvements in go.mod diagnostic error presentation.

A full list of all issues closed is available in the gopls/v0.4.4 milestone.

gopls/v0.4.3

08 Jul 18:54
Compare
Choose a tag to compare

Disable the fillstruct analysis by default.
We recently uncovered some performance issues with the analysis, leading us to disable it by default.
Once those issues are resolved, we will enable it by default again.
You can still enable it by adding the following to your VS Code settings:

"gopls": {
	"analyses": {		
		"fillstruct": true,
	}
}

gopls/v0.4.2

01 Jul 14:06
Compare
Choose a tag to compare
  • Significant memory improvements (@heschik). Dependency test variants and vendored packages are no longer considered "workspace packages".
  • Smart autocompletion for "append" (@muirdm).
  • A "fill struct" code action to suggest populating a struct literal with default values (@luciolas, @joshbaum).
  • Better cgo support with Go 1.15 (@heschik). Learn more: golang/go#35721 (comment).
  • Code lens to run Go tests directly in the editor (@martskins). Currently opt-in:
"gopls": {
    "codelens": {
        "test": true,
    }
}
  • Improved folding in composite literals (@joshbaum).
  • Pop-up suggestion to run go mod vendor when inconsistent vendoring detected (@stamblerre).
  • Respect GOPRIVATE for all document links and links on hover (@findleyr).
  • A full list of issues resolved in this release can be found in the gopls/v0.4.2 milestone.

gopls/dev.go2go: You can use the new go2go prototype with gopls. See golang/go#39619.