diff --git a/src/vs/workbench/api/common/extHostTypeConverters.ts b/src/vs/workbench/api/common/extHostTypeConverters.ts
index ef8b23b5c7..ef18a8d506 100644
--- a/src/vs/workbench/api/common/extHostTypeConverters.ts
+++ b/src/vs/workbench/api/common/extHostTypeConverters.ts
@@ -274,8 +274,8 @@ export namespace MarkdownString {
if (isCodeblock(markup)) {
const { language, value } = markup;
res = { value: '```' + language + '\n' + value + '\n```\n' };
- } else if (htmlContent.isMarkdownString(markup)) {
- res = markup;
+ } else if (types.MarkdownString.isMarkdownString(markup)) {
+ res = { value: markup.value, isTrusted: markup.isTrusted, supportThemeIcons: markup.supportThemeIcons };
} else if (typeof markup === 'string') {
res = { value: markup };
} else {
@@ -343,7 +343,7 @@ export namespace MarkdownString {
return result;
}
- export function fromStrict(value: string | types.MarkdownString): undefined | string | htmlContent.IMarkdownString {
+ export function fromStrict(value: string | vscode.MarkdownString): undefined | string | htmlContent.IMarkdownString {
if (!value) {
return undefined;
}
diff --git a/src/vs/workbench/api/common/extHostTypes.ts b/src/vs/workbench/api/common/extHostTypes.ts
index 092b676301..1d205603f4 100644
--- a/src/vs/workbench/api/common/extHostTypes.ts
+++ b/src/vs/workbench/api/common/extHostTypes.ts
@@ -1276,7 +1276,9 @@ export class CodeLens {
}
@es5ClassCompat
-export class MarkdownString extends BaseMarkdownString implements vscode.MarkdownString {
+export class MarkdownString implements vscode.MarkdownString {
+
+ readonly #delegate: BaseMarkdownString;
static isMarkdownString(thing: any): thing is vscode.MarkdownString {
if (thing instanceof MarkdownString) {
@@ -1286,18 +1288,53 @@ export class MarkdownString extends BaseMarkdownString implements vscode.Markdow
}
constructor(value?: string, supportThemeIcons: boolean = false) {
- super(value ?? '', { supportThemeIcons });
+ this.#delegate = new BaseMarkdownString(value, { supportThemeIcons });
}
+ get value(): string {
+ return this.#delegate.value;
+ }
+ set value(value: string) {
+ this.#delegate.value = value;
+ }
+
+ get isTrusted(): boolean | undefined {
+ return this.#delegate.isTrusted;
+ }
+
+ set isTrusted(value: boolean | undefined) {
+ this.#delegate.isTrusted = value;
+ }
+
+ get supportThemeIcons(): boolean | undefined {
+ return this.#delegate.supportThemeIcons;
+ }
+
+ appendText(value: string): vscode.MarkdownString {
+ this.#delegate.appendText(value);
+ return this;
+ }
+
+ appendMarkdown(value: string): vscode.MarkdownString {
+ this.#delegate.appendMarkdown(value);
+ return this;
+ }
+
+ appendCodeblock(value: string, language?: string): vscode.MarkdownString {
+ this.#delegate.appendCodeblock(language ?? '', value);
+ return this;
+ }
+
+
}
@es5ClassCompat
export class ParameterInformation {
label: string | [number, number];
- documentation?: string | MarkdownString;
+ documentation?: string | vscode.MarkdownString;
- constructor(label: string | [number, number], documentation?: string | MarkdownString) {
+ constructor(label: string | [number, number], documentation?: string | vscode.MarkdownString) {
this.label = label;
this.documentation = documentation;
}
@@ -1307,11 +1344,11 @@ export class ParameterInformation {
export class SignatureInformation {
label: string;
- documentation?: string | MarkdownString;
+ documentation?: string | vscode.MarkdownString;
parameters: ParameterInformation[];
activeParameter?: number;
- constructor(label: string, documentation?: string | MarkdownString) {
+ constructor(label: string, documentation?: string | vscode.MarkdownString) {
this.label = label;
this.documentation = documentation;
this.parameters = [];
@@ -1397,7 +1434,7 @@ export class CompletionItem implements vscode.CompletionItem {
kind?: CompletionItemKind;
tags?: CompletionItemTag[];
detail?: string;
- documentation?: string | MarkdownString;
+ documentation?: string | vscode.MarkdownString;
sortText?: string;
filterText?: string;
preselect?: boolean;
diff --git a/src/vs/workbench/test/browser/api/extHostTypes.test.ts b/src/vs/workbench/test/browser/api/extHostTypes.test.ts
index 897bff0498..301a650d51 100644
--- a/src/vs/workbench/test/browser/api/extHostTypes.test.ts
+++ b/src/vs/workbench/test/browser/api/extHostTypes.test.ts
@@ -642,4 +642,10 @@ suite('ExtHostTypes', function () {
1, 0, 3, 3, (1 << 2) | (1 << 4)
]);
});
+
+ test('Markdown codeblock rendering is swapped #111604', function () {
+ const md = new types.MarkdownString().appendCodeblock('
', 'html');
+ assert.deepEqual(md.value, '\n```html\n
\n```\n');
+ });
+
});