Skip to content

Commit a64f988

Browse files
committed
feat: Add LSP progress reporting
1 parent f597a2d commit a64f988

File tree

1 file changed

+57
-48
lines changed

1 file changed

+57
-48
lines changed

src/cm/lsp/clientManager.ts

Lines changed: 57 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -337,10 +337,19 @@ export class LspClientManager {
337337
? defaultExtensions.filter((ext) => ext !== diagnosticsExtension)
338338
: defaultExtensions;
339339

340+
const progressCapabilities: LSPClientExtension = {
341+
clientCapabilities: {
342+
window: {
343+
workDoneProgress: true,
344+
},
345+
},
346+
};
347+
340348
const mergedExtensions = [
341349
...filteredBuiltins,
342350
...extraExtensions,
343351
...serverExtensions,
352+
progressCapabilities,
344353
];
345354
clientConfig.extensions = mergedExtensions;
346355

@@ -419,54 +428,54 @@ export class LspClientManager {
419428
console.info(`[LSP:${server.id}] ${message}`);
420429
return true;
421430
},
422-
// "$/progress": (_client: LSPClient, params: unknown): boolean => {
423-
// interface ProgressParams {
424-
// token?: string | number;
425-
// value?: {
426-
// kind?: "begin" | "report" | "end";
427-
// title?: string;
428-
// message?: string;
429-
// percentage?: number;
430-
// cancellable?: boolean;
431-
// };
432-
// }
433-
// const progressParams = params as ProgressParams;
434-
// if (!progressParams?.value) return false;
435-
// console.log("Progress", progressParams.value);
436-
437-
// const { kind, title, message, percentage } = progressParams.value;
438-
// const displayTitle = title || server.label || server.id;
439-
440-
// if (kind === "begin") {
441-
// lspStatusBar.show({
442-
// message: message || "Starting...",
443-
// title: displayTitle,
444-
// type: "info",
445-
// icon: "autorenew",
446-
// duration: false,
447-
// showProgress: typeof percentage === "number",
448-
// progress: percentage,
449-
// });
450-
// } else if (kind === "report") {
451-
// lspStatusBar.update({
452-
// message: message,
453-
// progress: percentage,
454-
// });
455-
// } else if (kind === "end") {
456-
// lspStatusBar.show({
457-
// message: message || "Complete",
458-
// title: displayTitle,
459-
// type: "success",
460-
// icon: "check",
461-
// duration: 2000,
462-
// });
463-
// }
464-
465-
// console.info(
466-
// `[LSP:${server.id}] Progress: ${kind} - ${message || title || ""} ${typeof percentage === "number" ? `(${percentage}%)` : ""}`,
467-
// );
468-
// return true;
469-
// },
431+
"$/progress": (_client: LSPClient, params: unknown): boolean => {
432+
interface ProgressParams {
433+
token?: string | number;
434+
value?: {
435+
kind?: "begin" | "report" | "end";
436+
title?: string;
437+
message?: string;
438+
percentage?: number;
439+
cancellable?: boolean;
440+
};
441+
}
442+
const progressParams = params as ProgressParams;
443+
if (!progressParams?.value) return false;
444+
console.log("Progress", progressParams.value);
445+
446+
const { kind, title, message, percentage } = progressParams.value;
447+
const displayTitle = title || server.label || server.id;
448+
449+
if (kind === "begin") {
450+
lspStatusBar.show({
451+
message: message || "Starting...",
452+
title: displayTitle,
453+
type: "info",
454+
icon: "autorenew",
455+
duration: false,
456+
showProgress: typeof percentage === "number",
457+
progress: percentage,
458+
});
459+
} else if (kind === "report") {
460+
lspStatusBar.update({
461+
message: message,
462+
progress: percentage,
463+
});
464+
} else if (kind === "end") {
465+
lspStatusBar.show({
466+
message: message || "Complete",
467+
title: displayTitle,
468+
type: "success",
469+
icon: "check",
470+
duration: 2000,
471+
});
472+
}
473+
474+
console.info(
475+
`[LSP:${server.id}] Progress: ${kind} - ${message || title || ""} ${typeof percentage === "number" ? `(${percentage}%)` : ""}`,
476+
);
477+
return true;
478+
},
470479
};
471480

472481
if (!clientConfig.workspace) {

0 commit comments

Comments
 (0)