1
- package main
1
+ package handler
2
2
3
3
import (
4
4
"bytes"
5
5
"context"
6
6
"encoding/json"
7
+ "io"
7
8
"log"
8
9
"net/url"
9
10
"path/filepath"
@@ -13,16 +14,29 @@ import (
13
14
"github.com/sourcegraph/jsonrpc2"
14
15
)
15
16
16
- func newInoHandler () * InoHandler {
17
- return & InoHandler {
17
+ var enableLogging bool
18
+
19
+ // NewInoHandler creates and configures an InoHandler.
20
+ func NewInoHandler (stdin io.ReadCloser , stdout io.WriteCloser , stdinLog , stdoutLog io.Writer ,
21
+ clangdIn io.ReadCloser , clangdOut io.WriteCloser , clangdinLog , clangdoutLog io.Writer ,
22
+ logging bool ) * InoHandler {
23
+ enableLogging = logging
24
+ handler := & InoHandler {
18
25
data : make (map [lsp.DocumentURI ]* FileData ),
19
26
}
27
+ clangdStream := jsonrpc2 .NewBufferedStream (StreamReadWrite {clangdIn , clangdOut , clangdinLog , clangdoutLog }, jsonrpc2.VSCodeObjectCodec {})
28
+ clangdHandler := jsonrpc2 .HandlerWithError (handler .FromClangd )
29
+ handler .ClangdConn = jsonrpc2 .NewConn (context .Background (), clangdStream , clangdHandler )
30
+ stdStream := jsonrpc2 .NewBufferedStream (StreamReadWrite {stdin , stdout , stdinLog , stdoutLog }, jsonrpc2.VSCodeObjectCodec {})
31
+ stdHandler := jsonrpc2 .HandlerWithError (handler .FromStdio )
32
+ handler .StdioConn = jsonrpc2 .NewConn (context .Background (), stdStream , stdHandler )
33
+ return handler
20
34
}
21
35
22
36
// InoHandler is a JSON-RPC handler that delegates messages to clangd.
23
37
type InoHandler struct {
24
- stdioConn * jsonrpc2.Conn
25
- clangdConn * jsonrpc2.Conn
38
+ StdioConn * jsonrpc2.Conn
39
+ ClangdConn * jsonrpc2.Conn
26
40
data map [lsp.DocumentURI ]* FileData
27
41
}
28
42
@@ -44,9 +58,9 @@ func (handler *InoHandler) FromStdio(ctx context.Context, conn *jsonrpc2.Conn, r
44
58
}
45
59
var result interface {}
46
60
if req .Notif {
47
- err = handler .clangdConn .Notify (ctx , req .Method , params )
61
+ err = handler .ClangdConn .Notify (ctx , req .Method , params )
48
62
} else {
49
- result , err = sendRequest (ctx , handler .clangdConn , req .Method , params )
63
+ result , err = sendRequest (ctx , handler .ClangdConn , req .Method , params )
50
64
}
51
65
if err != nil {
52
66
log .Println ("From stdio: Method:" , req .Method , "Params:" , params , "Error:" , err )
@@ -304,9 +318,9 @@ func (handler *InoHandler) FromClangd(ctx context.Context, connection *jsonrpc2.
304
318
}
305
319
var result interface {}
306
320
if req .Notif {
307
- err = handler .stdioConn .Notify (ctx , req .Method , params )
321
+ err = handler .StdioConn .Notify (ctx , req .Method , params )
308
322
} else {
309
- result , err = sendRequest (ctx , handler .stdioConn , req .Method , params )
323
+ result , err = sendRequest (ctx , handler .StdioConn , req .Method , params )
310
324
}
311
325
if err != nil {
312
326
log .Println ("From clangd: Method:" , req .Method , "Params:" , params , "Error:" , err )
0 commit comments