From bb40cb8a1907592ff7382e1a394bd674193f8ca1 Mon Sep 17 00:00:00 2001 From: Liam Murphy <43807659+Liamolucko@users.noreply.github.com> Date: Thu, 11 Mar 2021 22:18:27 +1100 Subject: [PATCH] (fix) Don't step out of if block on else if (#874) `else if`s are represented with an if block node inside them, which is correctly handled when entering, but when leaving it would previously incorrectly step out of the if block leading to an internal error. --- packages/svelte2tsx/src/htmlxtojsx/index.ts | 4 +++- .../samples/nested-if-else-if-and-each-block/expected.jsx | 5 +++++ .../samples/nested-if-else-if-and-each-block/input.svelte | 5 +++++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 packages/svelte2tsx/test/htmlx2jsx/samples/nested-if-else-if-and-each-block/expected.jsx create mode 100644 packages/svelte2tsx/test/htmlx2jsx/samples/nested-if-else-if-and-each-block/input.svelte diff --git a/packages/svelte2tsx/src/htmlxtojsx/index.ts b/packages/svelte2tsx/src/htmlxtojsx/index.ts index 10a8433d3..b6a0afb07 100644 --- a/packages/svelte2tsx/src/htmlxtojsx/index.ts +++ b/packages/svelte2tsx/src/htmlxtojsx/index.ts @@ -188,7 +188,9 @@ export function convertHtmlxToJsx( try { switch (node.type) { case 'IfBlock': - ifScope = ifScope.getParent(); + if (!node.elseif) { + ifScope = ifScope.getParent(); + } break; case 'EachBlock': templateScopeManager.eachLeave(node); diff --git a/packages/svelte2tsx/test/htmlx2jsx/samples/nested-if-else-if-and-each-block/expected.jsx b/packages/svelte2tsx/test/htmlx2jsx/samples/nested-if-else-if-and-each-block/expected.jsx new file mode 100644 index 000000000..db202efcf --- /dev/null +++ b/packages/svelte2tsx/test/htmlx2jsx/samples/nested-if-else-if-and-each-block/expected.jsx @@ -0,0 +1,5 @@ +<>{(true) ? <> + {(true) ? <> : (true) ? <> : <> } + : <> + {__sveltets_each([], (_) => /*Ωignore_startΩ*/(!(true)) && /*Ωignore_endΩ*/<>)} + } \ No newline at end of file diff --git a/packages/svelte2tsx/test/htmlx2jsx/samples/nested-if-else-if-and-each-block/input.svelte b/packages/svelte2tsx/test/htmlx2jsx/samples/nested-if-else-if-and-each-block/input.svelte new file mode 100644 index 000000000..6b2b04e1e --- /dev/null +++ b/packages/svelte2tsx/test/htmlx2jsx/samples/nested-if-else-if-and-each-block/input.svelte @@ -0,0 +1,5 @@ +{#if true} + {#if true}{:else if true}{/if} +{:else} + {#each [] as _}{/each} +{/if}