1
+ using System ;
1
2
using System . Threading ;
2
3
using System . Threading . Tasks ;
3
4
using MediatR ;
5
+ using Microsoft . Extensions . DependencyInjection ;
6
+ using Newtonsoft . Json . Linq ;
4
7
using OmniSharp . Extensions . JsonRpc ;
5
8
using OmniSharp . Extensions . JsonRpc . Generation ;
6
9
using OmniSharp . Extensions . LanguageServer . Protocol . Client ;
7
10
using OmniSharp . Extensions . LanguageServer . Protocol . Client . Capabilities ;
8
11
using OmniSharp . Extensions . LanguageServer . Protocol . Models ;
12
+ using OmniSharp . Extensions . LanguageServer . Protocol . Server ;
9
13
10
14
namespace OmniSharp . Extensions . LanguageServer . Protocol . Workspace
11
15
{
@@ -27,4 +31,289 @@ public ExecuteCommandHandler(ExecuteCommandRegistrationOptions registrationOptio
27
31
public virtual void SetCapability ( ExecuteCommandCapability capability ) => Capability = capability ;
28
32
protected ExecuteCommandCapability Capability { get ; private set ; }
29
33
}
34
+
35
+ public abstract class ExecuteCommandHandlerBase < T > : ExecuteCommandHandler
36
+ {
37
+ private readonly ISerializer _serializer ;
38
+
39
+ public ExecuteCommandHandlerBase ( string command , ISerializer serializer ) : base ( new ExecuteCommandRegistrationOptions ( ) { Commands = new Container < string > ( command ) } )
40
+ {
41
+ _serializer = serializer ;
42
+ }
43
+
44
+ public sealed override Task < Unit > Handle ( ExecuteCommandParams request , CancellationToken cancellationToken )
45
+ {
46
+ var args = request . Arguments ?? new JArray ( ) ;
47
+ T arg1 = default ;
48
+ if ( args . Count > 0 ) arg1 = args [ 0 ] . ToObject < T > ( _serializer . JsonSerializer ) ;
49
+ return Handle ( arg1 , cancellationToken ) ;
50
+ }
51
+
52
+ public abstract Task < Unit > Handle ( T arg1 , CancellationToken cancellationToken ) ;
53
+ }
54
+
55
+ public abstract class ExecuteCommandHandlerBase < T , T2 > : ExecuteCommandHandler
56
+ {
57
+ private readonly ISerializer _serializer ;
58
+
59
+ public ExecuteCommandHandlerBase ( string command , ISerializer serializer ) : base ( new ExecuteCommandRegistrationOptions ( ) { Commands = new Container < string > ( command ) } )
60
+ {
61
+ _serializer = serializer ;
62
+ }
63
+
64
+ public sealed override Task < Unit > Handle ( ExecuteCommandParams request , CancellationToken cancellationToken )
65
+ {
66
+ var args = request . Arguments ?? new JArray ( ) ;
67
+ T arg1 = default ;
68
+ if ( args . Count > 0 ) arg1 = args [ 0 ] . ToObject < T > ( _serializer . JsonSerializer ) ;
69
+ T2 arg2 = default ;
70
+ if ( args . Count > 1 ) arg2 = args [ 1 ] . ToObject < T2 > ( _serializer . JsonSerializer ) ;
71
+ return Handle ( arg1 , arg2 , cancellationToken ) ;
72
+ }
73
+
74
+ public abstract Task < Unit > Handle ( T arg1 , T2 arg2 , CancellationToken cancellationToken ) ;
75
+ }
76
+
77
+ public abstract class ExecuteCommandHandlerBase < T , T2 , T3 > : ExecuteCommandHandler
78
+ {
79
+ private readonly ISerializer _serializer ;
80
+
81
+ public ExecuteCommandHandlerBase ( string command , ISerializer serializer ) : base ( new ExecuteCommandRegistrationOptions ( ) { Commands = new Container < string > ( command ) } )
82
+ {
83
+ _serializer = serializer ;
84
+ }
85
+
86
+ public sealed override Task < Unit > Handle ( ExecuteCommandParams request , CancellationToken cancellationToken )
87
+ {
88
+ var args = request . Arguments ?? new JArray ( ) ;
89
+ T arg1 = default ;
90
+ if ( args . Count > 0 ) arg1 = args [ 0 ] . ToObject < T > ( _serializer . JsonSerializer ) ;
91
+ T2 arg2 = default ;
92
+ if ( args . Count > 1 ) arg2 = args [ 1 ] . ToObject < T2 > ( _serializer . JsonSerializer ) ;
93
+ T3 arg3 = default ;
94
+ if ( args . Count > 2 ) arg3 = args [ 2 ] . ToObject < T3 > ( _serializer . JsonSerializer ) ;
95
+ return Handle ( arg1 , arg2 , arg3 , cancellationToken ) ;
96
+ }
97
+
98
+ public abstract Task < Unit > Handle ( T arg1 , T2 arg2 , T3 arg3 , CancellationToken cancellationToken ) ;
99
+ }
100
+
101
+ public abstract class ExecuteCommandHandlerBase < T , T2 , T3 , T4 > : ExecuteCommandHandler
102
+ {
103
+ private readonly ISerializer _serializer ;
104
+
105
+ public ExecuteCommandHandlerBase ( string command , ISerializer serializer ) : base ( new ExecuteCommandRegistrationOptions ( ) { Commands = new Container < string > ( command ) } )
106
+ {
107
+ _serializer = serializer ;
108
+ }
109
+
110
+ public sealed override Task < Unit > Handle ( ExecuteCommandParams request , CancellationToken cancellationToken )
111
+ {
112
+ var args = request . Arguments ?? new JArray ( ) ;
113
+ T arg1 = default ;
114
+ if ( args . Count > 0 ) arg1 = args [ 0 ] . ToObject < T > ( _serializer . JsonSerializer ) ;
115
+ T2 arg2 = default ;
116
+ if ( args . Count > 1 ) arg2 = args [ 1 ] . ToObject < T2 > ( _serializer . JsonSerializer ) ;
117
+ T3 arg3 = default ;
118
+ if ( args . Count > 2 ) arg3 = args [ 2 ] . ToObject < T3 > ( _serializer . JsonSerializer ) ;
119
+ T4 arg4 = default ;
120
+ if ( args . Count > 3 ) arg4 = args [ 3 ] . ToObject < T4 > ( _serializer . JsonSerializer ) ;
121
+ return Handle ( arg1 , arg2 , arg3 , arg4 , cancellationToken ) ;
122
+ }
123
+
124
+ public abstract Task < Unit > Handle ( T arg1 , T2 arg2 , T3 arg3 , T4 arg4 , CancellationToken cancellationToken ) ;
125
+ }
126
+
127
+ public abstract class ExecuteCommandHandlerBase < T , T2 , T3 , T4 , T5 > : ExecuteCommandHandler
128
+ {
129
+ private readonly ISerializer _serializer ;
130
+
131
+ public ExecuteCommandHandlerBase ( string command , ISerializer serializer ) : base ( new ExecuteCommandRegistrationOptions ( ) { Commands = new Container < string > ( command ) } )
132
+ {
133
+ _serializer = serializer ;
134
+ }
135
+
136
+ public sealed override Task < Unit > Handle ( ExecuteCommandParams request , CancellationToken cancellationToken )
137
+ {
138
+ var args = request . Arguments ?? new JArray ( ) ;
139
+ T arg1 = default ;
140
+ if ( args . Count > 0 ) arg1 = args [ 0 ] . ToObject < T > ( _serializer . JsonSerializer ) ;
141
+ T2 arg2 = default ;
142
+ if ( args . Count > 1 ) arg2 = args [ 1 ] . ToObject < T2 > ( _serializer . JsonSerializer ) ;
143
+ T3 arg3 = default ;
144
+ if ( args . Count > 2 ) arg3 = args [ 2 ] . ToObject < T3 > ( _serializer . JsonSerializer ) ;
145
+ T4 arg4 = default ;
146
+ if ( args . Count > 3 ) arg4 = args [ 3 ] . ToObject < T4 > ( _serializer . JsonSerializer ) ;
147
+ T5 arg5 = default ;
148
+ if ( args . Count > 4 ) arg5 = args [ 4 ] . ToObject < T5 > ( _serializer . JsonSerializer ) ;
149
+ return Handle ( arg1 , arg2 , arg3 , arg4 , arg5 , cancellationToken ) ;
150
+ }
151
+
152
+ public abstract Task < Unit > Handle ( T arg1 , T2 arg2 , T3 arg3 , T4 arg4 , T5 arg5 , CancellationToken cancellationToken ) ;
153
+ }
154
+
155
+ public abstract class ExecuteCommandHandlerBase < T , T2 , T3 , T4 , T5 , T6 > : ExecuteCommandHandler
156
+ {
157
+ private readonly ISerializer _serializer ;
158
+
159
+ public ExecuteCommandHandlerBase ( string command , ISerializer serializer ) : base ( new ExecuteCommandRegistrationOptions ( ) { Commands = new Container < string > ( command ) } )
160
+ {
161
+ _serializer = serializer ;
162
+ }
163
+
164
+ public sealed override Task < Unit > Handle ( ExecuteCommandParams request , CancellationToken cancellationToken )
165
+ {
166
+ var args = request . Arguments ?? new JArray ( ) ;
167
+ T arg1 = default ;
168
+ if ( args . Count > 0 ) arg1 = args [ 0 ] . ToObject < T > ( _serializer . JsonSerializer ) ;
169
+ T2 arg2 = default ;
170
+ if ( args . Count > 1 ) arg2 = args [ 1 ] . ToObject < T2 > ( _serializer . JsonSerializer ) ;
171
+ T3 arg3 = default ;
172
+ if ( args . Count > 2 ) arg3 = args [ 2 ] . ToObject < T3 > ( _serializer . JsonSerializer ) ;
173
+ T4 arg4 = default ;
174
+ if ( args . Count > 3 ) arg4 = args [ 3 ] . ToObject < T4 > ( _serializer . JsonSerializer ) ;
175
+ T5 arg5 = default ;
176
+ if ( args . Count > 4 ) arg5 = args [ 4 ] . ToObject < T5 > ( _serializer . JsonSerializer ) ;
177
+ T6 arg6 = default ;
178
+ if ( args . Count > 5 ) arg6 = args [ 5 ] . ToObject < T6 > ( _serializer . JsonSerializer ) ;
179
+ return Handle ( arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , cancellationToken ) ;
180
+ }
181
+
182
+ public abstract Task < Unit > Handle ( T arg1 , T2 arg2 , T3 arg3 , T4 arg4 , T5 arg5 , T6 arg6 , CancellationToken cancellationToken ) ;
183
+ }
184
+
185
+ public static partial class ExecuteCommandExtensions
186
+ {
187
+ public static Task ExecuteCommand ( this IWorkspaceLanguageClient mediator , Command @params , CancellationToken cancellationToken = default )
188
+ => mediator . ExecuteCommand ( new ExecuteCommandParams ( ) { Arguments = @params . Arguments , Command = @params . Name } , cancellationToken ) ;
189
+
190
+ public static Task ExecuteCommand ( this ILanguageClient mediator , Command @params , CancellationToken cancellationToken = default )
191
+ => mediator . ExecuteCommand ( new ExecuteCommandParams ( ) { Arguments = @params . Arguments , Command = @params . Name } , cancellationToken ) ;
192
+
193
+ public static ILanguageServerRegistry OnExecuteCommand < T > ( this ILanguageServerRegistry registry , string command , Func < T , Task > handler )
194
+ {
195
+ return registry . AddHandler ( _ => new Handler < T > ( command , handler , _ . GetRequiredService < ISerializer > ( ) ) ) ;
196
+ }
197
+
198
+ class Handler < T > : ExecuteCommandHandlerBase < T >
199
+ {
200
+ private readonly Func < T , Task > _handler ;
201
+
202
+ public Handler ( string command , Func < T , Task > handler , ISerializer serializer ) : base ( command , serializer )
203
+ {
204
+ _handler = handler ;
205
+ }
206
+
207
+ public override async Task < Unit > Handle ( T arg1 , CancellationToken cancellationToken )
208
+ {
209
+ await _handler ( arg1 ) ;
210
+ return Unit . Value ;
211
+ }
212
+ }
213
+
214
+ public static ILanguageServerRegistry OnExecuteCommand < T , T2 > ( this ILanguageServerRegistry registry , string command , Func < T , T2 , Task > handler )
215
+ {
216
+ return registry . AddHandler ( _ => new Handler < T , T2 > ( command , handler , _ . GetRequiredService < ISerializer > ( ) ) ) ;
217
+ }
218
+
219
+ class Handler < T , T2 > : ExecuteCommandHandlerBase < T , T2 >
220
+ {
221
+ private readonly Func < T , T2 , Task > _handler ;
222
+
223
+ public Handler ( string command , Func < T , T2 , Task > handler , ISerializer serializer ) : base ( command , serializer )
224
+ {
225
+ _handler = handler ;
226
+ }
227
+
228
+ public override async Task < Unit > Handle ( T arg1 , T2 arg2 , CancellationToken cancellationToken )
229
+ {
230
+ await _handler ( arg1 , arg2 ) ;
231
+ return Unit . Value ;
232
+ }
233
+ }
234
+
235
+ public static ILanguageServerRegistry OnExecuteCommand < T , T2 , T3 > ( this ILanguageServerRegistry registry , string command , Func < T , T2 , T3 , Task > handler )
236
+ {
237
+ return registry . AddHandler ( _ => new Handler < T , T2 , T3 > ( command , handler , _ . GetRequiredService < ISerializer > ( ) ) ) ;
238
+ }
239
+
240
+ class Handler < T , T2 , T3 > : ExecuteCommandHandlerBase < T , T2 , T3 >
241
+ {
242
+ private readonly Func < T , T2 , T3 , Task > _handler ;
243
+
244
+ public Handler ( string command , Func < T , T2 , T3 , Task > handler , ISerializer serializer ) : base ( command , serializer )
245
+ {
246
+ _handler = handler ;
247
+ }
248
+
249
+ public override async Task < Unit > Handle ( T arg1 , T2 arg2 , T3 arg3 , CancellationToken cancellationToken )
250
+ {
251
+ await _handler ( arg1 , arg2 , arg3 ) ;
252
+ return Unit . Value ;
253
+ }
254
+ }
255
+
256
+ public static ILanguageServerRegistry OnExecuteCommand < T , T2 , T3 , T4 > ( this ILanguageServerRegistry registry , string command , Func < T , T2 , T3 , T4 , Task > handler )
257
+ {
258
+ return registry . AddHandler ( _ => new Handler < T , T2 , T3 , T4 > ( command , handler , _ . GetRequiredService < ISerializer > ( ) ) ) ;
259
+ }
260
+
261
+ class Handler < T , T2 , T3 , T4 > : ExecuteCommandHandlerBase < T , T2 , T3 , T4 >
262
+ {
263
+ private readonly Func < T , T2 , T3 , T4 , Task > _handler ;
264
+
265
+ public Handler ( string command , Func < T , T2 , T3 , T4 , Task > handler , ISerializer serializer ) : base ( command , serializer )
266
+ {
267
+ _handler = handler ;
268
+ }
269
+
270
+ public override async Task < Unit > Handle ( T arg1 , T2 arg2 , T3 arg3 , T4 arg4 , CancellationToken cancellationToken )
271
+ {
272
+ await _handler ( arg1 , arg2 , arg3 , arg4 ) ;
273
+ return Unit . Value ;
274
+ }
275
+ }
276
+
277
+ public static ILanguageServerRegistry OnExecuteCommand < T , T2 , T3 , T4 , T5 > ( this ILanguageServerRegistry registry , string command , Func < T , T2 , T3 , T4 , T5 , Task > handler )
278
+ {
279
+ return registry . AddHandler ( _ => new Handler < T , T2 , T3 , T4 , T5 > ( command , handler , _ . GetRequiredService < ISerializer > ( ) ) ) ;
280
+ }
281
+
282
+ class Handler < T , T2 , T3 , T4 , T5 > : ExecuteCommandHandlerBase < T , T2 , T3 , T4 , T5 >
283
+ {
284
+ private readonly Func < T , T2 , T3 , T4 , T5 , Task > _handler ;
285
+
286
+ public Handler ( string command , Func < T , T2 , T3 , T4 , T5 , Task > handler , ISerializer serializer ) : base ( command , serializer )
287
+ {
288
+ _handler = handler ;
289
+ }
290
+
291
+ public override async Task < Unit > Handle ( T arg1 , T2 arg2 , T3 arg3 , T4 arg4 , T5 arg5 , CancellationToken cancellationToken )
292
+ {
293
+ await _handler ( arg1 , arg2 , arg3 , arg4 , arg5 ) ;
294
+ return Unit . Value ;
295
+ }
296
+ }
297
+
298
+ public static ILanguageServerRegistry OnExecuteCommand < T , T2 , T3 , T4 , T5 , T6 > ( this ILanguageServerRegistry registry , string command , Func < T , T2 , T3 , T4 , T5 , T6 , Task > handler )
299
+ {
300
+ return registry . AddHandler ( _ => new Handler < T , T2 , T3 , T4 , T5 , T6 > ( command , handler , _ . GetRequiredService < ISerializer > ( ) ) ) ;
301
+ }
302
+
303
+ class Handler < T , T2 , T3 , T4 , T5 , T6 > : ExecuteCommandHandlerBase < T , T2 , T3 , T4 , T5 , T6 >
304
+ {
305
+ private readonly Func < T , T2 , T3 , T4 , T5 , T6 , Task > _handler ;
306
+
307
+ public Handler ( string command , Func < T , T2 , T3 , T4 , T5 , T6 , Task > handler , ISerializer serializer ) : base ( command , serializer )
308
+ {
309
+ _handler = handler ;
310
+ }
311
+
312
+ public override async Task < Unit > Handle ( T arg1 , T2 arg2 , T3 arg3 , T4 arg4 , T5 arg5 , T6 arg6 , CancellationToken cancellationToken )
313
+ {
314
+ await _handler ( arg1 , arg2 , arg3 , arg4 , arg5 , arg6 ) ;
315
+ return Unit . Value ;
316
+ }
317
+ }
318
+ }
30
319
}
0 commit comments