From e1f534bc7b2cccc618f3484ee3ad301b17af475b Mon Sep 17 00:00:00 2001 From: "Lyu, Wei Da" Date: Mon, 3 Jun 2024 11:04:06 +0800 Subject: [PATCH] fix: support default parameter in snippet block --- .../src/htmlxtojsx_v2/nodes/SnippetBlock.ts | 7 +++++-- packages/svelte2tsx/test/helpers.ts | 12 ++++++++---- .../test/htmlx2jsx/samples/snippet.v5/expectedv2.js | 4 ++++ .../test/htmlx2jsx/samples/snippet.v5/input.svelte | 4 ++++ 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/packages/svelte2tsx/src/htmlxtojsx_v2/nodes/SnippetBlock.ts b/packages/svelte2tsx/src/htmlxtojsx_v2/nodes/SnippetBlock.ts index 4775de295..8226362de 100644 --- a/packages/svelte2tsx/src/htmlxtojsx_v2/nodes/SnippetBlock.ts +++ b/packages/svelte2tsx/src/htmlxtojsx_v2/nodes/SnippetBlock.ts @@ -93,8 +93,11 @@ export function handleSnippet( ]; if (snippetBlock.parameters?.length) { - const start = snippetBlock.parameters[0].start; - const end = snippetBlock.parameters.at(-1).end; + const first = snippetBlock.parameters[0]; + const last = snippetBlock.parameters.at(-1); + + const start = first.type === 'AssignmentPattern' ? first.left.start : first.start; + const end = last.type === 'AssignmentPattern' ? last.right.end : last.end; transforms.push([start, end]); } diff --git a/packages/svelte2tsx/test/helpers.ts b/packages/svelte2tsx/test/helpers.ts index b3ca7151c..019aa6d80 100644 --- a/packages/svelte2tsx/test/helpers.ts +++ b/packages/svelte2tsx/test/helpers.ts @@ -320,12 +320,16 @@ export function test_samples(dir: string, transform: TransformSampleFn, js: 'js' try { assert.strictEqual(actual, expected, TestError.WrongExpected); } catch (e) { + // html2jsx tests don't have the default export + const expectDefaultExportPosition = expected.lastIndexOf( + '\n\nexport default class' + ); + if (expectDefaultExportPosition === -1) { + throw e; + } // retry with the last part (the returned default export) stripped because it's always differing between old and new, // and if that fails then we're going to rethrow the original error - const expectedModified = expected.substring( - 0, - expected.lastIndexOf('\n\nexport default class') - ); + const expectedModified = expected.substring(0, expectDefaultExportPosition); const actualModified = actual.substring(0, actual.lastIndexOf('\nconst ')); try { assert.strictEqual( diff --git a/packages/svelte2tsx/test/htmlx2jsx/samples/snippet.v5/expectedv2.js b/packages/svelte2tsx/test/htmlx2jsx/samples/snippet.v5/expectedv2.js index f9a054fe8..f2b20d21b 100644 --- a/packages/svelte2tsx/test/htmlx2jsx/samples/snippet.v5/expectedv2.js +++ b/packages/svelte2tsx/test/htmlx2jsx/samples/snippet.v5/expectedv2.js @@ -10,6 +10,10 @@ { const $$_value = await (foo);{ const bar = $$_value; bar;}} };return __sveltets_2_any(0)}; + var default_parameter/*Ωignore_startΩ*/: import('svelte').Snippet<[any]>/*Ωignore_endΩ*/ = (a = '') => {async () => { + a; +};return __sveltets_2_any(0)}; + ;__sveltets_2_ensureSnippet(foo(1)); ;__sveltets_2_ensureSnippet(bar()); ;__sveltets_2_ensureSnippet(await_inside()); diff --git a/packages/svelte2tsx/test/htmlx2jsx/samples/snippet.v5/input.svelte b/packages/svelte2tsx/test/htmlx2jsx/samples/snippet.v5/input.svelte index d51c6a3c3..431f310bc 100644 --- a/packages/svelte2tsx/test/htmlx2jsx/samples/snippet.v5/input.svelte +++ b/packages/svelte2tsx/test/htmlx2jsx/samples/snippet.v5/input.svelte @@ -10,6 +10,10 @@ {#await foo then bar}{bar}{/await} {/snippet} +{#snippet default_parameter(a = '')} + {a} +{/snippet} + {@render foo(1)} {@render bar()} {@render await_inside()}