gopls: add a 'stats' subcommand
Add a new subcommand to print statistics about the current workspace,
for use in diagnosing user-reported performance problems.
To achieve this, add a new gopls.workspace_stats custom command, which
is documented to be for internal use only.
Fixes golang/go#59673
Change-Id: Iac99cc5c5d0d7328c3c63663e916df4bcc955fea
Reviewed-on: https://go-review.googlesource.com/c/tools/+/485838
Run-TryBot: Robert Findley <rfindley@google.com>
Auto-Submit: Robert Findley <rfindley@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
gopls-CI: kokoro <noreply+kokoro@google.com>
diff --git a/gopls/internal/lsp/source/api_json.go b/gopls/internal/lsp/source/api_json.go
index 7863915..88ff209 100644
--- a/gopls/internal/lsp/source/api_json.go
+++ b/gopls/internal/lsp/source/api_json.go
@@ -731,7 +731,7 @@
Command: "gopls.mem_stats",
Title: "fetch memory statistics",
Doc: "Call runtime.GC multiple times and return memory statistics as reported by\nruntime.MemStats.\n\nThis command is used for benchmarking, and may change in the future.",
- ResultDoc: "{\n\t\"HeapAlloc\": uint64,\n\t\"HeapInUse\": uint64,\n}",
+ ResultDoc: "{\n\t\"HeapAlloc\": uint64,\n\t\"HeapInUse\": uint64,\n\t\"TotalAlloc\": uint64,\n}",
},
{
Command: "gopls.regenerate_cgo",
@@ -807,6 +807,12 @@
Doc: "Runs `go mod vendor` for a module.",
ArgDoc: "{\n\t// The file URI.\n\t\"URI\": string,\n}",
},
+ {
+ Command: "gopls.workspace_stats",
+ Title: "fetch workspace statistics",
+ Doc: "Query statistics about workspace builds, modules, packages, and files.\n\nThis command is intended for internal use only, by the gopls stats\ncommand.",
+ ResultDoc: "{\n\t\"Files\": {\n\t\t\"Total\": int,\n\t\t\"Largest\": int,\n\t\t\"Errs\": int,\n\t},\n\t\"Views\": []{\n\t\t\"GoCommandVersion\": string,\n\t\t\"AllPackages\": {\n\t\t\t\"Packages\": int,\n\t\t\t\"LargestPackage\": int,\n\t\t\t\"CompiledGoFiles\": int,\n\t\t\t\"Modules\": int,\n\t\t},\n\t\t\"WorkspacePackages\": {\n\t\t\t\"Packages\": int,\n\t\t\t\"LargestPackage\": int,\n\t\t\t\"CompiledGoFiles\": int,\n\t\t\t\"Modules\": int,\n\t\t},\n\t\t\"Diagnostics\": int,\n\t},\n}",
+ },
},
Lenses: []*LensJSON{
{