@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.
- package/README.md +53 -19
- package/assets/nanocoder-vscode.vsix +0 -0
- package/dist/app.d.ts +6 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +54 -18
- package/dist/app.js.map +1 -1
- package/dist/cli.js +13 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/mcp.d.ts +6 -0
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +25 -3
- package/dist/commands/mcp.js.map +1 -1
- package/dist/components/vscode-extension-prompt.d.ts +12 -0
- package/dist/components/vscode-extension-prompt.d.ts.map +1 -0
- package/dist/components/vscode-extension-prompt.js +115 -0
- package/dist/components/vscode-extension-prompt.js.map +1 -0
- package/dist/hooks/useAppInitialization.d.ts +2 -0
- package/dist/hooks/useAppInitialization.d.ts.map +1 -1
- package/dist/hooks/useAppInitialization.js +55 -1
- package/dist/hooks/useAppInitialization.js.map +1 -1
- package/dist/hooks/useModeHandlers.d.ts +2 -1
- package/dist/hooks/useModeHandlers.d.ts.map +1 -1
- package/dist/hooks/useModeHandlers.js +13 -1
- package/dist/hooks/useModeHandlers.js.map +1 -1
- package/dist/hooks/useToolHandler.d.ts.map +1 -1
- package/dist/hooks/useToolHandler.js +11 -0
- package/dist/hooks/useToolHandler.js.map +1 -1
- package/dist/hooks/useVSCodeServer.d.ts +45 -0
- package/dist/hooks/useVSCodeServer.d.ts.map +1 -0
- package/dist/hooks/useVSCodeServer.js +144 -0
- package/dist/hooks/useVSCodeServer.js.map +1 -0
- package/dist/lsp/index.d.ts +12 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +11 -0
- package/dist/lsp/index.js.map +1 -0
- package/dist/lsp/lsp-client.d.ts +78 -0
- package/dist/lsp/lsp-client.d.ts.map +1 -0
- package/dist/lsp/lsp-client.js +378 -0
- package/dist/lsp/lsp-client.js.map +1 -0
- package/dist/lsp/lsp-client.spec.d.ts +2 -0
- package/dist/lsp/lsp-client.spec.d.ts.map +1 -0
- package/dist/lsp/lsp-client.spec.js +395 -0
- package/dist/lsp/lsp-client.spec.js.map +1 -0
- package/dist/lsp/lsp-manager.d.ts +124 -0
- package/dist/lsp/lsp-manager.d.ts.map +1 -0
- package/dist/lsp/lsp-manager.js +313 -0
- package/dist/lsp/lsp-manager.js.map +1 -0
- package/dist/lsp/lsp-manager.spec.d.ts +2 -0
- package/dist/lsp/lsp-manager.spec.d.ts.map +1 -0
- package/dist/lsp/lsp-manager.spec.js +388 -0
- package/dist/lsp/lsp-manager.spec.js.map +1 -0
- package/dist/lsp/protocol.d.ts +313 -0
- package/dist/lsp/protocol.d.ts.map +1 -0
- package/dist/lsp/protocol.js +70 -0
- package/dist/lsp/protocol.js.map +1 -0
- package/dist/lsp/protocol.spec.d.ts +2 -0
- package/dist/lsp/protocol.spec.d.ts.map +1 -0
- package/dist/lsp/protocol.spec.js +406 -0
- package/dist/lsp/protocol.spec.js.map +1 -0
- package/dist/lsp/server-discovery.d.ts +35 -0
- package/dist/lsp/server-discovery.d.ts.map +1 -0
- package/dist/lsp/server-discovery.js +291 -0
- package/dist/lsp/server-discovery.js.map +1 -0
- package/dist/lsp/server-discovery.spec.d.ts +2 -0
- package/dist/lsp/server-discovery.spec.d.ts.map +1 -0
- package/dist/lsp/server-discovery.spec.js +375 -0
- package/dist/lsp/server-discovery.spec.js.map +1 -0
- package/dist/mcp/mcp-client.d.ts +18 -0
- package/dist/mcp/mcp-client.d.ts.map +1 -1
- package/dist/mcp/mcp-client.js +59 -23
- package/dist/mcp/mcp-client.js.map +1 -1
- package/dist/mcp/mcp-client.spec.d.ts +2 -0
- package/dist/mcp/mcp-client.spec.d.ts.map +1 -0
- package/dist/mcp/mcp-client.spec.js +64 -0
- package/dist/mcp/mcp-client.spec.js.map +1 -0
- package/dist/mcp/transport-factory.d.ts +39 -0
- package/dist/mcp/transport-factory.d.ts.map +1 -0
- package/dist/mcp/transport-factory.js +176 -0
- package/dist/mcp/transport-factory.js.map +1 -0
- package/dist/mcp/transport-factory.spec.d.ts +2 -0
- package/dist/mcp/transport-factory.spec.d.ts.map +1 -0
- package/dist/mcp/transport-factory.spec.js +303 -0
- package/dist/mcp/transport-factory.spec.js.map +1 -0
- package/dist/tools/create-file.d.ts.map +1 -1
- package/dist/tools/create-file.js +37 -3
- package/dist/tools/create-file.js.map +1 -1
- package/dist/tools/delete-lines.d.ts.map +1 -1
- package/dist/tools/delete-lines.js +41 -1
- package/dist/tools/delete-lines.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/insert-lines.d.ts.map +1 -1
- package/dist/tools/insert-lines.js +40 -1
- package/dist/tools/insert-lines.js.map +1 -1
- package/dist/tools/lsp-get-diagnostics.d.ts +3 -0
- package/dist/tools/lsp-get-diagnostics.d.ts.map +1 -0
- package/dist/tools/lsp-get-diagnostics.js +182 -0
- package/dist/tools/lsp-get-diagnostics.js.map +1 -0
- package/dist/tools/replace-lines.d.ts.map +1 -1
- package/dist/tools/replace-lines.js +44 -1
- package/dist/tools/replace-lines.js.map +1 -1
- package/dist/tools/tool-manager.d.ts +17 -0
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +12 -0
- package/dist/tools/tool-manager.js.map +1 -1
- package/dist/types/config.d.ts +27 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/mcp.d.ts +23 -1
- package/dist/types/mcp.d.ts.map +1 -1
- package/dist/vscode/extension-installer.d.ts +24 -0
- package/dist/vscode/extension-installer.d.ts.map +1 -0
- package/dist/vscode/extension-installer.js +110 -0
- package/dist/vscode/extension-installer.js.map +1 -0
- package/dist/vscode/extension-installer.spec.d.ts +2 -0
- package/dist/vscode/extension-installer.spec.d.ts.map +1 -0
- package/dist/vscode/extension-installer.spec.js +132 -0
- package/dist/vscode/extension-installer.spec.js.map +1 -0
- package/dist/vscode/index.d.ts +14 -0
- package/dist/vscode/index.d.ts.map +1 -0
- package/dist/vscode/index.js +14 -0
- package/dist/vscode/index.js.map +1 -0
- package/dist/vscode/protocol.d.ts +101 -0
- package/dist/vscode/protocol.d.ts.map +1 -0
- package/dist/vscode/protocol.js +7 -0
- package/dist/vscode/protocol.js.map +1 -0
- package/dist/vscode/protocol.spec.d.ts +2 -0
- package/dist/vscode/protocol.spec.d.ts.map +1 -0
- package/dist/vscode/protocol.spec.js +354 -0
- package/dist/vscode/protocol.spec.js.map +1 -0
- package/dist/vscode/vscode-server.d.ts +118 -0
- package/dist/vscode/vscode-server.d.ts.map +1 -0
- package/dist/vscode/vscode-server.js +303 -0
- package/dist/vscode/vscode-server.js.map +1 -0
- package/dist/vscode/vscode-server.spec.d.ts +2 -0
- package/dist/vscode/vscode-server.spec.d.ts.map +1 -0
- package/dist/vscode/vscode-server.spec.js +487 -0
- package/dist/vscode/vscode-server.spec.js.map +1 -0
- package/dist/wizard/steps/mcp-step.d.ts.map +1 -1
- package/dist/wizard/steps/mcp-step.js +139 -72
- package/dist/wizard/steps/mcp-step.js.map +1 -1
- package/dist/wizard/steps/summary-step.d.ts.map +1 -1
- package/dist/wizard/steps/summary-step.js +58 -2
- package/dist/wizard/steps/summary-step.js.map +1 -1
- package/dist/wizard/templates/mcp-templates.d.ts +20 -2
- package/dist/wizard/templates/mcp-templates.d.ts.map +1 -1
- package/dist/wizard/templates/mcp-templates.js +351 -7
- package/dist/wizard/templates/mcp-templates.js.map +1 -1
- package/dist/wizard/templates/mcp-templates.spec.js +257 -0
- package/dist/wizard/templates/mcp-templates.spec.js.map +1 -1
- package/dist/wizard/validation-array.spec.d.ts +2 -0
- package/dist/wizard/validation-array.spec.d.ts.map +1 -0
- package/dist/wizard/validation-array.spec.js +221 -0
- package/dist/wizard/validation-array.spec.js.map +1 -0
- package/dist/wizard/validation.d.ts +26 -1
- package/dist/wizard/validation.d.ts.map +1 -1
- package/dist/wizard/validation.js +15 -2
- package/dist/wizard/validation.js.map +1 -1
- package/dist/wizard/validation.spec.js +13 -5
- package/dist/wizard/validation.spec.js.map +1 -1
- package/package.json +7 -3
- 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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"}
|