From f8e58d880793ec907ab22d41e31cc317c1b95b25 Mon Sep 17 00:00:00 2001 From: "Lyu, Wei-Da" <36730922+jasonlyu123@users.noreply.github.com> Date: Sat, 28 May 2022 21:30:11 +0800 Subject: [PATCH] (fix) correctly extract script/style tag when there're whitespace before block name (#1494) #1430 --- .../language-server/src/lib/documents/utils.ts | 17 ++++++++--------- .../test/lib/documents/utils.test.ts | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/packages/language-server/src/lib/documents/utils.ts b/packages/language-server/src/lib/documents/utils.ts index 51afa06b4..6388956f1 100644 --- a/packages/language-server/src/lib/documents/utils.ts +++ b/packages/language-server/src/lib/documents/utils.ts @@ -39,19 +39,18 @@ function parseAttributes( } } -const regexIf = new RegExp('{#if\\s.*?}', 'gms'); -const regexIfEnd = new RegExp('{/if}', 'gms'); -const regexEach = new RegExp('{#each\\s.*?}', 'gms'); -const regexEachEnd = new RegExp('{/each}', 'gms'); -const regexAwait = new RegExp('{#await\\s.*?}', 'gms'); -const regexAwaitEnd = new RegExp('{/await}', 'gms'); -const regexHtml = new RegExp('{@html\\s.*?', 'gms'); +const regexIf = new RegExp('{\\s*#if\\s.*?}', 'gms'); +const regexIfEnd = new RegExp('{\\s*/if}', 'gms'); +const regexEach = new RegExp('{\\s*#each\\s.*?}', 'gms'); +const regexEachEnd = new RegExp('{\\s*/each}', 'gms'); +const regexAwait = new RegExp('{\\s*#await\\s.*?}', 'gms'); +const regexAwaitEnd = new RegExp('{\\s*/await}', 'gms'); +const regexHtml = new RegExp('{\\s*@html\\s.*?', 'gms'); /** * Extracts a tag (style or script) from the given text * and returns its start, end and the attributes on that tag. - * - * @param source text content to extract tag from + * @param text text content to extract tag from * @param tag the tag to extract */ function extractTags( diff --git a/packages/language-server/test/lib/documents/utils.test.ts b/packages/language-server/test/lib/documents/utils.test.ts index a76fd97eb..6a6382449 100644 --- a/packages/language-server/test/lib/documents/utils.test.ts +++ b/packages/language-server/test/lib/documents/utils.test.ts @@ -209,6 +209,23 @@ describe('document/utils', () => { }); }); + it("extracts top level script when there're whitespace before block name", () => { + const text = ` + + { #if myvar } {/if} + `; + + assert.deepStrictEqual(extractScriptTags(text)?.script, { + content: 'top level script', + attributes: {}, + start: 25, + end: 41, + startPos: Position.create(1, 24), + endPos: Position.create(1, 40), + container: { start: 17, end: 50 } + }); + }); + it('ignores script tag in svelte:head', () => { // https://github.com/sveltejs/language-tools/issues/143#issuecomment-636422045 const text = `