.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools / gopls@v0.6.9 / integration / replay / README.md
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools/gopls@v0.6.9/integration/replay/README.md b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools/gopls@v0.6.9/integration/replay/README.md
new file mode 100644 (file)
index 0000000..7c32277
--- /dev/null
@@ -0,0 +1,79 @@
+# Replaying Logs
+
+The LSP log replayer takes a log from a gopls session, starts up an instance of gopls,
+and tries to replay the session. It produces a log from the replayed session and reports
+some comparative statistics of the two logs.
+
+```replay -log <logfile>```
+
+The `logfile` should be the log produced by gopls. It will have a name like
+`/tmp/gopls-89775` or, on a Mac, `$TMPDIR/gopls-29388`.
+
+If `replay` cannot find a copy of gopls to execute, use `-cmd <path to gopls>`.
+It looks in the same places where `go install` would put its output,
+namely `$GOBIN/gopls`, `$GOPATH/bin/gopls`, `$HOME/go/bin/gopls`.
+
+The log for the replayed session is saved in `/tmp/seen`.
+
+There is also a boolean argument `-cmp` which compares the log file
+with `/tmp/seen` without invoking gopls and rerunning the session.
+
+The output is fairly cryptic, and generated by logging. Ideas for better output would be welcome.
+Here's an example, with intermingled comments:
+
+```
+main.go:50: old 1856, hist:[10:177 30:1 100:0 300:3 1000:4 ]
+```
+This says that the original log had 1856 records in it. The histogram is
+counting how long RPCs took, in milliseconds. In this case 177 took no more
+than 10ms, and 4 took between 300ms and 1000ms.
+```
+main.go:53: calling mimic
+main.go:293: mimic 1856
+```
+This is a reminder that it's replaying in a new session, with a log file
+containing 1856 records
+```
+main.go:61: new 1846, hist:[10:181 30:1 100:1 300:1 1000:1 ]
+```
+The new session produced 1846 log records (that's 10 fewer),
+and a vaguely similar histogram.
+```
+main.go:96: old: clrequest:578 clresponse:185 svrequest:2 svresponse:2 toserver:244 toclient:460 reporterr:385
+main.go:96: new: clrequest:571 clresponse:185 svrequest:2 svresponse:2 toserver:241 toclient:460 reporterr:385
+```
+The first line is for the original log, the second for the new log. The new log has 7 fewer RPC requests
+from the client *clrequest* (578 vs 571), the same number of client responses *clresponse*, 3 fewer
+notifications *toserver* from the client, the same number from the server *toclient* to the client, and
+the same number of errors *reporterr*. (That's mysterious, but a look at the ends of the log files shows
+that the original session ended with several RPCs that don't show up, for whatever reason, in the new session.)
+
+Finally, there are counts of the various notifications seen, in the new log and the old log, and
+which direction they went. (The 3 fewer notifications in the summary above can be seen here to be from cancels
+and a didChange.)
+```
+main.go:107: counts of notifications
+main.go:110:  '$/cancelRequest'. new toserver 1
+main.go:110:  '$/cancelRequest'. old toserver 3
+main.go:110:  'initialized'. new toserver 1
+main.go:110:  'initialized'. old toserver 1
+main.go:110:  'textDocument/didChange'. new toserver 231
+main.go:110:  'textDocument/didChange'. old toserver 232
+main.go:110:  'textDocument/didOpen'. new toserver 1
+main.go:110:  'textDocument/didOpen'. old toserver 1
+main.go:110:  'textDocument/didSave'. new toserver 7
+main.go:110:  'textDocument/didSave'. old toserver 7
+main.go:110:  'textDocument/publishDiagnostics'. new toclient 182
+main.go:110:  'textDocument/publishDiagnostics'. old toclient 182
+main.go:110:  'window/logMessage'. new toclient 278
+main.go:110:  'window/logMessage'. old toclient 278
+```
+### Caveats
+Replay cannot restore the exact environment gopls saw for the original session.
+For instance, the first didOpen message in the new session will see the file
+as it was left by the original session.
+
+Gopls invokes various tools, and the environment they see could have changed too.
+
+Replay will use the gopls it finds (or is given). It has no way of using
+the same version that created the original session.