Skip to content

Commit 7932e39

Browse files
committed
feat: add startupTimeout setting to lsp settings
1 parent 8680a7f commit 7932e39

File tree

2 files changed

+67
-2
lines changed

2 files changed

+67
-2
lines changed

src/lib/editorManager.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,13 @@ async function EditorManager($header, $body) {
630630
...config.initializationOptions,
631631
};
632632
}
633+
if (
634+
typeof config.startupTimeout === "number" &&
635+
Number.isFinite(config.startupTimeout) &&
636+
config.startupTimeout > 0
637+
) {
638+
next.startupTimeout = Math.floor(config.startupTimeout);
639+
}
633640
if (config.launcher && typeof config.launcher === "object") {
634641
next.launcher = { ...current.launcher, ...config.launcher };
635642
}
@@ -655,6 +662,7 @@ async function EditorManager($header, $body) {
655662
transport: config.transport,
656663
clientConfig: config.clientConfig,
657664
initializationOptions: config.initializationOptions,
665+
startupTimeout: config.startupTimeout,
658666
launcher: config.launcher,
659667
enabled: config.enabled !== false,
660668
});

src/settings/lspServerDetail.js

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ function getMergedConfig(server) {
2424
return {
2525
...server,
2626
enabled: override.enabled ?? server.enabled,
27+
startupTimeout: override.startupTimeout ?? server.startupTimeout,
2728
initializationOptions: {
2829
...(server.initializationOptions || {}),
2930
...(override.initializationOptions || {}),
@@ -47,11 +48,24 @@ function getMergedConfig(server) {
4748
async function updateServerConfig(serverId, partial) {
4849
const current = JSON.parse(JSON.stringify(appSettings.value.lsp || {}));
4950
current.servers = current.servers || {};
50-
current.servers[serverId] = {
51+
const nextServer = {
5152
...(current.servers[serverId] || {}),
52-
...partial,
5353
};
5454

55+
Object.entries(partial || {}).forEach(([key, value]) => {
56+
if (value === undefined) {
57+
delete nextServer[key];
58+
return;
59+
}
60+
nextServer[key] = value;
61+
});
62+
63+
if (Object.keys(nextServer).length) {
64+
current.servers[serverId] = nextServer;
65+
} else {
66+
delete current.servers[serverId];
67+
}
68+
5569
await appSettings.update({ lsp: current }, false);
5670
}
5771

@@ -146,6 +160,15 @@ export default function lspServerDetail(serverId) {
146160
info: "View the server initialization options as JSON",
147161
});
148162

163+
items.push({
164+
key: "edit_startup_timeout",
165+
text: "Startup Timeout",
166+
info:
167+
typeof merged.startupTimeout === "number"
168+
? `${merged.startupTimeout} ms`
169+
: "Default (5000 ms)",
170+
});
171+
149172
items.push({
150173
key: "edit_init_options",
151174
text: "Edit Initialization Options",
@@ -210,6 +233,40 @@ export default function lspServerDetail(serverId) {
210233
break;
211234
}
212235

236+
case "edit_startup_timeout": {
237+
const currentTimeout =
238+
override.startupTimeout ?? server.startupTimeout ?? 5000;
239+
const result = await prompt(
240+
"Startup Timeout (milliseconds)",
241+
String(currentTimeout),
242+
"number",
243+
{
244+
test: (val) => {
245+
const timeout = Number.parseInt(String(val), 10);
246+
return Number.isFinite(timeout) && timeout >= 1000;
247+
},
248+
},
249+
);
250+
251+
if (result !== null) {
252+
const timeout = Number.parseInt(String(result), 10);
253+
if (!Number.isFinite(timeout) || timeout < 1000) {
254+
toast("Invalid timeout value");
255+
break;
256+
}
257+
258+
await updateServerConfig(serverId, {
259+
startupTimeout: timeout,
260+
});
261+
serverRegistry.updateServer(serverId, (current) => ({
262+
...current,
263+
startupTimeout: timeout,
264+
}));
265+
toast(`Startup timeout set to ${timeout} ms`);
266+
}
267+
break;
268+
}
269+
213270
case "edit_init_options": {
214271
const currentInitOpts = override.initializationOptions || {};
215272
const currentJson = JSON.stringify(currentInitOpts, null, 2);

0 commit comments

Comments
 (0)