@@ -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