diff --git a/client/src/commands.ts b/client/src/commands.ts index 2fd2057..1549926 100644 --- a/client/src/commands.ts +++ b/client/src/commands.ts @@ -10,9 +10,13 @@ export function registerCommands(context: ExtensionContext, client: LanguageClie }), commands.registerCommand(`vscode-clle.viewFullDocumentation`, async (object: string, library: string) => { - const isDocOpened = await GenCmdDoc.openClDoc(object, library); - if (!isDocOpened) { - await window.showErrorMessage(`Documentation for ${object} command not found`); + try { + const isDocOpened = await GenCmdDoc.openClDoc(object, library); + if (!isDocOpened) { + await window.showErrorMessage(`Documentation for ${object} command not found`); + } + } catch (error) { + await window.showErrorMessage(`Failed to open documentation for ${object}/${library}`); } }) ) diff --git a/client/src/extension.ts b/client/src/extension.ts index 6926d1a..9008956 100644 --- a/client/src/extension.ts +++ b/client/src/extension.ts @@ -83,8 +83,11 @@ export function activate(context: ExtensionContext): CLLE { if (displayCommandDocumentation) { try { return await GenCmdDoc.getCLDoc(qualifiedObject[0], qualifiedObject[1]); - } catch (e) { - console.log(e); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + + // Return error object so caller knows what went wrong + return { error: errorMessage }; } } }); diff --git a/client/src/gencmddoc.ts b/client/src/gencmddoc.ts index 05398cf..0608537 100644 --- a/client/src/gencmddoc.ts +++ b/client/src/gencmddoc.ts @@ -73,6 +73,9 @@ export class GenCmdDoc { if (generateResult.code === 0) { const html = (await content.downloadStreamfileRaw(`${toDir}/${toStmf}`)).toString(); return html; + } else { + // Throw stdout from the result when command fails + throw new Error(generateResult.stdout || `GENCMDDOC command failed with code ${generateResult.code}`); } } } diff --git a/server/src/data.ts b/server/src/data.ts index 886a307..f6535c9 100644 --- a/server/src/data.ts +++ b/server/src/data.ts @@ -46,7 +46,7 @@ export async function getFileSpec(object: string, library = '*LIBL', openId?: st return (spec ? Files.getVariables(spec, openId) : undefined); } -export async function getCLDocSpec(object: string, library = '*LIBL'): Promise<{ html: string, doc: CLDoc } | undefined> { +export async function getCLDocSpec(object: string, library = '*LIBL'): Promise<{ html: string, doc: CLDoc } | { error: string } | undefined> { const validObject = object.toUpperCase(); const validLibrary = (library || `*LIBL`).toUpperCase(); return await getCLDoc(validObject, validLibrary); diff --git a/server/src/instance.ts b/server/src/instance.ts index 6eeacb0..da2ddad 100644 --- a/server/src/instance.ts +++ b/server/src/instance.ts @@ -24,6 +24,6 @@ export function getFileDefinition(object: string, library?: string): Promise { +export function getCLDoc(object: string, library?: string): Promise<{ html: string, doc: CLDoc } | { error: string } | undefined> { return connection.sendRequest("getCLDoc", [object, library]); } \ No newline at end of file diff --git a/server/src/providers/completion.ts b/server/src/providers/completion.ts index 41d244c..d5a7c01 100644 --- a/server/src/providers/completion.ts +++ b/server/src/providers/completion.ts @@ -150,17 +150,18 @@ export async function completionResolveProvider(item: CompletionItem): Promise p.name === data.name); - if (parameterDoc && parameterDoc.description) { - // Remove the heading pattern: ### Parameter\n\n - const description = parameterDoc.description.replace(/^###[^\n]*\n\n/, ''); - - item.documentation = { - kind: MarkupKind.Markdown, - value: description - }; + if (!('error' in clDoc)) { + const parameterDoc = clDoc.doc.parameters.details.find(p => p.name === data.name); + if (parameterDoc && parameterDoc.description) { + // Remove the heading pattern: ### Parameter\n\n + const description = parameterDoc.description.replace(/^###[^\n]*\n\n/, ''); + + item.documentation = { + kind: MarkupKind.Markdown, + value: description + }; + } } } } diff --git a/server/src/providers/hover.ts b/server/src/providers/hover.ts index 19d4a74..e8a7d0a 100644 --- a/server/src/providers/hover.ts +++ b/server/src/providers/hover.ts @@ -20,6 +20,10 @@ export default async function hoverProvider(params: HoverParams): Promise