1- package main
1+ package handler
22
33import (
44 "bytes"
55 "context"
66 "encoding/json"
7+ "io"
78 "log"
89 "net/url"
910 "path/filepath"
@@ -13,16 +14,29 @@ import (
1314 "github.com/sourcegraph/jsonrpc2"
1415)
1516
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 {
1825 data : make (map [lsp.DocumentURI ]* FileData ),
1926 }
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
2034}
2135
2236// InoHandler is a JSON-RPC handler that delegates messages to clangd.
2337type InoHandler struct {
24- stdioConn * jsonrpc2.Conn
25- clangdConn * jsonrpc2.Conn
38+ StdioConn * jsonrpc2.Conn
39+ ClangdConn * jsonrpc2.Conn
2640 data map [lsp.DocumentURI ]* FileData
2741}
2842
@@ -44,9 +58,9 @@ func (handler *InoHandler) FromStdio(ctx context.Context, conn *jsonrpc2.Conn, r
4458 }
4559 var result interface {}
4660 if req .Notif {
47- err = handler .clangdConn .Notify (ctx , req .Method , params )
61+ err = handler .ClangdConn .Notify (ctx , req .Method , params )
4862 } else {
49- result , err = sendRequest (ctx , handler .clangdConn , req .Method , params )
63+ result , err = sendRequest (ctx , handler .ClangdConn , req .Method , params )
5064 }
5165 if err != nil {
5266 log .Println ("From stdio: Method:" , req .Method , "Params:" , params , "Error:" , err )
@@ -304,9 +318,9 @@ func (handler *InoHandler) FromClangd(ctx context.Context, connection *jsonrpc2.
304318 }
305319 var result interface {}
306320 if req .Notif {
307- err = handler .stdioConn .Notify (ctx , req .Method , params )
321+ err = handler .StdioConn .Notify (ctx , req .Method , params )
308322 } else {
309- result , err = sendRequest (ctx , handler .stdioConn , req .Method , params )
323+ result , err = sendRequest (ctx , handler .StdioConn , req .Method , params )
310324 }
311325 if err != nil {
312326 log .Println ("From clangd: Method:" , req .Method , "Params:" , params , "Error:" , err )
0 commit comments