@nanocollective/nanocoder 1.16.5 → 1.17.1

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 (162) hide show
  1. package/README.md +53 -19
  2. package/assets/nanocoder-vscode.vsix +0 -0
  3. package/dist/app.d.ts +6 -1
  4. package/dist/app.d.ts.map +1 -1
  5. package/dist/app.js +54 -18
  6. package/dist/app.js.map +1 -1
  7. package/dist/cli.js +13 -1
  8. package/dist/cli.js.map +1 -1
  9. package/dist/commands/mcp.d.ts +6 -0
  10. package/dist/commands/mcp.d.ts.map +1 -1
  11. package/dist/commands/mcp.js +25 -3
  12. package/dist/commands/mcp.js.map +1 -1
  13. package/dist/components/vscode-extension-prompt.d.ts +12 -0
  14. package/dist/components/vscode-extension-prompt.d.ts.map +1 -0
  15. package/dist/components/vscode-extension-prompt.js +115 -0
  16. package/dist/components/vscode-extension-prompt.js.map +1 -0
  17. package/dist/hooks/useAppInitialization.d.ts +2 -0
  18. package/dist/hooks/useAppInitialization.d.ts.map +1 -1
  19. package/dist/hooks/useAppInitialization.js +55 -1
  20. package/dist/hooks/useAppInitialization.js.map +1 -1
  21. package/dist/hooks/useModeHandlers.d.ts +2 -1
  22. package/dist/hooks/useModeHandlers.d.ts.map +1 -1
  23. package/dist/hooks/useModeHandlers.js +13 -1
  24. package/dist/hooks/useModeHandlers.js.map +1 -1
  25. package/dist/hooks/useToolHandler.d.ts.map +1 -1
  26. package/dist/hooks/useToolHandler.js +11 -0
  27. package/dist/hooks/useToolHandler.js.map +1 -1
  28. package/dist/hooks/useVSCodeServer.d.ts +45 -0
  29. package/dist/hooks/useVSCodeServer.d.ts.map +1 -0
  30. package/dist/hooks/useVSCodeServer.js +144 -0
  31. package/dist/hooks/useVSCodeServer.js.map +1 -0
  32. package/dist/lsp/index.d.ts +12 -0
  33. package/dist/lsp/index.d.ts.map +1 -0
  34. package/dist/lsp/index.js +11 -0
  35. package/dist/lsp/index.js.map +1 -0
  36. package/dist/lsp/lsp-client.d.ts +78 -0
  37. package/dist/lsp/lsp-client.d.ts.map +1 -0
  38. package/dist/lsp/lsp-client.js +378 -0
  39. package/dist/lsp/lsp-client.js.map +1 -0
  40. package/dist/lsp/lsp-client.spec.d.ts +2 -0
  41. package/dist/lsp/lsp-client.spec.d.ts.map +1 -0
  42. package/dist/lsp/lsp-client.spec.js +395 -0
  43. package/dist/lsp/lsp-client.spec.js.map +1 -0
  44. package/dist/lsp/lsp-manager.d.ts +124 -0
  45. package/dist/lsp/lsp-manager.d.ts.map +1 -0
  46. package/dist/lsp/lsp-manager.js +313 -0
  47. package/dist/lsp/lsp-manager.js.map +1 -0
  48. package/dist/lsp/lsp-manager.spec.d.ts +2 -0
  49. package/dist/lsp/lsp-manager.spec.d.ts.map +1 -0
  50. package/dist/lsp/lsp-manager.spec.js +388 -0
  51. package/dist/lsp/lsp-manager.spec.js.map +1 -0
  52. package/dist/lsp/protocol.d.ts +313 -0
  53. package/dist/lsp/protocol.d.ts.map +1 -0
  54. package/dist/lsp/protocol.js +70 -0
  55. package/dist/lsp/protocol.js.map +1 -0
  56. package/dist/lsp/protocol.spec.d.ts +2 -0
  57. package/dist/lsp/protocol.spec.d.ts.map +1 -0
  58. package/dist/lsp/protocol.spec.js +406 -0
  59. package/dist/lsp/protocol.spec.js.map +1 -0
  60. package/dist/lsp/server-discovery.d.ts +35 -0
  61. package/dist/lsp/server-discovery.d.ts.map +1 -0
  62. package/dist/lsp/server-discovery.js +291 -0
  63. package/dist/lsp/server-discovery.js.map +1 -0
  64. package/dist/lsp/server-discovery.spec.d.ts +2 -0
  65. package/dist/lsp/server-discovery.spec.d.ts.map +1 -0
  66. package/dist/lsp/server-discovery.spec.js +375 -0
  67. package/dist/lsp/server-discovery.spec.js.map +1 -0
  68. package/dist/mcp/mcp-client.d.ts +18 -0
  69. package/dist/mcp/mcp-client.d.ts.map +1 -1
  70. package/dist/mcp/mcp-client.js +59 -23
  71. package/dist/mcp/mcp-client.js.map +1 -1
  72. package/dist/mcp/mcp-client.spec.d.ts +2 -0
  73. package/dist/mcp/mcp-client.spec.d.ts.map +1 -0
  74. package/dist/mcp/mcp-client.spec.js +64 -0
  75. package/dist/mcp/mcp-client.spec.js.map +1 -0
  76. package/dist/mcp/transport-factory.d.ts +39 -0
  77. package/dist/mcp/transport-factory.d.ts.map +1 -0
  78. package/dist/mcp/transport-factory.js +176 -0
  79. package/dist/mcp/transport-factory.js.map +1 -0
  80. package/dist/mcp/transport-factory.spec.d.ts +2 -0
  81. package/dist/mcp/transport-factory.spec.d.ts.map +1 -0
  82. package/dist/mcp/transport-factory.spec.js +303 -0
  83. package/dist/mcp/transport-factory.spec.js.map +1 -0
  84. package/dist/tools/create-file.d.ts.map +1 -1
  85. package/dist/tools/create-file.js +37 -3
  86. package/dist/tools/create-file.js.map +1 -1
  87. package/dist/tools/delete-lines.d.ts.map +1 -1
  88. package/dist/tools/delete-lines.js +41 -1
  89. package/dist/tools/delete-lines.js.map +1 -1
  90. package/dist/tools/index.d.ts.map +1 -1
  91. package/dist/tools/index.js +2 -0
  92. package/dist/tools/index.js.map +1 -1
  93. package/dist/tools/insert-lines.d.ts.map +1 -1
  94. package/dist/tools/insert-lines.js +40 -1
  95. package/dist/tools/insert-lines.js.map +1 -1
  96. package/dist/tools/lsp-get-diagnostics.d.ts +3 -0
  97. package/dist/tools/lsp-get-diagnostics.d.ts.map +1 -0
  98. package/dist/tools/lsp-get-diagnostics.js +182 -0
  99. package/dist/tools/lsp-get-diagnostics.js.map +1 -0
  100. package/dist/tools/replace-lines.d.ts.map +1 -1
  101. package/dist/tools/replace-lines.js +44 -1
  102. package/dist/tools/replace-lines.js.map +1 -1
  103. package/dist/tools/tool-manager.d.ts +17 -0
  104. package/dist/tools/tool-manager.d.ts.map +1 -1
  105. package/dist/tools/tool-manager.js +12 -0
  106. package/dist/tools/tool-manager.js.map +1 -1
  107. package/dist/types/config.d.ts +27 -0
  108. package/dist/types/config.d.ts.map +1 -1
  109. package/dist/types/mcp.d.ts +23 -1
  110. package/dist/types/mcp.d.ts.map +1 -1
  111. package/dist/vscode/extension-installer.d.ts +24 -0
  112. package/dist/vscode/extension-installer.d.ts.map +1 -0
  113. package/dist/vscode/extension-installer.js +110 -0
  114. package/dist/vscode/extension-installer.js.map +1 -0
  115. package/dist/vscode/extension-installer.spec.d.ts +2 -0
  116. package/dist/vscode/extension-installer.spec.d.ts.map +1 -0
  117. package/dist/vscode/extension-installer.spec.js +132 -0
  118. package/dist/vscode/extension-installer.spec.js.map +1 -0
  119. package/dist/vscode/index.d.ts +14 -0
  120. package/dist/vscode/index.d.ts.map +1 -0
  121. package/dist/vscode/index.js +14 -0
  122. package/dist/vscode/index.js.map +1 -0
  123. package/dist/vscode/protocol.d.ts +101 -0
  124. package/dist/vscode/protocol.d.ts.map +1 -0
  125. package/dist/vscode/protocol.js +7 -0
  126. package/dist/vscode/protocol.js.map +1 -0
  127. package/dist/vscode/protocol.spec.d.ts +2 -0
  128. package/dist/vscode/protocol.spec.d.ts.map +1 -0
  129. package/dist/vscode/protocol.spec.js +354 -0
  130. package/dist/vscode/protocol.spec.js.map +1 -0
  131. package/dist/vscode/vscode-server.d.ts +118 -0
  132. package/dist/vscode/vscode-server.d.ts.map +1 -0
  133. package/dist/vscode/vscode-server.js +303 -0
  134. package/dist/vscode/vscode-server.js.map +1 -0
  135. package/dist/vscode/vscode-server.spec.d.ts +2 -0
  136. package/dist/vscode/vscode-server.spec.d.ts.map +1 -0
  137. package/dist/vscode/vscode-server.spec.js +487 -0
  138. package/dist/vscode/vscode-server.spec.js.map +1 -0
  139. package/dist/wizard/steps/mcp-step.d.ts.map +1 -1
  140. package/dist/wizard/steps/mcp-step.js +139 -72
  141. package/dist/wizard/steps/mcp-step.js.map +1 -1
  142. package/dist/wizard/steps/summary-step.d.ts.map +1 -1
  143. package/dist/wizard/steps/summary-step.js +58 -2
  144. package/dist/wizard/steps/summary-step.js.map +1 -1
  145. package/dist/wizard/templates/mcp-templates.d.ts +20 -2
  146. package/dist/wizard/templates/mcp-templates.d.ts.map +1 -1
  147. package/dist/wizard/templates/mcp-templates.js +351 -7
  148. package/dist/wizard/templates/mcp-templates.js.map +1 -1
  149. package/dist/wizard/templates/mcp-templates.spec.js +257 -0
  150. package/dist/wizard/templates/mcp-templates.spec.js.map +1 -1
  151. package/dist/wizard/validation-array.spec.d.ts +2 -0
  152. package/dist/wizard/validation-array.spec.d.ts.map +1 -0
  153. package/dist/wizard/validation-array.spec.js +221 -0
  154. package/dist/wizard/validation-array.spec.js.map +1 -0
  155. package/dist/wizard/validation.d.ts +26 -1
  156. package/dist/wizard/validation.d.ts.map +1 -1
  157. package/dist/wizard/validation.js +15 -2
  158. package/dist/wizard/validation.js.map +1 -1
  159. package/dist/wizard/validation.spec.js +13 -5
  160. package/dist/wizard/validation.spec.js.map +1 -1
  161. package/package.json +7 -3
  162. package/source/app/prompts/main-prompt.md +6 -0
@@ -0,0 +1,388 @@
1
+ import test from 'ava';
2
+ import { EventEmitter } from 'events';
3
+ import { LSPManager, getLSPManager, resetLSPManager, } from './lsp-manager.js';
4
+ console.log(`\nlsp-manager.spec.ts`);
5
+ // Reset the singleton before each test to ensure isolation
6
+ test.beforeEach(async () => {
7
+ await resetLSPManager();
8
+ });
9
+ // Clean up after all tests
10
+ test.afterEach(async () => {
11
+ await resetLSPManager();
12
+ });
13
+ // Constructor tests
14
+ test('LSPManager - creates with default config', t => {
15
+ const manager = new LSPManager();
16
+ t.truthy(manager);
17
+ t.true(manager instanceof EventEmitter);
18
+ });
19
+ test('LSPManager - creates with custom rootUri', t => {
20
+ const manager = new LSPManager({
21
+ rootUri: 'file:///custom/path',
22
+ });
23
+ t.truthy(manager);
24
+ });
25
+ test('LSPManager - creates with servers config', t => {
26
+ const manager = new LSPManager({
27
+ servers: [
28
+ {
29
+ name: 'test-server',
30
+ command: 'test',
31
+ languages: ['ts'],
32
+ },
33
+ ],
34
+ });
35
+ t.truthy(manager);
36
+ });
37
+ // isInitialized tests
38
+ test('LSPManager - isInitialized returns false before initialization', t => {
39
+ const manager = new LSPManager();
40
+ t.false(manager.isInitialized());
41
+ });
42
+ // getConnectedServers tests
43
+ test('LSPManager - getConnectedServers returns empty array initially', t => {
44
+ const manager = new LSPManager();
45
+ t.deepEqual(manager.getConnectedServers(), []);
46
+ });
47
+ // getSupportedLanguages tests
48
+ test('LSPManager - getSupportedLanguages returns empty array initially', t => {
49
+ const manager = new LSPManager();
50
+ t.deepEqual(manager.getSupportedLanguages(), []);
51
+ });
52
+ // hasLanguageSupport tests
53
+ test('LSPManager - hasLanguageSupport returns false when no servers', t => {
54
+ const manager = new LSPManager();
55
+ t.false(manager.hasLanguageSupport('test.ts'));
56
+ t.false(manager.hasLanguageSupport('test.py'));
57
+ t.false(manager.hasLanguageSupport('test.go'));
58
+ });
59
+ // getStatus tests
60
+ test('LSPManager - getStatus returns correct initial state', t => {
61
+ const manager = new LSPManager();
62
+ const status = manager.getStatus();
63
+ t.false(status.initialized);
64
+ t.deepEqual(status.servers, []);
65
+ });
66
+ // getAllDiagnostics tests
67
+ test('LSPManager - getAllDiagnostics returns empty array initially', t => {
68
+ const manager = new LSPManager();
69
+ t.deepEqual(manager.getAllDiagnostics(), []);
70
+ });
71
+ // getDiagnostics tests
72
+ test('LSPManager - getDiagnostics returns empty array for unknown file', async (t) => {
73
+ const manager = new LSPManager();
74
+ const result = await manager.getDiagnostics('/test/file.ts');
75
+ t.deepEqual(result, []);
76
+ });
77
+ // getCompletions tests
78
+ test('LSPManager - getCompletions returns empty array when no client', async (t) => {
79
+ const manager = new LSPManager();
80
+ const result = await manager.getCompletions('/test/file.ts', 0, 0);
81
+ t.deepEqual(result, []);
82
+ });
83
+ // getCodeActions tests
84
+ test('LSPManager - getCodeActions returns empty array when no client', async (t) => {
85
+ const manager = new LSPManager();
86
+ const result = await manager.getCodeActions('/test/file.ts', 0, 0, 1, 10);
87
+ t.deepEqual(result, []);
88
+ });
89
+ test('LSPManager - getCodeActions accepts optional diagnostics', async (t) => {
90
+ const manager = new LSPManager();
91
+ const diagnostics = [
92
+ {
93
+ range: {
94
+ start: { line: 0, character: 0 },
95
+ end: { line: 0, character: 5 },
96
+ },
97
+ message: 'Test error',
98
+ },
99
+ ];
100
+ const result = await manager.getCodeActions('/test/file.ts', 0, 0, 1, 10, diagnostics);
101
+ t.deepEqual(result, []);
102
+ });
103
+ // formatDocument tests
104
+ test('LSPManager - formatDocument returns empty array when no client', async (t) => {
105
+ const manager = new LSPManager();
106
+ const result = await manager.formatDocument('/test/file.ts');
107
+ t.deepEqual(result, []);
108
+ });
109
+ test('LSPManager - formatDocument accepts options', async (t) => {
110
+ const manager = new LSPManager();
111
+ const result = await manager.formatDocument('/test/file.ts', {
112
+ tabSize: 4,
113
+ insertSpaces: false,
114
+ });
115
+ t.deepEqual(result, []);
116
+ });
117
+ // openDocument tests
118
+ test('LSPManager - openDocument returns false when no client available', async (t) => {
119
+ const manager = new LSPManager();
120
+ const result = await manager.openDocument('/test/file.ts');
121
+ t.false(result);
122
+ });
123
+ test('LSPManager - openDocument returns false for unsupported extension', async (t) => {
124
+ const manager = new LSPManager();
125
+ const result = await manager.openDocument('/test/file.xyz');
126
+ t.false(result);
127
+ });
128
+ // updateDocument tests
129
+ test('LSPManager - updateDocument returns false when no client available', t => {
130
+ const manager = new LSPManager();
131
+ const result = manager.updateDocument('/test/file.ts', 'new content');
132
+ t.false(result);
133
+ });
134
+ // closeDocument tests
135
+ test('LSPManager - closeDocument returns false when no client available', t => {
136
+ const manager = new LSPManager();
137
+ const result = manager.closeDocument('/test/file.ts');
138
+ t.false(result);
139
+ });
140
+ // shutdown tests
141
+ test('LSPManager - shutdown does not throw when not initialized', async (t) => {
142
+ const manager = new LSPManager();
143
+ await t.notThrowsAsync(async () => {
144
+ await manager.shutdown();
145
+ });
146
+ });
147
+ test('LSPManager - shutdown clears state', async (t) => {
148
+ const manager = new LSPManager();
149
+ await manager.shutdown();
150
+ t.false(manager.isInitialized());
151
+ t.deepEqual(manager.getConnectedServers(), []);
152
+ t.deepEqual(manager.getSupportedLanguages(), []);
153
+ });
154
+ // Event emitter tests
155
+ test('LSPManager - is an EventEmitter', t => {
156
+ const manager = new LSPManager();
157
+ t.true(manager instanceof EventEmitter);
158
+ });
159
+ test('LSPManager - can add diagnostics listeners', t => {
160
+ const manager = new LSPManager();
161
+ let called = false;
162
+ manager.on('diagnostics', () => {
163
+ called = true;
164
+ });
165
+ manager.emit('diagnostics', { uri: 'test', diagnostics: [] });
166
+ t.true(called);
167
+ });
168
+ test('LSPManager - can remove listeners', t => {
169
+ const manager = new LSPManager();
170
+ let count = 0;
171
+ const listener = () => count++;
172
+ manager.on('diagnostics', listener);
173
+ manager.emit('diagnostics', { uri: 'test', diagnostics: [] });
174
+ t.is(count, 1);
175
+ manager.off('diagnostics', listener);
176
+ manager.emit('diagnostics', { uri: 'test', diagnostics: [] });
177
+ t.is(count, 1);
178
+ });
179
+ // Singleton tests
180
+ test('getLSPManager - returns an LSPManager instance', t => {
181
+ const manager = getLSPManager();
182
+ t.truthy(manager);
183
+ t.true(manager instanceof LSPManager);
184
+ });
185
+ test('getLSPManager - returns same instance on multiple calls', t => {
186
+ const manager1 = getLSPManager();
187
+ const manager2 = getLSPManager();
188
+ t.is(manager1, manager2);
189
+ });
190
+ test('getLSPManager - accepts config on first call', t => {
191
+ const manager = getLSPManager({ rootUri: 'file:///test' });
192
+ t.truthy(manager);
193
+ });
194
+ // resetLSPManager tests
195
+ test('resetLSPManager - creates fresh instance after reset', async (t) => {
196
+ const manager1 = getLSPManager();
197
+ await resetLSPManager();
198
+ const manager2 = getLSPManager();
199
+ t.not(manager1, manager2);
200
+ });
201
+ test('resetLSPManager - does not throw when no instance exists', async (t) => {
202
+ await resetLSPManager();
203
+ await t.notThrowsAsync(async () => {
204
+ await resetLSPManager();
205
+ });
206
+ });
207
+ // initialize tests
208
+ test('LSPManager - initialize returns array of results', async (t) => {
209
+ const manager = new LSPManager();
210
+ const results = await manager.initialize({
211
+ autoDiscover: false,
212
+ servers: [],
213
+ });
214
+ t.true(Array.isArray(results));
215
+ });
216
+ test('LSPManager - initialize sets initialized flag', async (t) => {
217
+ const manager = new LSPManager();
218
+ await manager.initialize({
219
+ autoDiscover: false,
220
+ servers: [],
221
+ });
222
+ t.true(manager.isInitialized());
223
+ });
224
+ test('LSPManager - initialize accepts onProgress callback', async (t) => {
225
+ const manager = new LSPManager();
226
+ const progressResults = [];
227
+ await manager.initialize({
228
+ autoDiscover: false,
229
+ servers: [],
230
+ onProgress: result => {
231
+ progressResults.push(result);
232
+ },
233
+ });
234
+ // With no servers, there should be no progress callbacks
235
+ t.deepEqual(progressResults, []);
236
+ });
237
+ // Config validation
238
+ test('LSPManager - handles empty config', t => {
239
+ const manager = new LSPManager({});
240
+ t.truthy(manager);
241
+ });
242
+ test('LSPManager - handles config with all options', t => {
243
+ const config = {
244
+ rootUri: 'file:///workspace',
245
+ servers: [
246
+ {
247
+ name: 'test',
248
+ command: 'test',
249
+ languages: ['ts'],
250
+ },
251
+ ],
252
+ autoDiscover: false,
253
+ onProgress: () => { },
254
+ };
255
+ const manager = new LSPManager(config);
256
+ t.truthy(manager);
257
+ });
258
+ // File path handling
259
+ test('LSPManager - handles absolute paths', async (t) => {
260
+ const manager = new LSPManager();
261
+ const result = await manager.openDocument('/absolute/path/file.ts');
262
+ t.false(result); // No client, but shouldn't throw
263
+ });
264
+ test('LSPManager - handles file:// URIs', async (t) => {
265
+ const manager = new LSPManager();
266
+ const result = await manager.openDocument('file:///test/file.ts');
267
+ t.false(result); // No client, but shouldn't throw
268
+ });
269
+ // Extension detection
270
+ test('LSPManager - hasLanguageSupport handles various extensions', t => {
271
+ const manager = new LSPManager();
272
+ // All should return false when no servers are connected
273
+ t.false(manager.hasLanguageSupport('file.ts'));
274
+ t.false(manager.hasLanguageSupport('file.tsx'));
275
+ t.false(manager.hasLanguageSupport('file.js'));
276
+ t.false(manager.hasLanguageSupport('file.py'));
277
+ t.false(manager.hasLanguageSupport('file.rs'));
278
+ t.false(manager.hasLanguageSupport('file.go'));
279
+ });
280
+ // Diagnostics result structure
281
+ test('LSPManager - getAllDiagnostics returns correct structure', t => {
282
+ const manager = new LSPManager();
283
+ const results = manager.getAllDiagnostics();
284
+ t.true(Array.isArray(results));
285
+ // Each result should have uri and diagnostics properties
286
+ for (const result of results) {
287
+ t.truthy(result.uri !== undefined);
288
+ t.truthy(result.diagnostics !== undefined);
289
+ }
290
+ });
291
+ // Status structure
292
+ test('LSPManager - getStatus returns correct structure', t => {
293
+ const manager = new LSPManager();
294
+ const status = manager.getStatus();
295
+ t.true(typeof status.initialized === 'boolean');
296
+ t.true(Array.isArray(status.servers));
297
+ for (const server of status.servers) {
298
+ t.truthy(server.name !== undefined);
299
+ t.true(typeof server.ready === 'boolean');
300
+ t.true(Array.isArray(server.languages));
301
+ }
302
+ });
303
+ // Note: Tests for initialize with invalid server commands are not included as
304
+ // they cause uncaught exceptions from child_process.spawn that AVA cannot properly catch.
305
+ // Error handling for invalid servers is tested via manual integration testing.
306
+ // Content parameter in openDocument
307
+ test('LSPManager - openDocument accepts optional content', async (t) => {
308
+ const manager = new LSPManager();
309
+ const result = await manager.openDocument('/test/file.ts', 'const x = 1;');
310
+ t.false(result); // No client, but should accept content parameter
311
+ });
312
+ // Multi-line range in getCodeActions
313
+ test('LSPManager - getCodeActions handles multi-line ranges', async (t) => {
314
+ const manager = new LSPManager();
315
+ const result = await manager.getCodeActions('/test/file.ts', 0, 0, 100, 50);
316
+ t.deepEqual(result, []);
317
+ });
318
+ // Formatting options
319
+ test('LSPManager - formatDocument with full options', async (t) => {
320
+ const manager = new LSPManager();
321
+ const result = await manager.formatDocument('/test/file.ts', {
322
+ tabSize: 4,
323
+ insertSpaces: false,
324
+ trimTrailingWhitespace: true,
325
+ insertFinalNewline: true,
326
+ trimFinalNewlines: true,
327
+ });
328
+ t.deepEqual(result, []);
329
+ });
330
+ // Edge cases
331
+ test('LSPManager - handles file with no extension', async (t) => {
332
+ const manager = new LSPManager();
333
+ const result = await manager.openDocument('/test/Makefile');
334
+ t.false(result);
335
+ });
336
+ test('LSPManager - handles hidden files', async (t) => {
337
+ const manager = new LSPManager();
338
+ const result = await manager.openDocument('/test/.gitignore');
339
+ t.false(result);
340
+ });
341
+ test('LSPManager - getDiagnostics handles paths with spaces', async (t) => {
342
+ const manager = new LSPManager();
343
+ const result = await manager.getDiagnostics('/test/my file.ts');
344
+ t.deepEqual(result, []);
345
+ });
346
+ test('LSPManager - getDiagnostics handles paths with special chars', async (t) => {
347
+ const manager = new LSPManager();
348
+ const result = await manager.getDiagnostics('/test/[special]/file.ts');
349
+ t.deepEqual(result, []);
350
+ });
351
+ // Unicode file paths
352
+ test('LSPManager - handles unicode file paths', async (t) => {
353
+ const manager = new LSPManager();
354
+ const result = await manager.openDocument('/test/файл.ts');
355
+ t.false(result);
356
+ });
357
+ // Completion position
358
+ test('LSPManager - getCompletions with various positions', async (t) => {
359
+ const manager = new LSPManager();
360
+ // Start of file
361
+ t.deepEqual(await manager.getCompletions('/test.ts', 0, 0), []);
362
+ // Middle of file
363
+ t.deepEqual(await manager.getCompletions('/test.ts', 50, 25), []);
364
+ // Large line number
365
+ t.deepEqual(await manager.getCompletions('/test.ts', 10000, 0), []);
366
+ });
367
+ // Shutdown and reinitialize
368
+ test('LSPManager - can shutdown and reinitialize', async (t) => {
369
+ const manager = new LSPManager();
370
+ await manager.initialize({ autoDiscover: false, servers: [] });
371
+ t.true(manager.isInitialized());
372
+ await manager.shutdown();
373
+ t.false(manager.isInitialized());
374
+ await manager.initialize({ autoDiscover: false, servers: [] });
375
+ t.true(manager.isInitialized());
376
+ });
377
+ // Event handling after shutdown
378
+ test('LSPManager - events still work after shutdown', async (t) => {
379
+ const manager = new LSPManager();
380
+ await manager.shutdown();
381
+ let called = false;
382
+ manager.on('diagnostics', () => {
383
+ called = true;
384
+ });
385
+ manager.emit('diagnostics', { uri: 'test', diagnostics: [] });
386
+ t.true(called);
387
+ });
388
+ //# sourceMappingURL=lsp-manager.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-manager.spec.js","sourceRoot":"","sources":["../../source/lsp/lsp-manager.spec.ts"],"names":[],"mappings":"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"}