From 3629e68250984b73549c25488fd8f7821e404a73 Mon Sep 17 00:00:00 2001 From: Gerrit Birkeland Date: Thu, 7 Oct 2021 17:22:36 -0600 Subject: [PATCH] Fix rendering of `@example` comment blocks (#132821) --- .../src/test/unit/previewer.test.ts | 49 ++++++++++++++++++- .../src/utils/previewer.ts | 6 +-- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/extensions/typescript-language-features/src/test/unit/previewer.test.ts b/extensions/typescript-language-features/src/test/unit/previewer.test.ts index 040ffcfef6675..764cb1a3f811b 100644 --- a/extensions/typescript-language-features/src/test/unit/previewer.test.ts +++ b/extensions/typescript-language-features/src/test/unit/previewer.test.ts @@ -87,6 +87,54 @@ suite('typescript.previewer', () => { '*@param* `parámetroConDiacríticos` — this will not'); }); + test('Should render @example blocks as code', () => { + assert.strictEqual( + tagsMarkdownPreview([ + { + name: 'example', + text: 'code();' + } + ], noopToResource), + '*@example* \n```\ncode();\n```' + ); + }); + + test('Should not render @example blocks as code as if they contain a codeblock', () => { + assert.strictEqual( + tagsMarkdownPreview([ + { + name: 'example', + text: 'Not code\n```\ncode();\n```' + } + ], noopToResource), + '*@example* \nNot code\n```\ncode();\n```' + ); + }); + + test('Should render @example blocks as code if they contain a ', () => { + assert.strictEqual( + tagsMarkdownPreview([ + { + name: 'example', + text: 'Not code\ncode();' + } + ], noopToResource), + '*@example* \nNot code\n```\ncode();\n```' + ); + }); + + test('Should not render @example blocks as code if they contain a and a codeblock', () => { + assert.strictEqual( + tagsMarkdownPreview([ + { + name: 'example', + text: 'Not code\n```\ncode();\n```' + } + ], noopToResource), + '*@example* \nNot code\n```\ncode();\n```' + ); + }); + test('Should render @linkcode symbol name as code', async () => { assert.strictEqual( plainWithLinks([ @@ -128,4 +176,3 @@ suite('typescript.previewer', () => { 'a [`husky`](file:///path/file.ts#L7%2C5) b'); }); }); - diff --git a/extensions/typescript-language-features/src/utils/previewer.ts b/extensions/typescript-language-features/src/utils/previewer.ts index 93a88382500d4..7ce0e7713daed 100644 --- a/extensions/typescript-language-features/src/utils/previewer.ts +++ b/extensions/typescript-language-features/src/utils/previewer.ts @@ -39,9 +39,9 @@ function getTagBodyText( return undefined; } - // Convert to markdown code block if it is not already one + // Convert to markdown code block if it does not already contain one function makeCodeblock(text: string): string { - if (text.match(/^\s*[~`]{3}/g)) { + if (text.match(/^\s*[~`]{3}/m)) { return text; } return '```\n' + text + '\n```'; @@ -53,7 +53,7 @@ function getTagBodyText( // check for caption tags, fix for #79704 const captionTagMatches = text.match(/(.*?)<\/caption>\s*(\r\n|\n)/); if (captionTagMatches && captionTagMatches.index === 0) { - return captionTagMatches[1] + '\n\n' + makeCodeblock(text.substr(captionTagMatches[0].length)); + return captionTagMatches[1] + '\n' + makeCodeblock(text.substr(captionTagMatches[0].length)); } else { return makeCodeblock(text); }