|
1 | 1 | package streams
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "encoding/json" |
| 5 | + "fmt" |
4 | 6 | "log"
|
5 | 7 | "runtime/debug"
|
6 | 8 |
|
| 9 | + "github.com/bcmi-labs/arduino-language-server/lsp" |
7 | 10 | "github.com/fatih/color"
|
8 | 11 | "github.com/sourcegraph/jsonrpc2"
|
9 | 12 | )
|
@@ -34,19 +37,62 @@ func jsonrpcLog(prefix string, req *jsonrpc2.Request, resp *jsonrpc2.Response, s
|
34 | 37 | c = green
|
35 | 38 | }
|
36 | 39 | if resp != nil {
|
| 40 | + dec := jsonrpcLogDecodeResp(resp) |
37 | 41 | 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)) |
39 | 43 | } 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)) |
41 | 45 | }
|
42 | 46 | } else if req != nil {
|
| 47 | + dec := jsonrpcLogDecodeReq(req) |
43 | 48 | 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)) |
45 | 50 | } else {
|
46 |
| - log.Print(c.Sprintf(prefix+" NOTIFICATION %s", req.Method)) |
| 51 | + log.Print(c.Sprintf(prefix+" NOTIFICATION %s: %s", req.Method, dec)) |
47 | 52 | }
|
48 | 53 | } else {
|
49 | 54 | log.Print(green.Sprintf(prefix + " NULL MESSAGE"))
|
50 | 55 | log.Print(string(debug.Stack()))
|
51 | 56 | }
|
52 | 57 | }
|
| 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