diff --git a/.changeset/six-lemons-yell.md b/.changeset/six-lemons-yell.md new file mode 100644 index 000000000000..393164464842 --- /dev/null +++ b/.changeset/six-lemons-yell.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: throw on invalid `{@tag}`s diff --git a/documentation/docs/98-reference/.generated/compile-errors.md b/documentation/docs/98-reference/.generated/compile-errors.md index 94ea46b68a02..8a8a10c80b61 100644 --- a/documentation/docs/98-reference/.generated/compile-errors.md +++ b/documentation/docs/98-reference/.generated/compile-errors.md @@ -525,6 +525,12 @@ Expected an identifier Expected identifier or destructure pattern ``` +### expected_tag + +``` +Expected 'html', 'render', 'attach', 'const', or 'debug' +``` + ### expected_token ``` diff --git a/packages/svelte/messages/compile-errors/template.md b/packages/svelte/messages/compile-errors/template.md index dcec3867efd4..db23a2eaa8b2 100644 --- a/packages/svelte/messages/compile-errors/template.md +++ b/packages/svelte/messages/compile-errors/template.md @@ -223,6 +223,10 @@ The same applies to components: > Expected identifier or destructure pattern +## expected_tag + +> Expected 'html', 'render', 'attach', 'const', or 'debug' + ## expected_token > Expected token %token% diff --git a/packages/svelte/src/compiler/errors.js b/packages/svelte/src/compiler/errors.js index 25304e48c812..d6c2efdfdc0d 100644 --- a/packages/svelte/src/compiler/errors.js +++ b/packages/svelte/src/compiler/errors.js @@ -1129,6 +1129,15 @@ export function expected_pattern(node) { e(node, 'expected_pattern', `Expected identifier or destructure pattern\nhttps://svelte.dev/e/expected_pattern`); } +/** + * Expected 'html', 'render', 'attach', 'const', or 'debug' + * @param {null | number | NodeLike} node + * @returns {never} + */ +export function expected_tag(node) { + e(node, 'expected_tag', `Expected 'html', 'render', 'attach', 'const', or 'debug'\nhttps://svelte.dev/e/expected_tag`); +} + /** * Expected token %token% * @param {null | number | NodeLike} node 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 4ff948e165bc..e6e083c09dc7 100644 --- a/packages/svelte/src/compiler/phases/1-parse/state/tag.js +++ b/packages/svelte/src/compiler/phases/1-parse/state/tag.js @@ -724,6 +724,7 @@ function special(parser) { expression: new ExpressionMetadata() } }); + return; } if (parser.eat('render')) { @@ -755,5 +756,7 @@ function special(parser) { snippets: new Set() } }); + return; } + e.expected_tag(parser.index); }