Skip to content

Commit 62e5552

Browse files
committed
Improved logging of LSP messages
1 parent 5c2c156 commit 62e5552

File tree

2 files changed

+50
-5
lines changed

2 files changed

+50
-5
lines changed

Diff for: handler/handler.go

-1
Original file line numberDiff line numberDiff line change
@@ -1632,7 +1632,6 @@ func (handler *InoHandler) FromClangd(ctx context.Context, connection *jsonrpc2.
16321632
} else {
16331633
prefix += fmt.Sprintf("%s %v ", req.Method, req.ID)
16341634
}
1635-
defer log.Printf(prefix + "(done)")
16361635

16371636
if req.Method == "window/workDoneProgress/create" {
16381637
params := lsp.WorkDoneProgressCreateParams{}

Diff for: streams/jsonrpc2.go

+50-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package streams
22

33
import (
4+
"encoding/json"
5+
"fmt"
46
"log"
57
"runtime/debug"
68

9+
"github.com/bcmi-labs/arduino-language-server/lsp"
710
"github.com/fatih/color"
811
"github.com/sourcegraph/jsonrpc2"
912
)
@@ -34,19 +37,62 @@ func jsonrpcLog(prefix string, req *jsonrpc2.Request, resp *jsonrpc2.Response, s
3437
c = green
3538
}
3639
if resp != nil {
40+
dec := jsonrpcLogDecodeResp(resp)
3741
if req != nil {
38-
log.Print(c.Sprintf(prefix+" ANSWER %s %v (%v)", req.Method, req.ID, resp.ID))
42+
log.Print(c.Sprintf(prefix+" ANSWER %s %v (%v): %s", req.Method, req.ID, resp.ID, dec))
3943
} else {
40-
log.Print(c.Sprintf(prefix+" ANSWER UNBOUND (%v)", resp.ID))
44+
log.Print(c.Sprintf(prefix+" ANSWER UNBOUND (%v): %s", resp.ID, dec))
4145
}
4246
} else if req != nil {
47+
dec := jsonrpcLogDecodeReq(req)
4348
if !req.Notif {
44-
log.Print(c.Sprintf(prefix+" REQUEST %s %v", req.Method, req.ID))
49+
log.Print(c.Sprintf(prefix+" REQUEST %s %v: %s", req.Method, req.ID, dec))
4550
} else {
46-
log.Print(c.Sprintf(prefix+" NOTIFICATION %s", req.Method))
51+
log.Print(c.Sprintf(prefix+" NOTIFICATION %s: %s", req.Method, dec))
4752
}
4853
} else {
4954
log.Print(green.Sprintf(prefix + " NULL MESSAGE"))
5055
log.Print(string(debug.Stack()))
5156
}
5257
}
58+
59+
func jsonrpcLogDecodeReq(req *jsonrpc2.Request) string {
60+
fmtString := func(s *string) string {
61+
if s == nil {
62+
return ""
63+
}
64+
return *s
65+
}
66+
fmtFloat := func(s *float64) float64 {
67+
if s == nil {
68+
return 0
69+
}
70+
return *s
71+
}
72+
switch req.Method {
73+
case "$/progress":
74+
var v lsp.ProgressParams
75+
if err := json.Unmarshal(*req.Params, &v); err != nil {
76+
return err.Error()
77+
}
78+
var begin lsp.WorkDoneProgressBegin
79+
if json.Unmarshal(*v.Value, &begin) == nil {
80+
return fmt.Sprintf("TOKEN=%s BEGIN %v %v", v.Token, begin.Title, fmtString(begin.Message))
81+
}
82+
var report lsp.WorkDoneProgressReport
83+
if json.Unmarshal(*v.Value, &report) == nil {
84+
return fmt.Sprintf("TOKEN=%s REPORT %v %v%%", v.Token, fmtString(report.Message), fmtFloat(report.Percentage))
85+
}
86+
var end lsp.WorkDoneProgressEnd
87+
if json.Unmarshal(*v.Value, &end) == nil {
88+
return fmt.Sprintf("TOKEN=%s END %v", v.Token, fmtString(end.Message))
89+
}
90+
return "UNKNOWN?"
91+
default:
92+
return ""
93+
}
94+
}
95+
96+
func jsonrpcLogDecodeResp(resp *jsonrpc2.Response) string {
97+
return ""
98+
}

0 commit comments

Comments
 (0)