Skip to content

Commit

Permalink
Allow markdown code blocks to contain data after language id (microso…
Browse files Browse the repository at this point in the history
  • Loading branch information
mjbvz authored Aug 11, 2022
1 parent 1246fe5 commit cad50f2
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
14 changes: 13 additions & 1 deletion src/vs/base/browser/markdownRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ export function renderMarkdown(markdown: IMarkdownString, options: MarkdownRende
if (options.codeBlockRenderer) {
renderer.code = (code, lang) => {
const id = defaultGenerator.nextId();
const value = options.codeBlockRenderer!(lang ?? '', code);
const value = options.codeBlockRenderer!(postProcessCodeBlockLanguageId(lang), code);
codeBlocks.push(value.then(element => [id, element]));
return `<div class="code" data-code="${id}">${escape(code)}</div>`;
};
Expand Down Expand Up @@ -294,6 +294,18 @@ export function renderMarkdown(markdown: IMarkdownString, options: MarkdownRende
};
}

function postProcessCodeBlockLanguageId(lang: string | undefined): string {
if (!lang) {
return '';
}

const parts = lang.split(/[\s+|:|,|\{|\?]/, 1);
if (parts.length) {
return parts[0];
}
return lang;
}

function resolveWithBaseUri(baseUri: URI, href: string): string {
const hasScheme = /^\w[\w\d+.-]*:/.test(href);
if (hasScheme) {
Expand Down
15 changes: 14 additions & 1 deletion src/vs/base/test/browser/markdownRenderer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ suite('MarkdownRenderer', () => {
});

suite('Code block renderer', () => {
const simpleCodeBlockRenderer = (code: string): Promise<HTMLElement> => {
const simpleCodeBlockRenderer = (lang: string, code: string): Promise<HTMLElement> => {
const element = document.createElement('code');
element.textContent = code;
return Promise.resolve(element);
Expand Down Expand Up @@ -115,6 +115,19 @@ suite('MarkdownRenderer', () => {
}, 50);
});
});

test('Code blocks should use leading language id (#157793)', async () => {
const markdown = { value: '```js some other stuff\n1 + 1;\n```' };
const lang = await new Promise<string>(resolve => {
renderMarkdown(markdown, {
codeBlockRenderer: async (lang, value) => {
resolve(lang);
return simpleCodeBlockRenderer(lang, value);
}
});
});
assert.strictEqual(lang, 'js');
});
});

suite('ThemeIcons Support On', () => {
Expand Down

0 comments on commit cad50f2

Please sign in to comment.