Skip to content

Commit 7008652

Browse files
authored
fix: handle optional args in snippets (#2414)
#2406
1 parent dbfb47a commit 7008652

File tree

5 files changed

+37
-12
lines changed

5 files changed

+37
-12
lines changed

packages/svelte2tsx/src/htmlxtojsx_v2/nodes/SnippetBlock.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,19 @@ export function handleSnippet(
8282
typeAnnotation = p.right?.typeAnnotation;
8383
}
8484
}
85-
if (!typeAnnotation) return 'any';
86-
return typeAnnotation.typeAnnotation
87-
? str.original.slice(
88-
typeAnnotation.typeAnnotation.start,
89-
typeAnnotation.typeAnnotation.end
90-
)
91-
: // slap any on to it to silence "implicit any" errors; JSDoc people can't add types to snippets
92-
'any';
85+
86+
// fall back to `any` to silence "implicit any" errors; JSDoc people can't add types to snippets
87+
let type = 'any';
88+
if (typeAnnotation?.typeAnnotation) {
89+
type = str.original.slice(
90+
typeAnnotation.typeAnnotation.start,
91+
typeAnnotation.typeAnnotation.end
92+
);
93+
}
94+
if (p.optional || p.type === 'AssignmentPattern') {
95+
type += '?';
96+
}
97+
return type;
9398
})
9499
.join(', ')}]>`;
95100
}

packages/svelte2tsx/test/htmlx2jsx/samples/snippet.v5/expectedv2.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
{ const $$_value = await (foo);{ const bar = $$_value; bar;}}
1111
};return __sveltets_2_any(0)};
1212

13+
var defaultValue/*Ωignore_startΩ*/: import('svelte').Snippet<[any?]>/*Ωignore_endΩ*/ = (x = '') => {async () => {
14+
{ svelteHTML.createElement("div", {}); x; }
15+
};return __sveltets_2_any(0)};
16+
1317
;__sveltets_2_ensureSnippet(foo(1));
1418
;__sveltets_2_ensureSnippet(bar());
1519
;__sveltets_2_ensureSnippet(await_inside());

packages/svelte2tsx/test/htmlx2jsx/samples/snippet.v5/input.svelte

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
{#await foo then bar}{bar}{/await}
1111
{/snippet}
1212

13+
{#snippet defaultValue(x = '')}
14+
<div>asd{x}</div>
15+
{/snippet}
16+
1317
{@render foo(1)}
1418
{@render bar()}
1519
{@render await_inside()}

packages/svelte2tsx/test/htmlx2jsx/samples/ts-in-template.v5/expectedv2.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,13 @@ item as string;
2222

2323
var foo3/*Ωignore_startΩ*/: import('svelte').Snippet<[string | number]>/*Ωignore_endΩ*/ = (bar : string | number) => {async () => { };return __sveltets_2_any(0)};
2424

25-
var foo3/*Ωignore_startΩ*/: import('svelte').Snippet<[string | number, (str: string)=>void]>/*Ωignore_endΩ*/ = (bar : string | number, baz : (str: string)=>void) => {async () => { };return __sveltets_2_any(0)};
25+
var foo4/*Ωignore_startΩ*/: import('svelte').Snippet<[string | number, (str: string)=>void]>/*Ωignore_endΩ*/ = (bar : string | number, baz : (str: string)=>void) => {async () => { };return __sveltets_2_any(0)};
2626

27-
var foo3/*Ωignore_startΩ*/: import('svelte').Snippet<[{baz: string}]>/*Ωignore_endΩ*/ = (bar: {baz: string}) => {async () => { };return __sveltets_2_any(0)};
27+
var foo5/*Ωignore_startΩ*/: import('svelte').Snippet<[{baz: string}]>/*Ωignore_endΩ*/ = (bar: {baz: string}) => {async () => { };return __sveltets_2_any(0)};
28+
29+
var foo6/*Ωignore_startΩ*/: import('svelte').Snippet<[string?]>/*Ωignore_endΩ*/ = (bar?: string) => {async () => { };return __sveltets_2_any(0)};
30+
31+
var foo7/*Ωignore_startΩ*/: import('svelte').Snippet<[any, any?]>/*Ωignore_endΩ*/ = (bar, baz = '') => {async () => { };return __sveltets_2_any(0)};
2832

2933
;__sveltets_2_ensureSnippet(foo(bar as string));
3034

packages/svelte2tsx/test/htmlx2jsx/samples/ts-in-template.v5/input.svelte

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,19 @@
3434
snippet
3535
{/snippet}
3636

37-
{#snippet foo3(bar : string | number, baz : (str: string)=>void)}
37+
{#snippet foo4(bar : string | number, baz : (str: string)=>void)}
3838
snippet
3939
{/snippet}
4040

41-
{#snippet foo3(bar: {baz: string})}
41+
{#snippet foo5(bar: {baz: string})}
42+
snippet
43+
{/snippet}
44+
45+
{#snippet foo6(bar?: string)}
46+
snippet
47+
{/snippet}
48+
49+
{#snippet foo7(bar, baz = '')}
4250
snippet
4351
{/snippet}
4452

0 commit comments

Comments
 (0)