From 6d26dce265de128d65a99e1735e576651d9c1a75 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 29 May 2026 17:05:12 -0400 Subject: [PATCH] allow class/function expressions in tags (#18324) We shouldn't error on encountering `class` and `function`, because they are treated as expressions rather than declarations --- .../src/compiler/phases/1-parse/state/tag.js | 3 +-- .../declaration-tag-invalid-function/errors.json | 15 +-------------- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/packages/svelte/src/compiler/phases/1-parse/state/tag.js b/packages/svelte/src/compiler/phases/1-parse/state/tag.js index 45d0081707..3c8eba4b26 100644 --- a/packages/svelte/src/compiler/phases/1-parse/state/tag.js +++ b/packages/svelte/src/compiler/phases/1-parse/state/tag.js @@ -14,8 +14,7 @@ const regex_whitespace_with_closing_curly_brace = /\s*}/y; const regex_supported_declaration = /(?:let|const)\b/y; // All except `type` are reserved keywords and cannot be used as variable names. // For type we check if it's not something like `type .x` / `type ()` / `type % 2` / ... -const regex_unsupported_declaration = - /(?:(?:var|function|class|interface|enum)\b)|(?:type\s+[^?.(`<[&|%^}])/y; +const regex_unsupported_declaration = /(?:(?:var|interface|enum)\b)|(?:type\s+[^?.(`<[&|%^}])/y; const pointy_bois = { '<': '>' }; diff --git a/packages/svelte/tests/validator/samples/declaration-tag-invalid-function/errors.json b/packages/svelte/tests/validator/samples/declaration-tag-invalid-function/errors.json index bf0266225f..fe51488c70 100644 --- a/packages/svelte/tests/validator/samples/declaration-tag-invalid-function/errors.json +++ b/packages/svelte/tests/validator/samples/declaration-tag-invalid-function/errors.json @@ -1,14 +1 @@ -[ - { - "code": "declaration_tag_invalid_type", - "message": "Declaration tags must be `let` or `const` declarations", - "start": { - "line": 2, - "column": 2 - }, - "end": { - "line": 2, - "column": 10 - } - } -] +[]