diff --git a/CHANGELOG.md b/CHANGELOG.md index 7848af35be..451fc58ca6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased +* Allow `` to be used in a slot ([#2798](https://github.com/sveltejs/svelte/issues/2798)) * Expose object of unknown props in `$$restProps` ([#2930](https://github.com/sveltejs/svelte/issues/2930)) ## 3.19.2 diff --git a/src/compiler/parse/state/tag.ts b/src/compiler/parse/state/tag.ts index 40bb01de9b..ce8a0a9aa7 100644 --- a/src/compiler/parse/state/tag.ts +++ b/src/compiler/parse/state/tag.ts @@ -241,7 +241,7 @@ function read_tag_name(parser: Parser) { while (i--) { const fragment = parser.stack[i]; - if (fragment.type === 'IfBlock' || fragment.type === 'EachBlock') { + if (fragment.type === 'IfBlock' || fragment.type === 'EachBlock' || fragment.type === 'InlineComponent') { legal = true; break; } @@ -250,7 +250,7 @@ function read_tag_name(parser: Parser) { if (!legal) { parser.error({ code: `invalid-self-placement`, - message: ` components can only exist inside if-blocks or each-blocks` + message: ` components can only exist inside {#if} blocks, {#each} blocks, or slots passed to components` }, start); } diff --git a/test/parser/samples/error-self-reference/error.json b/test/parser/samples/error-self-reference/error.json index 798b5cb300..31ecab2b12 100644 --- a/test/parser/samples/error-self-reference/error.json +++ b/test/parser/samples/error-self-reference/error.json @@ -1,6 +1,6 @@ { "code": "invalid-self-placement", - "message": " components can only exist inside if-blocks or each-blocks", + "message": " components can only exist inside {#if} blocks, {#each} blocks, or slots passed to components", "start": { "line": 1, "column": 1, diff --git a/test/runtime/samples/self-reference-component/Countdown.svelte b/test/runtime/samples/self-reference-component/Countdown.svelte new file mode 100644 index 0000000000..21178f2567 --- /dev/null +++ b/test/runtime/samples/self-reference-component/Countdown.svelte @@ -0,0 +1,7 @@ + + +{#if count > 0} + +{/if} \ No newline at end of file diff --git a/test/runtime/samples/self-reference-component/_config.js b/test/runtime/samples/self-reference-component/_config.js new file mode 100644 index 0000000000..e3e0ad3a4f --- /dev/null +++ b/test/runtime/samples/self-reference-component/_config.js @@ -0,0 +1,3 @@ +export default { + html: '5 4 3 2 1 0', +}; \ No newline at end of file diff --git a/test/runtime/samples/self-reference-component/main.svelte b/test/runtime/samples/self-reference-component/main.svelte new file mode 100644 index 0000000000..fd28ec4e40 --- /dev/null +++ b/test/runtime/samples/self-reference-component/main.svelte @@ -0,0 +1,10 @@ + + +{count} + + + + \ No newline at end of file