From 40401a2fca4b9b6319008db4ec1d905120ee9058 Mon Sep 17 00:00:00 2001 From: "Lyu, Wei Da" Date: Wed, 14 May 2025 08:42:54 +0800 Subject: [PATCH 1/2] fix: deduplicate definition for rune-mode components --- .../typescript/TypescriptPlugin.test.ts | 48 +++++++++++++++++++ .../definition/definition-rune.svelte | 5 ++ .../testfiles/definition/imported-rune.svelte | 3 ++ .../src/svelte2tsx/addComponentExport.ts | 4 +- .../export-list-runes.v5/expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../renamed-exports-runes.v5/expectedv2.ts | 4 +- .../runes-best-effort-types.v5/expectedv2.ts | 4 +- .../samples/runes-bindable.v5/expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../runes-only-export.v5/expectedv2.ts | 4 +- .../svelte2tsx/samples/runes.v5/expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../ts-export-list-runes.v5/expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../ts-runes-bindable.v5/expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../samples/ts-runes.v5/expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- .../expectedv2.ts | 4 +- 38 files changed, 127 insertions(+), 69 deletions(-) create mode 100644 packages/language-server/test/plugins/typescript/testfiles/definition/definition-rune.svelte create mode 100644 packages/language-server/test/plugins/typescript/testfiles/definition/imported-rune.svelte diff --git a/packages/language-server/test/plugins/typescript/TypescriptPlugin.test.ts b/packages/language-server/test/plugins/typescript/TypescriptPlugin.test.ts index 44ad520db..a4257e343 100644 --- a/packages/language-server/test/plugins/typescript/TypescriptPlugin.test.ts +++ b/packages/language-server/test/plugins/typescript/TypescriptPlugin.test.ts @@ -18,6 +18,7 @@ import { ignoredBuildDirectories } from '../../../src/plugins/typescript/Snapsho import { pathToUrl } from '../../../src/utils'; import { serviceWarmup } from './test-utils'; import { internalHelpers } from 'svelte2tsx'; +import { VERSION } from 'svelte/compiler'; const testDir = path.join(__dirname, 'testfiles'); @@ -818,4 +819,51 @@ describe('TypescriptPlugin', function () { after(() => { __resetCache(); }); + + const isSvelte5Plus = Number(VERSION.split('.')[0]) >= 5; + if (!isSvelte5Plus) { + return; + } + + it('provides definitions from svelte to rune-mode svelte doc', async () => { + const { plugin, document } = setup('definition/definition-rune.svelte'); + + const definitions = await plugin.getDefinitions(document, Position.create(4, 3)); + + assert.deepStrictEqual(definitions, [ + { + originSelectionRange: { + start: { + character: 1, + line: 4 + }, + end: { + character: 13, + line: 4 + } + }, + targetRange: { + start: { + character: 1, + line: 0 + }, + end: { + character: 1, + line: 0 + } + }, + targetSelectionRange: { + start: { + character: 1, + line: 0 + }, + end: { + character: 1, + line: 0 + } + }, + targetUri: getUri('definition/imported-rune.svelte') + } + ]); + }); }); diff --git a/packages/language-server/test/plugins/typescript/testfiles/definition/definition-rune.svelte b/packages/language-server/test/plugins/typescript/testfiles/definition/definition-rune.svelte new file mode 100644 index 000000000..ff916458c --- /dev/null +++ b/packages/language-server/test/plugins/typescript/testfiles/definition/definition-rune.svelte @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/packages/language-server/test/plugins/typescript/testfiles/definition/imported-rune.svelte b/packages/language-server/test/plugins/typescript/testfiles/definition/imported-rune.svelte new file mode 100644 index 000000000..6dc2e51f1 --- /dev/null +++ b/packages/language-server/test/plugins/typescript/testfiles/definition/imported-rune.svelte @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/svelte2tsx/src/svelte2tsx/addComponentExport.ts b/packages/svelte2tsx/src/svelte2tsx/addComponentExport.ts index 9e9454773..8d8f38e8e 100644 --- a/packages/svelte2tsx/src/svelte2tsx/addComponentExport.ts +++ b/packages/svelte2tsx/src/svelte2tsx/addComponentExport.ts @@ -260,7 +260,9 @@ declare function $$__sveltets_2_isomorphic_component< if (exportedNames.usesRunes() && !usesSlots && !events.hasEvents()) { statement = `\n${doc}const ${componentName} = __sveltets_2_fn_component(${internalHelpers.renderName}());\n` + - `type ${componentName} = ReturnType;\n` + + surroundWithIgnoreComments( + `type ${componentName} = ReturnType;\n` + ) + `export default ${componentName};`; } else { statement = diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/export-list-runes.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/export-list-runes.v5/expectedv2.ts index c93b570ad..50fa4d0bc 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/export-list-runes.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/export-list-runes.v5/expectedv2.ts @@ -22,5 +22,5 @@ async () => { { svelteHTML.createElement("svelte:options", {"runes":true,});} }; return { props: /** @type {Record} */ ({}), exports: /** @type {{name1: typeof name1,name2: typeof name2,renamed1: typeof rename1,renamed2: typeof rename2,Foo: typeof Foo,bar: typeof bar,baz: typeof baz,RenamedFoo: typeof RenameFoo,renamedbar: typeof renamebar,renamedbaz: typeof renamebaz}} */ ({}), bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/props-variable-and-$props.id-destructured.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/props-variable-and-$props.id-destructured.v5/expectedv2.ts index 2cab6b0ed..06ce6c17c 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/props-variable-and-$props.id-destructured.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/props-variable-and-$props.id-destructured.v5/expectedv2.ts @@ -9,5 +9,5 @@ async () => { id; props;}; return { props: /** @type {$$ComponentProps} */({}), exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/props-variable-and-$props.id-spread.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/props-variable-and-$props.id-spread.v5/expectedv2.ts index 7016df35d..b26cfc4c9 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/props-variable-and-$props.id-spread.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/props-variable-and-$props.id-spread.v5/expectedv2.ts @@ -9,5 +9,5 @@ async () => { id; props;}; return { props: /** @type {$$ComponentProps} */({}), exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/props-variable-and-$props.id.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/props-variable-and-$props.id.v5/expectedv2.ts index c897e5063..5eac5e813 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/props-variable-and-$props.id.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/props-variable-and-$props.id.v5/expectedv2.ts @@ -9,5 +9,5 @@ async () => { id; props;}; return { props: /** @type {$$ComponentProps} */({}), exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/renamed-exports-runes.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/renamed-exports-runes.v5/expectedv2.ts index c6cb7da3e..aa2968569 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/renamed-exports-runes.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/renamed-exports-runes.v5/expectedv2.ts @@ -10,5 +10,5 @@ async () => { { svelteHTML.createElement("svelte:options", {"runes":true,});} }; return { props: /** @type {Record} */ ({}), exports: /** @type {{name3: typeof name,name4: typeof name2}} */ ({}), bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/runes-best-effort-types.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/runes-best-effort-types.v5/expectedv2.ts index 7f445d222..e41dc433c 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/runes-best-effort-types.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/runes-best-effort-types.v5/expectedv2.ts @@ -6,5 +6,5 @@ async () => {}; return { props: /** @type {$$ComponentProps} */({}), exports: {}, bindings: __sveltets_$$bindings('j', 'k'), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/runes-bindable.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/runes-bindable.v5/expectedv2.ts index 6cf028b2d..bf6f63be4 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/runes-bindable.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/runes-bindable.v5/expectedv2.ts @@ -6,5 +6,5 @@ async () => {}; return { props: /** @type {$$ComponentProps} */({}), exports: {}, bindings: __sveltets_$$bindings('b'), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/runes-looking-like-stores.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/runes-looking-like-stores.v5/expectedv2.ts index a61103f23..dc5d0ae10 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/runes-looking-like-stores.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/runes-looking-like-stores.v5/expectedv2.ts @@ -10,5 +10,5 @@ async () => { state; derived;}; return { props: /** @type {$$ComponentProps} */({}), exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/runes-only-export.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/runes-only-export.v5/expectedv2.ts index d0224b7ce..780d0ee03 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/runes-only-export.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/runes-only-export.v5/expectedv2.ts @@ -9,5 +9,5 @@ async () => { x;}; return { props: /** @type {Record} */ ({}), exports: /** @type {{foo: typeof foo}} */ ({}), bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/runes.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/runes.v5/expectedv2.ts index 940a297c2..7c4f2461b 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/runes.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/runes.v5/expectedv2.ts @@ -9,5 +9,5 @@ async () => {}; return { props: /** @type {$$ComponentProps} */({}), exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/sveltekit-autotypes-$props-rune-no-changes.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/sveltekit-autotypes-$props-rune-no-changes.v5/expectedv2.ts index a004f3084..86d4db4bf 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/sveltekit-autotypes-$props-rune-no-changes.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/sveltekit-autotypes-$props-rune-no-changes.v5/expectedv2.ts @@ -9,5 +9,5 @@ async () => {}; return { props: /** @type {$$ComponentProps} */({}), exports: /** @type {{snapshot: typeof snapshot}} */ ({}), bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Page__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Page__SvelteComponent_ = ReturnType; -export default Page__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Page__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Page__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/sveltekit-autotypes-$props-rune.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/sveltekit-autotypes-$props-rune.v5/expectedv2.ts index 57c83fd0b..31d8067e3 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/sveltekit-autotypes-$props-rune.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/sveltekit-autotypes-$props-rune.v5/expectedv2.ts @@ -7,5 +7,5 @@ async () => {}; return { props: /** @type {$$ComponentProps} */({}), exports: /** @type {{snapshot: typeof snapshot}} */ ({}), bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Page__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Page__SvelteComponent_ = ReturnType; -export default Page__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Page__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Page__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-export-list-runes.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-export-list-runes.v5/expectedv2.ts index 23428b25c..8263c6fd3 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-export-list-runes.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-export-list-runes.v5/expectedv2.ts @@ -22,5 +22,5 @@ async () => { { svelteHTML.createElement("svelte:options", {"runes":true,});} }; return { props: {} as Record, exports: {name1: name1,name2: name2,name3: name3,name4: name4,renamed1: rename1,renamed2: rename2,baz: baz,renamedbaz: renamebaz} as any as { name1: string,name2: string,name3: string,name4: string,renamed1: string,renamed2: string,Foo: typeof Foo,bar: typeof bar,baz: string,RenamedFoo: typeof RenameFoo,renamedbar: typeof renamebar,renamedbaz: string }, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-best-effort-types.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-best-effort-types.v5/expectedv2.ts index 8bd5ed806..384f0bb85 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-best-effort-types.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-best-effort-types.v5/expectedv2.ts @@ -6,5 +6,5 @@ async () => {}; return { props: {} as any as $$ComponentProps, exports: {}, bindings: __sveltets_$$bindings('l', 'm'), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-bindable.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-bindable.v5/expectedv2.ts index 4edd16ab0..834fa4cf9 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-bindable.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-bindable.v5/expectedv2.ts @@ -6,5 +6,5 @@ async () => {}; return { props: {} as any as $$ComponentProps, exports: {}, bindings: __sveltets_$$bindings('b', 'c'), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-1.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-1.v5/expectedv2.ts index 8ffd31293..31248d107 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-1.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-1.v5/expectedv2.ts @@ -26,5 +26,5 @@ async () => { }; return { props: {} as any as Props, exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-2.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-2.v5/expectedv2.ts index 591e41f52..f7c449ce2 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-2.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-2.v5/expectedv2.ts @@ -17,5 +17,5 @@ async () => { }; return { props: {} as any as $$ComponentProps, exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-4.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-4.v5/expectedv2.ts index e1c027860..01d61cdf7 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-4.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-4.v5/expectedv2.ts @@ -16,5 +16,5 @@ async () => {}; return { props: {} as any as Props, exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-5.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-5.v5/expectedv2.ts index 8af046611..3e9191854 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-5.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-5.v5/expectedv2.ts @@ -24,5 +24,5 @@ async () => { $store;}; return { props: {} as any as Props, exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-6.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-6.v5/expectedv2.ts index f063d70b8..38767634a 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-6.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-6.v5/expectedv2.ts @@ -15,5 +15,5 @@ async () => {}; return { props: {} as any as Props, exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-1.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-1.v5/expectedv2.ts index 87569df87..21bfe1775 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-1.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-1.v5/expectedv2.ts @@ -13,5 +13,5 @@ async () => {}; return { props: {} as any as Props, exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-10.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-10.v5/expectedv2.ts index 22f05c3f8..beca7ee9f 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-10.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-10.v5/expectedv2.ts @@ -13,5 +13,5 @@ type B = (typeof data)['cfg']; async () => {}; return { props: {} as any as Props, exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-11.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-11.v5/expectedv2.ts index ed54ba6dc..91eb47b6d 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-11.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-11.v5/expectedv2.ts @@ -16,5 +16,5 @@ let {}: Abc = $props(); async () => {}; return { props: {} as any as Abc, exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-12.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-12.v5/expectedv2.ts index 1bcbfe8c5..b10dd1753 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-12.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-12.v5/expectedv2.ts @@ -16,5 +16,5 @@ let {}: Abc = $props(); async () => {}; return { props: {} as any as Abc, exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-13.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-13.v5/expectedv2.ts index 1525d0cc2..ed9300a8b 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-13.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-13.v5/expectedv2.ts @@ -16,5 +16,5 @@ async () => { }; return { props: {} as any as A, exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-14.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-14.v5/expectedv2.ts index 27b661d11..4830bf9d2 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-14.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-14.v5/expectedv2.ts @@ -15,5 +15,5 @@ async () => { }; return { props: {} as any as A, exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-2.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-2.v5/expectedv2.ts index 45e9ac904..64042a9b9 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-2.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-2.v5/expectedv2.ts @@ -12,5 +12,5 @@ async () => {}; return { props: {} as any as Props, exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-4.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-4.v5/expectedv2.ts index 2c075b45b..6e3d73fb4 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-4.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-4.v5/expectedv2.ts @@ -11,5 +11,5 @@ async () => { }; return { props: {} as any as $$ComponentProps, exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-5.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-5.v5/expectedv2.ts index f63e341ec..1b092c3a2 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-5.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-5.v5/expectedv2.ts @@ -11,5 +11,5 @@ async () => { }; return { props: {} as any as $$ComponentProps, exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-6.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-6.v5/expectedv2.ts index 7bcd60c2d..30e8178ca 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-6.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-6.v5/expectedv2.ts @@ -7,5 +7,5 @@ async () => {}; return { props: {} as any as $$ComponentProps, exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-7.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-7.v5/expectedv2.ts index fb7aa141a..eb6e41482 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-7.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes-hoistable-props-false-7.v5/expectedv2.ts @@ -10,5 +10,5 @@ async () => {}; return { props: {} as any as Props, exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes.v5/expectedv2.ts index 3c25c967e..f3910173c 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-runes.v5/expectedv2.ts @@ -9,5 +9,5 @@ async () => {}; return { props: {} as any as $$ComponentProps, exports: {}, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Input__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Input__SvelteComponent_ = ReturnType; -export default Input__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Input__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Input__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-sveltekit-autotypes-$props-rune-unchanged.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-sveltekit-autotypes-$props-rune-unchanged.v5/expectedv2.ts index b2051ddd0..5790cf3d4 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-sveltekit-autotypes-$props-rune-unchanged.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-sveltekit-autotypes-$props-rune-unchanged.v5/expectedv2.ts @@ -8,5 +8,5 @@ async () => {}; return { props: {} as any as $$ComponentProps, exports: {snapshot: snapshot} as any as { snapshot: any }, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Page__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Page__SvelteComponent_ = ReturnType; -export default Page__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Page__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Page__SvelteComponent_; \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-sveltekit-autotypes-$props-rune.v5/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-sveltekit-autotypes-$props-rune.v5/expectedv2.ts index ce2a45ef9..0fc79ba4c 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-sveltekit-autotypes-$props-rune.v5/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-sveltekit-autotypes-$props-rune.v5/expectedv2.ts @@ -7,5 +7,5 @@ async () => {}; return { props: {} as any as $$ComponentProps, exports: {} as any as { snapshot: typeof snapshot }, bindings: __sveltets_$$bindings(''), slots: {}, events: {} }} const Page__SvelteComponent_ = __sveltets_2_fn_component($$render()); -type Page__SvelteComponent_ = ReturnType; -export default Page__SvelteComponent_; \ No newline at end of file +/*Ωignore_startΩ*/type Page__SvelteComponent_ = ReturnType; +/*Ωignore_endΩ*/export default Page__SvelteComponent_; \ No newline at end of file From 8665d3088657969c5ca2a6a9366d81011f07e0f5 Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Wed, 14 May 2025 17:58:02 +0200 Subject: [PATCH 2/2] Update packages/svelte2tsx/src/svelte2tsx/addComponentExport.ts --- packages/svelte2tsx/src/svelte2tsx/addComponentExport.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/svelte2tsx/src/svelte2tsx/addComponentExport.ts b/packages/svelte2tsx/src/svelte2tsx/addComponentExport.ts index 8d8f38e8e..39f9ffd79 100644 --- a/packages/svelte2tsx/src/svelte2tsx/addComponentExport.ts +++ b/packages/svelte2tsx/src/svelte2tsx/addComponentExport.ts @@ -260,6 +260,8 @@ declare function $$__sveltets_2_isomorphic_component< if (exportedNames.usesRunes() && !usesSlots && !events.hasEvents()) { statement = `\n${doc}const ${componentName} = __sveltets_2_fn_component(${internalHelpers.renderName}());\n` + + // Surround the type with ignore comments so it is filtered out from go-to-definition etc, + // which for some editors can cause duplicates surroundWithIgnoreComments( `type ${componentName} = ReturnType;\n` ) +