golang / go

The Go programming language
https://go.dev
BSD 3-Clause "New" or "Revised" License
121.07k stars 17.36k forks source link

x/tools/gopls: combine -debug HTTP server and product (doc, asm, free symbols) web server #68229

Open adonovan opened 5 days ago

adonovan commented 5 days ago

It is unnecessary that gopls creates two HTTP servers, one for debugging and one for the "product" (as used by the doc, assembly, and free-symbols code actions). We should combine them, and also start the combined server early, during startup (reducing the need for later error handling).

@findleyr suggests that if the user provides a -debug flag, we should use that for the combined server instead of the ephemeral random port + secret endpoint that we currently use.

findleyr commented 4 days ago

To summarize, here are reasons to do this:

  1. Persistent links for interacting with gopls across sessions.
  2. Earlier error handling if the web server can't be started.
  3. Improved discoverability of debugging features.

The last is a bit nebulous: our current -debug pages are rather thrown-together out of expedience: we needed to be able to interrogate Views, memory usage, traces, and pprof output. If we combine this in a common nav with product facing features, I'm very much imagining a more polished dashboard. While that would be a fun project, it probably has low impact on most users, so is a bit hard to justify. Nevertheless, it's something I've wanted for a while, so may do as a side project.

Final thought: if we do this we should consider deprecating the -debug flag in favor of something like -http.