From 377d89d098a9d17fc50dac3a62cf5403165d3477 Mon Sep 17 00:00:00 2001 From: paoloricciuti Date: Fri, 8 Nov 2024 00:11:50 +0100 Subject: [PATCH 1/2] fix: add migration task when there's a variable named that would conflict with a rune --- .changeset/chatty-gorillas-poke.md | 5 ++ packages/svelte/src/compiler/migrate/index.js | 51 +++++++++++++++++++ .../_config.js | 8 +++ .../input.svelte | 6 +++ .../output.svelte | 7 +++ .../_config.js | 8 +++ .../input.svelte | 9 ++++ .../output.svelte | 10 ++++ .../_config.js | 8 +++ .../input.svelte | 5 ++ .../output.svelte | 6 +++ .../_config.js | 8 +++ .../input.svelte | 6 +++ .../output.svelte | 7 +++ .../_config.js | 8 +++ .../input.svelte | 10 ++++ .../output.svelte | 11 ++++ .../_config.js | 8 +++ .../input.svelte | 4 ++ .../output.svelte | 5 ++ .../_config.js | 8 +++ .../input.svelte | 7 +++ .../output.svelte | 8 +++ .../_config.js | 8 +++ .../input.svelte | 7 +++ .../output.svelte | 8 +++ .../_config.js | 8 +++ .../input.svelte | 7 +++ .../output.svelte | 8 +++ 29 files changed, 259 insertions(+) create mode 100644 .changeset/chatty-gorillas-poke.md create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/_config.js create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/input.svelte create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/output.svelte create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-1/_config.js create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-1/input.svelte create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-1/output.svelte create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-2/_config.js create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-2/input.svelte create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-2/output.svelte create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/_config.js create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/input.svelte create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/output.svelte create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/_config.js create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/input.svelte create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/output.svelte create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$props-props-var-1/_config.js create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$props-props-var-1/input.svelte create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$props-props-var-1/output.svelte create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-1/_config.js create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-1/input.svelte create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-1/output.svelte create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-2/_config.js create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-2/input.svelte create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-2/output.svelte create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-3/_config.js create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-3/input.svelte create mode 100644 packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-3/output.svelte diff --git a/.changeset/chatty-gorillas-poke.md b/.changeset/chatty-gorillas-poke.md new file mode 100644 index 000000000000..744adcf21463 --- /dev/null +++ b/.changeset/chatty-gorillas-poke.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: add migration task when there's a variable named that would conflict with a rune diff --git a/packages/svelte/src/compiler/migrate/index.js b/packages/svelte/src/compiler/migrate/index.js index 387b6a5485e0..9bfc50561764 100644 --- a/packages/svelte/src/compiler/migrate/index.js +++ b/packages/svelte/src/compiler/migrate/index.js @@ -239,6 +239,18 @@ export function migrate(source, { filename, use_ts } = {}) { insertion_point = state.props_insertion_point; + /** + * @param {"derived"|"props"|"bindable"} rune + */ + function check_rune_binding(rune) { + const has_rune_binding = !!state.scope.get(rune); + if (has_rune_binding) { + throw new MigrationError( + `migrating this component would require adding a \`$${rune}\` but there's already a variable named ${rune}` + ); + } + } + if (state.props.length > 0 || analysis.uses_rest_props || analysis.uses_props) { const has_many_props = state.props.length > 3; const newline_separator = `\n${indent}${indent}`; @@ -253,6 +265,7 @@ export function migrate(source, { filename, use_ts } = {}) { let prop_str = prop.local === prop.exported ? prop.local : `${prop.exported}: ${prop.local}`; if (prop.bindable) { + check_rune_binding('bindable'); prop_str += ` = $bindable(${prop.init})`; } else if (prop.init) { prop_str += ` = ${prop.init}`; @@ -300,11 +313,13 @@ export function migrate(source, { filename, use_ts } = {}) { if (type) { props_declaration = `${type}\n\n${indent}${props_declaration}`; } + check_rune_binding('props'); props_declaration = `${props_declaration}${type ? `: ${type_name}` : ''} = $props();`; } else { if (type) { props_declaration = `${state.props.length > 0 ? `${type}\n\n${indent}` : ''}/** @type {${state.props.length > 0 ? type_name : ''}${analysis.uses_props || analysis.uses_rest_props ? `${state.props.length > 0 ? ' & ' : ''}{ [key: string]: any }` : ''}} */\n${indent}${props_declaration}`; } + check_rune_binding('props'); props_declaration = `${props_declaration} = $props();`; } @@ -361,6 +376,7 @@ export function migrate(source, { filename, use_ts } = {}) { : insertion_point; if (state.derived_components.size > 0) { + check_rune_binding('derived'); str.appendRight( insertion_point, `\n${indent}${[...state.derived_components.entries()].map(([init, name]) => `const ${name} = $derived(${init});`).join(`\n${indent}`)}\n` @@ -368,6 +384,7 @@ export function migrate(source, { filename, use_ts } = {}) { } if (state.derived_conflicting_slots.size > 0) { + check_rune_binding('derived'); str.appendRight( insertion_point, `\n${indent}${[...state.derived_conflicting_slots.entries()].map(([name, init]) => `const ${name} = $derived(${init});`).join(`\n${indent}`)}\n` @@ -652,6 +669,19 @@ const instance_script = { continue; } + /** + * + * @param {"state"|"derived"} rune + */ + function check_rune_binding(rune) { + const has_rune_binding = !!state.scope.get(rune); + if (has_rune_binding) { + throw new MigrationError( + `can't migrate \`${state.str.original.substring(/** @type {number} */ (node.start), node.end)}\` to \`$${rune}\` because there's a variable named ${rune}` + ); + } + } + // state if (declarator.init) { let { start, end } = /** @type {{ start: number, end: number }} */ (declarator.init); @@ -661,6 +691,8 @@ const instance_script = { while (state.str.original[end - 1] !== ')') end += 1; } + check_rune_binding('state'); + state.str.prependLeft(start, '$state('); state.str.appendRight(end, ')'); } else { @@ -755,6 +787,8 @@ const instance_script = { } } + check_rune_binding('derived'); + // Someone wrote a `$: { ... }` statement which we can turn into a `$derived` state.str.appendRight( /** @type {number} */ (declarator.id.typeAnnotation?.end ?? declarator.id.end), @@ -795,6 +829,8 @@ const instance_script = { } } } else { + check_rune_binding('state'); + state.str.prependLeft( /** @type {number} */ (declarator.id.typeAnnotation?.end ?? declarator.id.end), ' = $state(' @@ -858,6 +894,18 @@ const instance_script = { next(); + /** + * @param {"state"|"derived"} rune + */ + function check_rune_binding(rune) { + const has_rune_binding = state.scope.get(rune); + if (has_rune_binding) { + throw new MigrationError( + `can't migrate \`$: ${state.str.original.substring(/** @type {number} */ (node.body.start), node.body.end)}\` to \`$${rune}\` because there's a variable named ${rune}` + ); + } + } + if ( node.body.type === 'ExpressionStatement' && node.body.expression.type === 'AssignmentExpression' @@ -878,6 +926,8 @@ const instance_script = { node.body.expression.right ); + check_rune_binding('derived'); + // $derived state.str.update( /** @type {number} */ (node.start), @@ -902,6 +952,7 @@ const instance_script = { } else { for (const binding of reassigned_bindings) { if (binding && (ids.includes(binding.node) || expression_ids.length === 0)) { + check_rune_binding('state'); const init = binding.kind === 'state' ? ' = $state()' diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/_config.js b/packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/_config.js new file mode 100644 index 000000000000..aceae9ce69c8 --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/_config.js @@ -0,0 +1,8 @@ +import { test } from '../../test'; + +export default test({ + logs: [ + 'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.' + ], + errors: [] +}); diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/input.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/input.svelte new file mode 100644 index 000000000000..e66dfea9f704 --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/input.svelte @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/output.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/output.svelte new file mode 100644 index 000000000000..8fd655718afb --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/output.svelte @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-1/_config.js b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-1/_config.js new file mode 100644 index 000000000000..aceae9ce69c8 --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-1/_config.js @@ -0,0 +1,8 @@ +import { test } from '../../test'; + +export default test({ + logs: [ + 'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.' + ], + errors: [] +}); diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-1/input.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-1/input.svelte new file mode 100644 index 000000000000..f8bde5490972 --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-1/input.svelte @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-1/output.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-1/output.svelte new file mode 100644 index 000000000000..6cd6125a01b0 --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-1/output.svelte @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-2/_config.js b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-2/_config.js new file mode 100644 index 000000000000..aceae9ce69c8 --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-2/_config.js @@ -0,0 +1,8 @@ +import { test } from '../../test'; + +export default test({ + logs: [ + 'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.' + ], + errors: [] +}); diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-2/input.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-2/input.svelte new file mode 100644 index 000000000000..0b298cc7d2ef --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-2/input.svelte @@ -0,0 +1,5 @@ + + + diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-2/output.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-2/output.svelte new file mode 100644 index 000000000000..208e6926c5ab --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-2/output.svelte @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/_config.js b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/_config.js new file mode 100644 index 000000000000..aceae9ce69c8 --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/_config.js @@ -0,0 +1,8 @@ +import { test } from '../../test'; + +export default test({ + logs: [ + 'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.' + ], + errors: [] +}); diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/input.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/input.svelte new file mode 100644 index 000000000000..9203fdf30cba --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/input.svelte @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/output.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/output.svelte new file mode 100644 index 000000000000..9e4f086aedd3 --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/output.svelte @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/_config.js b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/_config.js new file mode 100644 index 000000000000..aceae9ce69c8 --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/_config.js @@ -0,0 +1,8 @@ +import { test } from '../../test'; + +export default test({ + logs: [ + 'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.' + ], + errors: [] +}); diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/input.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/input.svelte new file mode 100644 index 000000000000..c4179c7185c4 --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/input.svelte @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/output.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/output.svelte new file mode 100644 index 000000000000..60c2fca25a8e --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/output.svelte @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$props-props-var-1/_config.js b/packages/svelte/tests/migrate/samples/impossible-migrate-$props-props-var-1/_config.js new file mode 100644 index 000000000000..aceae9ce69c8 --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$props-props-var-1/_config.js @@ -0,0 +1,8 @@ +import { test } from '../../test'; + +export default test({ + logs: [ + 'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.' + ], + errors: [] +}); diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$props-props-var-1/input.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$props-props-var-1/input.svelte new file mode 100644 index 000000000000..bc50d58776f4 --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$props-props-var-1/input.svelte @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$props-props-var-1/output.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$props-props-var-1/output.svelte new file mode 100644 index 000000000000..6efcbf29ac1e --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$props-props-var-1/output.svelte @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-1/_config.js b/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-1/_config.js new file mode 100644 index 000000000000..aceae9ce69c8 --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-1/_config.js @@ -0,0 +1,8 @@ +import { test } from '../../test'; + +export default test({ + logs: [ + 'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.' + ], + errors: [] +}); diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-1/input.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-1/input.svelte new file mode 100644 index 000000000000..8999063751fe --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-1/input.svelte @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-1/output.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-1/output.svelte new file mode 100644 index 000000000000..2b2fd420bd1d --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-1/output.svelte @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-2/_config.js b/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-2/_config.js new file mode 100644 index 000000000000..aceae9ce69c8 --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-2/_config.js @@ -0,0 +1,8 @@ +import { test } from '../../test'; + +export default test({ + logs: [ + 'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.' + ], + errors: [] +}); diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-2/input.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-2/input.svelte new file mode 100644 index 000000000000..354110f5219b --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-2/input.svelte @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-2/output.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-2/output.svelte new file mode 100644 index 000000000000..918bf69bb5cc --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-2/output.svelte @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-3/_config.js b/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-3/_config.js new file mode 100644 index 000000000000..aceae9ce69c8 --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-3/_config.js @@ -0,0 +1,8 @@ +import { test } from '../../test'; + +export default test({ + logs: [ + 'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.' + ], + errors: [] +}); diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-3/input.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-3/input.svelte new file mode 100644 index 000000000000..ddf64172fe93 --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-3/input.svelte @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-3/output.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-3/output.svelte new file mode 100644 index 000000000000..432914a29dad --- /dev/null +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-3/output.svelte @@ -0,0 +1,8 @@ + + + + \ No newline at end of file From 9a575e62d4f4553372c760f2f593aa29258baad3 Mon Sep 17 00:00:00 2001 From: Simon Holthausen Date: Fri, 8 Nov 2024 11:14:41 +0100 Subject: [PATCH 2/2] add actionable advice --- packages/svelte/src/compiler/migrate/index.js | 7 +++---- .../output.svelte | 3 ++- .../output.svelte | 3 ++- .../output.svelte | 3 ++- .../output.svelte | 3 ++- .../impossible-migrate-$props-props-var-1/output.svelte | 3 ++- .../impossible-migrate-$state-state-var-1/output.svelte | 3 ++- .../impossible-migrate-$state-state-var-2/output.svelte | 3 ++- .../impossible-migrate-$state-state-var-3/output.svelte | 3 ++- 9 files changed, 19 insertions(+), 12 deletions(-) diff --git a/packages/svelte/src/compiler/migrate/index.js b/packages/svelte/src/compiler/migrate/index.js index 9bfc50561764..b7687af09f0b 100644 --- a/packages/svelte/src/compiler/migrate/index.js +++ b/packages/svelte/src/compiler/migrate/index.js @@ -246,7 +246,7 @@ export function migrate(source, { filename, use_ts } = {}) { const has_rune_binding = !!state.scope.get(rune); if (has_rune_binding) { throw new MigrationError( - `migrating this component would require adding a \`$${rune}\` but there's already a variable named ${rune}` + `migrating this component would require adding a \`$${rune}\` rune but there's already a variable named ${rune}.\n Rename the variable and try again or migrate by hand.` ); } } @@ -670,14 +670,13 @@ const instance_script = { } /** - * * @param {"state"|"derived"} rune */ function check_rune_binding(rune) { const has_rune_binding = !!state.scope.get(rune); if (has_rune_binding) { throw new MigrationError( - `can't migrate \`${state.str.original.substring(/** @type {number} */ (node.start), node.end)}\` to \`$${rune}\` because there's a variable named ${rune}` + `can't migrate \`${state.str.original.substring(/** @type {number} */ (node.start), node.end)}\` to \`$${rune}\` because there's a variable named ${rune}.\n Rename the variable and try again or migrate by hand.` ); } } @@ -901,7 +900,7 @@ const instance_script = { const has_rune_binding = state.scope.get(rune); if (has_rune_binding) { throw new MigrationError( - `can't migrate \`$: ${state.str.original.substring(/** @type {number} */ (node.body.start), node.body.end)}\` to \`$${rune}\` because there's a variable named ${rune}` + `can't migrate \`$: ${state.str.original.substring(/** @type {number} */ (node.body.start), node.body.end)}\` to \`$${rune}\` because there's a variable named ${rune}.\n Rename the variable and try again or migrate by hand.` ); } } diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/output.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/output.svelte index 8fd655718afb..f956c2cd75b2 100644 --- a/packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/output.svelte +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/output.svelte @@ -1,4 +1,5 @@ - + diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/output.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/output.svelte index 60c2fca25a8e..05cd36368274 100644 --- a/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/output.svelte +++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/output.svelte @@ -1,4 +1,5 @@ - +