Skip to content

Commit 16b8ab1

Browse files
committed
all: support jsonrpc2 Handler logic
1 parent ffa67df commit 16b8ab1

File tree

11 files changed

+1215
-851
lines changed

11 files changed

+1215
-851
lines changed

canceller.go

Lines changed: 0 additions & 74 deletions
This file was deleted.

client.go

Lines changed: 26 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -10,46 +10,28 @@ import (
1010
"go.uber.org/zap"
1111

1212
"go.lsp.dev/jsonrpc2"
13+
"go.lsp.dev/pkg/xcontext"
1314
)
1415

15-
// clientHandler represents a client handler.
16-
type clientHandler struct {
17-
client ClientInterface
18-
}
19-
20-
// compile time check whether the clientHandler implements jsonrpc2.Handler interface.
21-
var _ jsonrpc2.Handler = &clientHandler{}
22-
23-
// Cancel implements Handler interface.
24-
func (clientHandler) Cancel(ctx context.Context, conn *jsonrpc2.Conn, id jsonrpc2.ID, canceled bool) bool {
25-
return false
26-
}
27-
28-
// Request implements Handler interface.
29-
func (clientHandler) Request(ctx context.Context, conn *jsonrpc2.Conn, direction jsonrpc2.Direction, r *jsonrpc2.WireRequest) context.Context {
30-
return ctx
31-
}
16+
func ClientHandler(client ClientInterface, handler jsonrpc2.Handler) jsonrpc2.Handler {
17+
h := func(ctx context.Context, reply jsonrpc2.Replier, req jsonrpc2.Requester) error {
18+
if ctx.Err() != nil {
19+
ctx := xcontext.Detach(ctx)
20+
return reply(ctx, nil, RequestCancelledError)
21+
}
22+
handled, err := clientDispatch(ctx, client, reply, req)
23+
if handled || err != nil {
24+
return err
25+
}
26+
return handler(ctx, reply, req)
27+
}
3228

33-
// Response implements Handler interface.
34-
func (clientHandler) Response(ctx context.Context, conn *jsonrpc2.Conn, direction jsonrpc2.Direction, r *jsonrpc2.WireResponse) context.Context {
35-
return ctx
29+
return h
3630
}
3731

38-
// Done implements Handler interface.
39-
func (clientHandler) Done(ctx context.Context, err error) {}
40-
41-
// Read implements Handler interface.
42-
func (clientHandler) Read(ctx context.Context, bytes int64) context.Context { return ctx }
43-
44-
// Write implements Handler interface.
45-
func (clientHandler) Write(ctx context.Context, bytes int64) context.Context { return ctx }
46-
47-
// Error implements Handler interface.
48-
func (clientHandler) Error(ctx context.Context, err error) {}
49-
5032
// ClientInterface represents a Language Server Protocol client.
5133
type ClientInterface interface {
52-
Run(ctx context.Context) (err error)
34+
// Run(ctx context.Context) (err error)
5335
LogMessage(ctx context.Context, params *LogMessageParams) (err error)
5436
PublishDiagnostics(ctx context.Context, params *PublishDiagnosticsParams) (err error)
5537
ShowMessage(ctx context.Context, params *ShowMessageParams) (err error)
@@ -96,18 +78,18 @@ const (
9678

9779
// client implements a Language Server Protocol client.
9880
type client struct {
99-
*jsonrpc2.Conn
81+
jsonrpc2.Conn
10082
logger *zap.Logger
10183
}
10284

10385
// compiler time check whether the Client implements ClientInterface interface.
10486
var _ ClientInterface = (*client)(nil)
10587

10688
// Run runs the Language Server Protocol client.
107-
func (c *client) Run(ctx context.Context) (err error) {
108-
err = c.Conn.Run(ctx)
109-
return
110-
}
89+
// func (c *client) Run(ctx context.Context) (err error) {
90+
// _, err = c.Conn.Run(ctx)
91+
// return
92+
// }
11193

11294
// LogMessage sends the notification from the server to the client to ask the client to log a particular message.
11395
func (c *client) LogMessage(ctx context.Context, params *LogMessageParams) (err error) {
@@ -142,7 +124,7 @@ func (c *client) ShowMessage(ctx context.Context, params *ShowMessageParams) (er
142124
// In addition to the show message notification the request allows to pass actions and to wait for an answer from the client.
143125
func (c *client) ShowMessageRequest(ctx context.Context, params *ShowMessageRequestParams) (result *MessageActionItem, err error) {
144126
result = new(MessageActionItem)
145-
err = c.Conn.Call(ctx, MethodWindowShowMessageRequest, params, result)
127+
_, err = c.Conn.Call(ctx, MethodWindowShowMessageRequest, params, result)
146128

147129
return result, err
148130
}
@@ -160,19 +142,19 @@ func (c *client) Telemetry(ctx context.Context, params interface{}) (err error)
160142
// A client opts in via the dynamicRegistration property on the specific client capabilities.
161143
// A client can even provide dynamic registration for capability A but not for capability B (see TextDocumentClientCapabilities as an example).
162144
func (c *client) RegisterCapability(ctx context.Context, params *RegistrationParams) (err error) {
163-
err = c.Conn.Call(ctx, MethodClientRegisterCapability, params, nil)
145+
_, err = c.Conn.Call(ctx, MethodClientRegisterCapability, params, nil)
164146
return
165147
}
166148

167149
// UnregisterCapability sends the request from the server to the client to unregister a previously registered capability.
168150
func (c *client) UnregisterCapability(ctx context.Context, params *UnregistrationParams) (err error) {
169-
err = c.Conn.Call(ctx, MethodClientUnregisterCapability, params, nil)
151+
_, err = c.Conn.Call(ctx, MethodClientUnregisterCapability, params, nil)
170152
return
171153
}
172154

173155
// WorkspaceApplyEdit sends the request from the server to the client to modify resource on the client side.
174156
func (c *client) WorkspaceApplyEdit(ctx context.Context, params *ApplyWorkspaceEditParams) (result bool, err error) {
175-
err = c.Conn.Call(ctx, MethodWorkspaceApplyEdit, params, &result)
157+
_, err = c.Conn.Call(ctx, MethodWorkspaceApplyEdit, params, &result)
176158

177159
return result, err
178160
}
@@ -184,7 +166,7 @@ func (c *client) WorkspaceApplyEdit(ctx context.Context, params *ApplyWorkspaceE
184166
// passed ConfigurationItems (e.g. the first item in the response is the result for the first configuration item in the params).
185167
func (c *client) WorkspaceConfiguration(ctx context.Context, params *ConfigurationParams) ([]interface{}, error) {
186168
var result []interface{}
187-
err := c.Conn.Call(ctx, MethodWorkspaceConfiguration, params, &result)
169+
_, err := c.Conn.Call(ctx, MethodWorkspaceConfiguration, params, &result)
188170

189171
return result, err
190172
}
@@ -195,7 +177,7 @@ func (c *client) WorkspaceConfiguration(ctx context.Context, params *Configurati
195177
//
196178
// Since version 3.6.0.
197179
func (c *client) WorkspaceFolders(ctx context.Context) (result []WorkspaceFolder, err error) {
198-
err = c.Conn.Call(ctx, MethodWorkspaceWorkspaceFolders, nil, &result)
180+
_, err = c.Conn.Call(ctx, MethodWorkspaceWorkspaceFolders, nil, &result)
199181

200182
return result, err
201183
}

0 commit comments

Comments
 (0)