From 025e511c11d9bdb78c8263720cebcff68ec64eae Mon Sep 17 00:00:00 2001 From: paoloricciuti Date: Mon, 24 Feb 2025 21:52:19 +0100 Subject: [PATCH] fix: allow for duplicate `var` declarations --- .changeset/spotty-drinks-tan.md | 5 +++++ packages/svelte/src/compiler/phases/scope.js | 8 ++++++-- .../validator/samples/multiple-var-same-name/errors.json | 1 + .../validator/samples/multiple-var-same-name/input.svelte | 6 ++++++ 4 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 .changeset/spotty-drinks-tan.md create mode 100644 packages/svelte/tests/validator/samples/multiple-var-same-name/errors.json create mode 100644 packages/svelte/tests/validator/samples/multiple-var-same-name/input.svelte diff --git a/.changeset/spotty-drinks-tan.md b/.changeset/spotty-drinks-tan.md new file mode 100644 index 000000000000..2150c8cffd72 --- /dev/null +++ b/.changeset/spotty-drinks-tan.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: allow for duplicate `var` declarations diff --git a/packages/svelte/src/compiler/phases/scope.js b/packages/svelte/src/compiler/phases/scope.js index f46adf49006e..7d9f90982afb 100644 --- a/packages/svelte/src/compiler/phases/scope.js +++ b/packages/svelte/src/compiler/phases/scope.js @@ -161,8 +161,12 @@ export class Scope { } if (this.declarations.has(node.name)) { - // This also errors on var/function types, but that's arguably a good thing - e.declaration_duplicate(node, node.name); + const binding = this.declarations.get(node.name); + if (binding && binding.declaration_kind !== 'var' && declaration_kind !== 'var') { + // This also errors on function types, but that's arguably a good thing + // declaring function twice is also caught by acorn in the parse phase + e.declaration_duplicate(node, node.name); + } } const binding = new Binding(this, node, kind, declaration_kind, initial); diff --git a/packages/svelte/tests/validator/samples/multiple-var-same-name/errors.json b/packages/svelte/tests/validator/samples/multiple-var-same-name/errors.json new file mode 100644 index 000000000000..fe51488c7066 --- /dev/null +++ b/packages/svelte/tests/validator/samples/multiple-var-same-name/errors.json @@ -0,0 +1 @@ +[] diff --git a/packages/svelte/tests/validator/samples/multiple-var-same-name/input.svelte b/packages/svelte/tests/validator/samples/multiple-var-same-name/input.svelte new file mode 100644 index 000000000000..19a8ef7722ae --- /dev/null +++ b/packages/svelte/tests/validator/samples/multiple-var-same-name/input.svelte @@ -0,0 +1,6 @@ + + +{test} \ No newline at end of file