diff --git a/gopls/internal/cmd/serve.go b/gopls/internal/cmd/serve.go index a04e6dc75d3..08ed0312116 100644 --- a/gopls/internal/cmd/serve.go +++ b/gopls/internal/cmd/serve.go @@ -18,6 +18,7 @@ import ( "golang.org/x/tools/gopls/internal/lsp/debug" "golang.org/x/tools/gopls/internal/lsp/lsprpc" "golang.org/x/tools/gopls/internal/lsp/protocol" + "golang.org/x/tools/gopls/internal/telemetry" "golang.org/x/tools/internal/fakenet" "golang.org/x/tools/internal/jsonrpc2" "golang.org/x/tools/internal/tool" @@ -77,6 +78,8 @@ func (s *Serve) remoteArgs(network, address string) []string { // Run configures a server based on the flags, and then runs it. // It blocks until the server shuts down. func (s *Serve) Run(ctx context.Context, args ...string) error { + telemetry.Upload() + if len(args) > 0 { return tool.CommandLineErrorf("server does not take arguments, got %v", args) } diff --git a/gopls/internal/telemetry/telemetry.go b/gopls/internal/telemetry/telemetry.go index dc6f7c23372..2ce284c2bfd 100644 --- a/gopls/internal/telemetry/telemetry.go +++ b/gopls/internal/telemetry/telemetry.go @@ -26,10 +26,8 @@ func SetMode(mode string) error { return telemetry.SetMode(mode) } -// Start starts telemetry instrumentation. -func Start() { - counter.Open() - // upload only once at startup, hoping that users restart gopls often. +// Upload starts a goroutine for telemetry upload. +func Upload() { go upload.Run(nil) } diff --git a/gopls/internal/telemetry/telemetry_go118.go b/gopls/internal/telemetry/telemetry_go118.go index 53394002f76..7d0f11c7443 100644 --- a/gopls/internal/telemetry/telemetry_go118.go +++ b/gopls/internal/telemetry/telemetry_go118.go @@ -17,7 +17,7 @@ func SetMode(mode string) error { return nil } -func Start() { +func Upload() { } func RecordClientInfo(params *protocol.ParamInitialize) { diff --git a/gopls/main.go b/gopls/main.go index 19fab778dee..8163266972f 100644 --- a/gopls/main.go +++ b/gopls/main.go @@ -17,14 +17,14 @@ import ( "context" "os" + "golang.org/x/telemetry/counter" "golang.org/x/tools/gopls/internal/cmd" "golang.org/x/tools/gopls/internal/hooks" - "golang.org/x/tools/gopls/internal/telemetry" "golang.org/x/tools/internal/tool" ) func main() { - telemetry.Start() + counter.Open() // Enable telemetry counter writing. ctx := context.Background() tool.Main(ctx, cmd.New("gopls", "", nil, hooks.Options), os.Args[1:]) }