@lewin671/lsp-client 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +64 -0
  3. package/lib/common/Feature.d.ts +192 -0
  4. package/lib/common/Feature.js +159 -0
  5. package/lib/common/Feature.js.map +1 -0
  6. package/lib/common/LanguageClient.d.ts +230 -0
  7. package/lib/common/LanguageClient.js +512 -0
  8. package/lib/common/LanguageClient.js.map +1 -0
  9. package/lib/common/features/CompletionFeature.d.ts +23 -0
  10. package/lib/common/features/CompletionFeature.js +101 -0
  11. package/lib/common/features/CompletionFeature.js.map +1 -0
  12. package/lib/common/features/DefinitionFeature.d.ts +23 -0
  13. package/lib/common/features/DefinitionFeature.js +49 -0
  14. package/lib/common/features/DefinitionFeature.js.map +1 -0
  15. package/lib/common/features/DiagnosticFeature.d.ts +15 -0
  16. package/lib/common/features/DiagnosticFeature.js +39 -0
  17. package/lib/common/features/DiagnosticFeature.js.map +1 -0
  18. package/lib/common/features/DocumentSymbolFeature.d.ts +23 -0
  19. package/lib/common/features/DocumentSymbolFeature.js +87 -0
  20. package/lib/common/features/DocumentSymbolFeature.js.map +1 -0
  21. package/lib/common/features/FormattingFeature.d.ts +32 -0
  22. package/lib/common/features/FormattingFeature.js +72 -0
  23. package/lib/common/features/FormattingFeature.js.map +1 -0
  24. package/lib/common/features/HoverFeature.d.ts +23 -0
  25. package/lib/common/features/HoverFeature.js +49 -0
  26. package/lib/common/features/HoverFeature.js.map +1 -0
  27. package/lib/common/features/ReferencesFeature.d.ts +23 -0
  28. package/lib/common/features/ReferencesFeature.js +48 -0
  29. package/lib/common/features/ReferencesFeature.js.map +1 -0
  30. package/lib/common/features/RenameFeature.d.ts +37 -0
  31. package/lib/common/features/RenameFeature.js +72 -0
  32. package/lib/common/features/RenameFeature.js.map +1 -0
  33. package/lib/common/features/index.d.ts +8 -0
  34. package/lib/common/features/index.js +21 -0
  35. package/lib/common/features/index.js.map +1 -0
  36. package/lib/common/utils/index.d.ts +2 -0
  37. package/lib/common/utils/index.js +19 -0
  38. package/lib/common/utils/index.js.map +1 -0
  39. package/lib/common/utils/is.d.ts +15 -0
  40. package/lib/common/utils/is.js +56 -0
  41. package/lib/common/utils/is.js.map +1 -0
  42. package/lib/common/utils/uuid.d.ts +17 -0
  43. package/lib/common/utils/uuid.js +87 -0
  44. package/lib/common/utils/uuid.js.map +1 -0
  45. package/lib/demo/custom-lsp/client.d.ts +1 -0
  46. package/lib/demo/custom-lsp/client.js +86 -0
  47. package/lib/demo/custom-lsp/client.js.map +1 -0
  48. package/lib/demo/custom-lsp/server.d.ts +1 -0
  49. package/lib/demo/custom-lsp/server.js +64 -0
  50. package/lib/demo/custom-lsp/server.js.map +1 -0
  51. package/lib/demo/go-demo/client.d.ts +14 -0
  52. package/lib/demo/go-demo/client.js +697 -0
  53. package/lib/demo/go-demo/client.js.map +1 -0
  54. package/lib/demo/typescript-demo/client.d.ts +14 -0
  55. package/lib/demo/typescript-demo/client.js +680 -0
  56. package/lib/demo/typescript-demo/client.js.map +1 -0
  57. package/lib/demo/typescript-demo/sample-project/src/index.d.ts +9 -0
  58. package/lib/demo/typescript-demo/sample-project/src/index.js +65 -0
  59. package/lib/demo/typescript-demo/sample-project/src/index.js.map +1 -0
  60. package/lib/demo/typescript-demo/sample-project/src/math.d.ts +38 -0
  61. package/lib/demo/typescript-demo/sample-project/src/math.js +63 -0
  62. package/lib/demo/typescript-demo/sample-project/src/math.js.map +1 -0
  63. package/lib/demo/typescript-demo/sample-project/src/models/person.d.ts +41 -0
  64. package/lib/demo/typescript-demo/sample-project/src/models/person.js +53 -0
  65. package/lib/demo/typescript-demo/sample-project/src/models/person.js.map +1 -0
  66. package/lib/demo/typescript-demo/sample-project/src/services/calculator.d.ts +39 -0
  67. package/lib/demo/typescript-demo/sample-project/src/services/calculator.js +69 -0
  68. package/lib/demo/typescript-demo/sample-project/src/services/calculator.js.map +1 -0
  69. package/lib/demo/typescript-demo/sample-project/src/services/user-service.d.ts +40 -0
  70. package/lib/demo/typescript-demo/sample-project/src/services/user-service.js +88 -0
  71. package/lib/demo/typescript-demo/sample-project/src/services/user-service.js.map +1 -0
  72. package/lib/index.d.ts +8 -0
  73. package/lib/index.js +32 -0
  74. package/lib/index.js.map +1 -0
  75. package/lib/interfaces/IHost.d.ts +19 -0
  76. package/lib/interfaces/IHost.js +3 -0
  77. package/lib/interfaces/IHost.js.map +1 -0
  78. package/lib/transports/ITransport.d.ts +8 -0
  79. package/lib/transports/ITransport.js +3 -0
  80. package/lib/transports/ITransport.js.map +1 -0
  81. package/lib/transports/StdioTransport.d.ts +13 -0
  82. package/lib/transports/StdioTransport.js +27 -0
  83. package/lib/transports/StdioTransport.js.map +1 -0
  84. package/package.json +48 -0
@@ -0,0 +1,512 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LanguageClient = exports.CloseAction = exports.ErrorAction = exports.State = exports.ClientState = void 0;
4
+ const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
5
+ const Feature_1 = require("./Feature");
6
+ const Is = require("./utils/is");
7
+ /**
8
+ * Client state enum
9
+ */
10
+ var ClientState;
11
+ (function (ClientState) {
12
+ ClientState["Initial"] = "initial";
13
+ ClientState["Starting"] = "starting";
14
+ ClientState["StartFailed"] = "startFailed";
15
+ ClientState["Running"] = "running";
16
+ ClientState["Stopping"] = "stopping";
17
+ ClientState["Stopped"] = "stopped";
18
+ })(ClientState || (exports.ClientState = ClientState = {}));
19
+ /**
20
+ * Public state for external consumers
21
+ */
22
+ var State;
23
+ (function (State) {
24
+ State[State["Stopped"] = 1] = "Stopped";
25
+ State[State["Starting"] = 3] = "Starting";
26
+ State[State["StartFailed"] = 4] = "StartFailed";
27
+ State[State["Running"] = 2] = "Running";
28
+ })(State || (exports.State = State = {}));
29
+ /**
30
+ * Error action enum
31
+ */
32
+ var ErrorAction;
33
+ (function (ErrorAction) {
34
+ ErrorAction[ErrorAction["Continue"] = 1] = "Continue";
35
+ ErrorAction[ErrorAction["Shutdown"] = 2] = "Shutdown";
36
+ })(ErrorAction || (exports.ErrorAction = ErrorAction = {}));
37
+ /**
38
+ * Close action enum
39
+ */
40
+ var CloseAction;
41
+ (function (CloseAction) {
42
+ CloseAction[CloseAction["DoNotRestart"] = 1] = "DoNotRestart";
43
+ CloseAction[CloseAction["Restart"] = 2] = "Restart";
44
+ })(CloseAction || (exports.CloseAction = CloseAction = {}));
45
+ /**
46
+ * Default error handler
47
+ */
48
+ class DefaultErrorHandler {
49
+ constructor(maxRestartCount = 4) {
50
+ this.maxRestartCount = maxRestartCount;
51
+ this.restarts = [];
52
+ }
53
+ error(_error, _message, count) {
54
+ if (count && count <= 3) {
55
+ return { action: ErrorAction.Continue };
56
+ }
57
+ return { action: ErrorAction.Shutdown };
58
+ }
59
+ closed() {
60
+ this.restarts.push(Date.now());
61
+ if (this.restarts.length <= this.maxRestartCount) {
62
+ return { action: CloseAction.Restart };
63
+ }
64
+ else {
65
+ const diff = this.restarts[this.restarts.length - 1] - this.restarts[0];
66
+ if (diff <= 3 * 60 * 1000) {
67
+ return { action: CloseAction.DoNotRestart };
68
+ }
69
+ else {
70
+ this.restarts.shift();
71
+ return { action: CloseAction.Restart };
72
+ }
73
+ }
74
+ }
75
+ }
76
+ class LanguageClient {
77
+ constructor(host, transport, clientCapabilities = {}, options = {}) {
78
+ var _a, _b;
79
+ this.host = host;
80
+ this.transport = transport;
81
+ this.clientCapabilities = clientCapabilities;
82
+ this.options = options;
83
+ this._features = [];
84
+ this._dynamicFeatures = new Map();
85
+ this._legacyFeatures = [];
86
+ this._state = ClientState.Initial;
87
+ this._stateChangeListeners = [];
88
+ this._ignoredRegistrations = new Set();
89
+ this._errorHandler = (_a = options.errorHandler) !== null && _a !== void 0 ? _a : new DefaultErrorHandler();
90
+ this._middleware = (_b = options.middleware) !== null && _b !== void 0 ? _b : {};
91
+ this._documentSelector = options.documentSelector;
92
+ }
93
+ /**
94
+ * Get current state
95
+ */
96
+ get state() {
97
+ return this.getPublicState();
98
+ }
99
+ get $state() {
100
+ return this._state;
101
+ }
102
+ set $state(value) {
103
+ const oldState = this.getPublicState();
104
+ this._state = value;
105
+ const newState = this.getPublicState();
106
+ if (newState !== oldState) {
107
+ this._stateChangeListeners.forEach(listener => {
108
+ listener({ oldState, newState });
109
+ });
110
+ }
111
+ }
112
+ getPublicState() {
113
+ switch (this.$state) {
114
+ case ClientState.Starting:
115
+ return State.Starting;
116
+ case ClientState.Running:
117
+ return State.Running;
118
+ case ClientState.StartFailed:
119
+ return State.StartFailed;
120
+ default:
121
+ return State.Stopped;
122
+ }
123
+ }
124
+ /**
125
+ * Add state change listener
126
+ */
127
+ onDidChangeState(listener) {
128
+ this._stateChangeListeners.push(listener);
129
+ return {
130
+ dispose: () => {
131
+ const index = this._stateChangeListeners.indexOf(listener);
132
+ if (index >= 0) {
133
+ this._stateChangeListeners.splice(index, 1);
134
+ }
135
+ }
136
+ };
137
+ }
138
+ /**
139
+ * Get initialize result
140
+ */
141
+ get initializeResult() {
142
+ return this._initializeResult;
143
+ }
144
+ /**
145
+ * Get server capabilities
146
+ */
147
+ get capabilities() {
148
+ return this._capabilities;
149
+ }
150
+ /**
151
+ * Check if client is running
152
+ */
153
+ isRunning() {
154
+ return this.$state === ClientState.Running;
155
+ }
156
+ /**
157
+ * Register a legacy feature
158
+ */
159
+ registerFeature(feature) {
160
+ this._legacyFeatures.push(feature);
161
+ }
162
+ /**
163
+ * Register a static or dynamic feature
164
+ */
165
+ registerFeatures(features) {
166
+ for (const feature of features) {
167
+ this.registerStaticOrDynamicFeature(feature);
168
+ }
169
+ }
170
+ /**
171
+ * Register a single static or dynamic feature
172
+ */
173
+ registerStaticOrDynamicFeature(feature) {
174
+ this._features.push(feature);
175
+ if (Feature_1.DynamicFeature.is(feature)) {
176
+ const registrationType = feature.registrationType;
177
+ this._dynamicFeatures.set(registrationType.method, feature);
178
+ }
179
+ }
180
+ /**
181
+ * Get a dynamic feature by method
182
+ */
183
+ getFeature(method) {
184
+ return this._dynamicFeatures.get(method);
185
+ }
186
+ /**
187
+ * Start the language client
188
+ */
189
+ async start() {
190
+ if (this.$state === ClientState.Stopping) {
191
+ throw new Error('Client is currently stopping. Can only restart a fully stopped client');
192
+ }
193
+ if (this._onStart !== undefined) {
194
+ return this._onStart;
195
+ }
196
+ this._onStart = this.doStart();
197
+ return this._onStart;
198
+ }
199
+ async doStart() {
200
+ this.$state = ClientState.Starting;
201
+ try {
202
+ const { reader, writer } = await this.transport.connect();
203
+ this.connection = (0, vscode_languageserver_protocol_1.createMessageConnection)(reader, writer);
204
+ this.registerBuiltinListeners();
205
+ this.connection.listen();
206
+ await this.initialize();
207
+ this.$state = ClientState.Running;
208
+ }
209
+ catch (e) {
210
+ this.$state = ClientState.StartFailed;
211
+ this.host.window.logMessage(vscode_languageserver_protocol_1.MessageType.Error, `Client start failed: ${e}`);
212
+ throw e;
213
+ }
214
+ }
215
+ registerBuiltinListeners() {
216
+ if (!this.connection)
217
+ return;
218
+ this.connection.onNotification(vscode_languageserver_protocol_1.LogMessageNotification.type, (params) => {
219
+ this.host.window.logMessage(params.type, params.message);
220
+ });
221
+ this.connection.onNotification(vscode_languageserver_protocol_1.ShowMessageNotification.type, (params) => {
222
+ this.host.window.showMessage(params.type, params.message);
223
+ });
224
+ this.connection.onRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, async (params) => {
225
+ if (this.host.window.showMessageRequest) {
226
+ return await this.host.window.showMessageRequest(params.type, params.message, params.actions);
227
+ }
228
+ this.host.window.showMessage(params.type, params.message);
229
+ return null;
230
+ });
231
+ // Handle dynamic registration
232
+ this.connection.onRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params => this.handleRegistrationRequest(params));
233
+ this.connection.onRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params => this.handleUnregistrationRequest(params));
234
+ // Handle diagnostics
235
+ this.connection.onNotification(vscode_languageserver_protocol_1.PublishDiagnosticsNotification.type, (params) => {
236
+ const handleDiagnostics = (uri, diagnostics) => {
237
+ if (this.host.window.publishDiagnostics) {
238
+ this.host.window.publishDiagnostics(uri, diagnostics);
239
+ }
240
+ };
241
+ if (this._middleware.handleDiagnostics) {
242
+ this._middleware.handleDiagnostics(params.uri, params.diagnostics, handleDiagnostics);
243
+ }
244
+ else {
245
+ handleDiagnostics(params.uri, params.diagnostics);
246
+ }
247
+ });
248
+ }
249
+ async initialize() {
250
+ if (!this.connection) {
251
+ throw new Error('Connection not initialized');
252
+ }
253
+ // Fill client capabilities from legacy features
254
+ for (const feature of this._legacyFeatures) {
255
+ feature.fillClientCapabilities(this.clientCapabilities);
256
+ }
257
+ // Fill client capabilities from new features
258
+ for (const feature of this._features) {
259
+ feature.fillClientCapabilities(this.clientCapabilities);
260
+ }
261
+ const initOption = this.options.initializationOptions;
262
+ const params = {
263
+ processId: process.pid,
264
+ rootUri: this.host.workspace.rootUri,
265
+ capabilities: this.clientCapabilities,
266
+ workspaceFolders: null,
267
+ initializationOptions: Is.func(initOption) ? initOption() : initOption
268
+ };
269
+ // Fill initialize params from legacy features
270
+ for (const feature of this._legacyFeatures) {
271
+ if (feature.fillInitializeParams) {
272
+ feature.fillInitializeParams(params);
273
+ }
274
+ }
275
+ // Fill initialize params from new features
276
+ for (const feature of this._features) {
277
+ if (Is.func(feature.fillInitializeParams)) {
278
+ feature.fillInitializeParams(params);
279
+ }
280
+ }
281
+ try {
282
+ const result = await this.connection.sendRequest(vscode_languageserver_protocol_1.InitializeRequest.type, params);
283
+ this._initializeResult = result;
284
+ // Resolve text document sync capabilities
285
+ let textDocumentSyncOptions = undefined;
286
+ if (Is.number(result.capabilities.textDocumentSync)) {
287
+ if (result.capabilities.textDocumentSync === vscode_languageserver_protocol_1.TextDocumentSyncKind.None) {
288
+ textDocumentSyncOptions = {
289
+ openClose: false,
290
+ change: vscode_languageserver_protocol_1.TextDocumentSyncKind.None,
291
+ save: undefined
292
+ };
293
+ }
294
+ else {
295
+ textDocumentSyncOptions = {
296
+ openClose: true,
297
+ change: result.capabilities.textDocumentSync,
298
+ save: { includeText: false }
299
+ };
300
+ }
301
+ }
302
+ else if (result.capabilities.textDocumentSync !== undefined && result.capabilities.textDocumentSync !== null) {
303
+ textDocumentSyncOptions = result.capabilities.textDocumentSync;
304
+ }
305
+ this._capabilities = Object.assign({}, result.capabilities, {
306
+ resolvedTextDocumentSync: textDocumentSyncOptions
307
+ });
308
+ // PreInitialize features
309
+ for (const feature of this._features) {
310
+ if (Is.func(feature.preInitialize)) {
311
+ feature.preInitialize(result.capabilities, this._documentSelector);
312
+ }
313
+ }
314
+ // Initialize legacy features
315
+ for (const feature of this._legacyFeatures) {
316
+ feature.initialize(result.capabilities);
317
+ }
318
+ // Initialize new features
319
+ for (const feature of this._features) {
320
+ feature.initialize(result.capabilities, this._documentSelector);
321
+ }
322
+ await this.connection.sendNotification(vscode_languageserver_protocol_1.InitializedNotification.type, {});
323
+ this.host.window.logMessage(vscode_languageserver_protocol_1.MessageType.Info, 'LSP Client initialized');
324
+ return result;
325
+ }
326
+ catch (e) {
327
+ this.host.window.logMessage(vscode_languageserver_protocol_1.MessageType.Error, `Initialization failed: ${e}`);
328
+ throw e;
329
+ }
330
+ }
331
+ async handleRegistrationRequest(params) {
332
+ const doRegister = async (params) => {
333
+ var _a, _b;
334
+ if (!this.isRunning()) {
335
+ for (const registration of params.registrations) {
336
+ this._ignoredRegistrations.add(registration.id);
337
+ }
338
+ return;
339
+ }
340
+ for (const registration of params.registrations) {
341
+ const feature = this._dynamicFeatures.get(registration.method);
342
+ if (feature === undefined) {
343
+ throw new Error(`No feature implementation for ${registration.method} found. Registration failed.`);
344
+ }
345
+ const options = (_a = registration.registerOptions) !== null && _a !== void 0 ? _a : {};
346
+ options.documentSelector = (_b = options.documentSelector) !== null && _b !== void 0 ? _b : this._documentSelector;
347
+ const data = {
348
+ id: registration.id,
349
+ registerOptions: options
350
+ };
351
+ feature.register(data);
352
+ }
353
+ };
354
+ if (this._middleware.handleRegisterCapability) {
355
+ return this._middleware.handleRegisterCapability(params, doRegister);
356
+ }
357
+ return doRegister(params);
358
+ }
359
+ async handleUnregistrationRequest(params) {
360
+ const doUnregister = async (params) => {
361
+ for (const unregistration of params.unregisterations) {
362
+ if (this._ignoredRegistrations.has(unregistration.id)) {
363
+ continue;
364
+ }
365
+ const feature = this._dynamicFeatures.get(unregistration.method);
366
+ if (!feature) {
367
+ throw new Error(`No feature implementation for ${unregistration.method} found. Unregistration failed.`);
368
+ }
369
+ feature.unregister(unregistration.id);
370
+ }
371
+ };
372
+ if (this._middleware.handleUnregisterCapability) {
373
+ return this._middleware.handleUnregisterCapability(params, doUnregister);
374
+ }
375
+ return doUnregister(params);
376
+ }
377
+ /**
378
+ * Stop the language client
379
+ */
380
+ async stop(timeout = 2000) {
381
+ if (this.$state === ClientState.Stopped || this.$state === ClientState.Initial) {
382
+ return;
383
+ }
384
+ if (this.$state === ClientState.Stopping) {
385
+ if (this._onStop !== undefined) {
386
+ return this._onStop;
387
+ }
388
+ throw new Error('Client is stopping but no stop promise available.');
389
+ }
390
+ if (this.$state !== ClientState.Running) {
391
+ throw new Error(`Client is not running and can't be stopped. Current state: ${this.$state}`);
392
+ }
393
+ this.$state = ClientState.Stopping;
394
+ this._onStop = this.doStop(timeout);
395
+ return this._onStop;
396
+ }
397
+ async doStop(timeout) {
398
+ // Clear features in reverse order
399
+ for (const feature of [...this._legacyFeatures].reverse()) {
400
+ feature.clear();
401
+ }
402
+ for (const feature of [...this._features].reverse()) {
403
+ feature.clear();
404
+ }
405
+ if (this.connection) {
406
+ try {
407
+ const tp = new Promise(resolve => setTimeout(resolve, timeout));
408
+ const shutdown = (async () => {
409
+ await this.connection.sendRequest(vscode_languageserver_protocol_1.ShutdownRequest.type);
410
+ await this.connection.sendNotification(vscode_languageserver_protocol_1.ExitNotification.type);
411
+ })();
412
+ await Promise.race([tp, shutdown]);
413
+ }
414
+ catch (e) {
415
+ this.host.window.logMessage(vscode_languageserver_protocol_1.MessageType.Error, `Error during shutdown: ${e}`);
416
+ }
417
+ finally {
418
+ this.connection.dispose();
419
+ this.connection = undefined;
420
+ }
421
+ }
422
+ this.transport.dispose();
423
+ this.$state = ClientState.Stopped;
424
+ this._onStart = undefined;
425
+ this._onStop = undefined;
426
+ this._ignoredRegistrations.clear();
427
+ }
428
+ async sendRequest(type, ...params) {
429
+ if (!this.isRunning() || !this.connection) {
430
+ throw new vscode_languageserver_protocol_1.ResponseError(vscode_languageserver_protocol_1.ErrorCodes.ConnectionInactive, 'Client is not running');
431
+ }
432
+ return this.connection.sendRequest(type, ...params);
433
+ }
434
+ onRequest(type, handler) {
435
+ if (!this.connection) {
436
+ throw new Error('Client not started');
437
+ }
438
+ return this.connection.onRequest(type, handler);
439
+ }
440
+ async sendNotification(type, params) {
441
+ if (!this.isRunning() || !this.connection) {
442
+ throw new vscode_languageserver_protocol_1.ResponseError(vscode_languageserver_protocol_1.ErrorCodes.ConnectionInactive, 'Client is not running');
443
+ }
444
+ return this.connection.sendNotification(type, params);
445
+ }
446
+ onNotification(type, handler) {
447
+ if (!this.connection) {
448
+ throw new Error('Client not started');
449
+ }
450
+ return this.connection.onNotification(type, handler);
451
+ }
452
+ // === Text Document Notifications (convenience methods) ===
453
+ didOpen(params) {
454
+ const send = (p) => {
455
+ this.sendNotification(vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type, p);
456
+ };
457
+ if (this._middleware.didOpen) {
458
+ this._middleware.didOpen(params, send);
459
+ }
460
+ else {
461
+ send(params);
462
+ }
463
+ }
464
+ didChange(params) {
465
+ const send = (p) => {
466
+ this.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, p);
467
+ };
468
+ if (this._middleware.didChange) {
469
+ this._middleware.didChange(params, send);
470
+ }
471
+ else {
472
+ send(params);
473
+ }
474
+ }
475
+ didClose(params) {
476
+ const send = (p) => {
477
+ this.sendNotification(vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type, p);
478
+ };
479
+ if (this._middleware.didClose) {
480
+ this._middleware.didClose(params, send);
481
+ }
482
+ else {
483
+ send(params);
484
+ }
485
+ }
486
+ didSave(params) {
487
+ const send = (p) => {
488
+ this.sendNotification(vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type, p);
489
+ };
490
+ if (this._middleware.didSave) {
491
+ this._middleware.didSave(params, send);
492
+ }
493
+ else {
494
+ send(params);
495
+ }
496
+ }
497
+ // === Accessors ===
498
+ getConnection() {
499
+ return this.connection;
500
+ }
501
+ getHost() {
502
+ return this.host;
503
+ }
504
+ get middleware() {
505
+ return this._middleware;
506
+ }
507
+ get documentSelector() {
508
+ return this._documentSelector;
509
+ }
510
+ }
511
+ exports.LanguageClient = LanguageClient;
512
+ //# sourceMappingURL=LanguageClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageClient.js","sourceRoot":"","sources":["../../src/common/LanguageClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { ClientCapabilities, ServerCapabilities, CompletionParams, CompletionList, CompletionItem, DocumentSelector } from 'vscode-languageserver-protocol';
2
+ import { Feature, StaticFeature, FeatureState } from '../Feature';
3
+ import { LanguageClient } from '../LanguageClient';
4
+ /**
5
+ * Completion feature - implements LSP completion capability
6
+ */
7
+ export declare class CompletionFeature implements Feature, StaticFeature {
8
+ private client;
9
+ private _serverSupportsCompletion;
10
+ constructor(client: LanguageClient);
11
+ fillClientCapabilities(capabilities: ClientCapabilities): void;
12
+ initialize(capabilities: ServerCapabilities, documentSelector?: DocumentSelector): void;
13
+ getState(): FeatureState;
14
+ clear(): void;
15
+ /**
16
+ * Check if completion is supported
17
+ */
18
+ get isSupported(): boolean;
19
+ /**
20
+ * Provide completion items
21
+ */
22
+ provideCompletion(params: CompletionParams): Promise<CompletionItem[] | CompletionList | null>;
23
+ }
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CompletionFeature = void 0;
4
+ const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
5
+ const Feature_1 = require("../Feature");
6
+ /**
7
+ * Supported completion item kinds
8
+ */
9
+ const SupportedCompletionItemKinds = [
10
+ vscode_languageserver_protocol_1.CompletionItemKind.Text,
11
+ vscode_languageserver_protocol_1.CompletionItemKind.Method,
12
+ vscode_languageserver_protocol_1.CompletionItemKind.Function,
13
+ vscode_languageserver_protocol_1.CompletionItemKind.Constructor,
14
+ vscode_languageserver_protocol_1.CompletionItemKind.Field,
15
+ vscode_languageserver_protocol_1.CompletionItemKind.Variable,
16
+ vscode_languageserver_protocol_1.CompletionItemKind.Class,
17
+ vscode_languageserver_protocol_1.CompletionItemKind.Interface,
18
+ vscode_languageserver_protocol_1.CompletionItemKind.Module,
19
+ vscode_languageserver_protocol_1.CompletionItemKind.Property,
20
+ vscode_languageserver_protocol_1.CompletionItemKind.Unit,
21
+ vscode_languageserver_protocol_1.CompletionItemKind.Value,
22
+ vscode_languageserver_protocol_1.CompletionItemKind.Enum,
23
+ vscode_languageserver_protocol_1.CompletionItemKind.Keyword,
24
+ vscode_languageserver_protocol_1.CompletionItemKind.Snippet,
25
+ vscode_languageserver_protocol_1.CompletionItemKind.Color,
26
+ vscode_languageserver_protocol_1.CompletionItemKind.File,
27
+ vscode_languageserver_protocol_1.CompletionItemKind.Reference,
28
+ vscode_languageserver_protocol_1.CompletionItemKind.Folder,
29
+ vscode_languageserver_protocol_1.CompletionItemKind.EnumMember,
30
+ vscode_languageserver_protocol_1.CompletionItemKind.Constant,
31
+ vscode_languageserver_protocol_1.CompletionItemKind.Struct,
32
+ vscode_languageserver_protocol_1.CompletionItemKind.Event,
33
+ vscode_languageserver_protocol_1.CompletionItemKind.Operator,
34
+ vscode_languageserver_protocol_1.CompletionItemKind.TypeParameter
35
+ ];
36
+ /**
37
+ * Completion feature - implements LSP completion capability
38
+ */
39
+ class CompletionFeature {
40
+ constructor(client) {
41
+ this.client = client;
42
+ this._serverSupportsCompletion = false;
43
+ }
44
+ fillClientCapabilities(capabilities) {
45
+ const completion = (0, Feature_1.ensure)((0, Feature_1.ensure)(capabilities, 'textDocument'), 'completion');
46
+ completion.dynamicRegistration = true;
47
+ completion.contextSupport = true;
48
+ completion.completionItem = {
49
+ snippetSupport: true,
50
+ commitCharactersSupport: true,
51
+ documentationFormat: [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText],
52
+ deprecatedSupport: true,
53
+ preselectSupport: true,
54
+ tagSupport: { valueSet: [vscode_languageserver_protocol_1.CompletionItemTag.Deprecated] },
55
+ insertReplaceSupport: true,
56
+ resolveSupport: {
57
+ properties: ['documentation', 'detail', 'additionalTextEdits']
58
+ },
59
+ insertTextModeSupport: { valueSet: [vscode_languageserver_protocol_1.InsertTextMode.asIs, vscode_languageserver_protocol_1.InsertTextMode.adjustIndentation] },
60
+ labelDetailsSupport: true
61
+ };
62
+ completion.insertTextMode = vscode_languageserver_protocol_1.InsertTextMode.adjustIndentation;
63
+ completion.completionItemKind = { valueSet: SupportedCompletionItemKinds };
64
+ completion.completionList = {
65
+ itemDefaults: [
66
+ 'commitCharacters', 'editRange', 'insertTextFormat', 'insertTextMode', 'data'
67
+ ]
68
+ };
69
+ }
70
+ initialize(capabilities, documentSelector) {
71
+ // Check if server supports completion
72
+ if (capabilities.completionProvider) {
73
+ this._serverSupportsCompletion = true;
74
+ console.log('[CompletionFeature] Server supports completion');
75
+ }
76
+ }
77
+ getState() {
78
+ return { kind: 'static' };
79
+ }
80
+ clear() {
81
+ this._serverSupportsCompletion = false;
82
+ }
83
+ /**
84
+ * Check if completion is supported
85
+ */
86
+ get isSupported() {
87
+ return this._serverSupportsCompletion;
88
+ }
89
+ /**
90
+ * Provide completion items
91
+ */
92
+ async provideCompletion(params) {
93
+ const connection = this.client.getConnection();
94
+ if (!connection || !this._serverSupportsCompletion) {
95
+ return null;
96
+ }
97
+ return connection.sendRequest(vscode_languageserver_protocol_1.CompletionRequest.type, params);
98
+ }
99
+ }
100
+ exports.CompletionFeature = CompletionFeature;
101
+ //# sourceMappingURL=CompletionFeature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompletionFeature.js","sourceRoot":"","sources":["../../../src/common/features/CompletionFeature.ts"],"names":[],"mappings":"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"}