Skip to content

Commit 493ec4d

Browse files
[fix] prevent unused types warning (#6293)
* [fix] prevent unused types warning Fixes #6290 * ts-nocheck Co-authored-by: Rich Harris <hello@rich-harris.dev>
1 parent 7cf0ddc commit 493ec4d

File tree

3 files changed

+59
-5
lines changed

3 files changed

+59
-5
lines changed

.changeset/neat-cameras-swim.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/kit': patch
3+
---
4+
5+
[fix] prevent unused types warning

packages/kit/src/core/sync/write_types/index.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,13 @@ export function tweak_types(content, names) {
559559
arg.name.end,
560560
`: Parameters<${type}>[0]` + (add_parens ? ')' : '')
561561
);
562+
} else {
563+
// prevent "type X is imported but not used" (isn't silenced by @ts-nocheck) when svelte-check runs
564+
code.append(`;${type};`);
562565
}
566+
} else {
567+
// prevent "type X is imported but not used" (isn't silenced by @ts-nocheck) when svelte-check runs
568+
code.append(`;${type};`);
563569
}
564570

565571
modified = true;
@@ -569,6 +575,16 @@ export function tweak_types(content, names) {
569575
}
570576
});
571577

578+
if (modified) {
579+
// Ignore all type errors so they don't show up twice when svelte-check runs
580+
// Account for possible @ts-check which would overwrite @ts-nocheck
581+
if (code.original.startsWith('// @ts-check')) {
582+
code.prependLeft('// @ts-check'.length, '\n// @ts-nocheck\n');
583+
} else {
584+
code.prepend('// @ts-nocheck\n');
585+
}
586+
}
587+
572588
return {
573589
modified,
574590
code: code.toString(),

packages/kit/src/core/sync/write_types/index.spec.js

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// @ts-nocheck
12
import path from 'path';
23
import fs from 'fs';
34
import { format } from 'prettier';
@@ -101,7 +102,8 @@ test('Rewrites types for a TypeScript module', () => {
101102
assert.equal(rewritten?.exports, ['GET']);
102103
assert.equal(
103104
rewritten?.code,
104-
`
105+
`// @ts-nocheck
106+
105107
export const GET = ({ params }: Parameters<Get>[0]) => {
106108
return {
107109
a: 1
@@ -125,13 +127,14 @@ test('Rewrites types for a TypeScript module without param', () => {
125127
assert.equal(rewritten?.exports, ['GET']);
126128
assert.equal(
127129
rewritten?.code,
128-
`
130+
`// @ts-nocheck
131+
129132
export const GET = () => {
130133
return {
131134
a: 1
132135
};
133136
};
134-
`
137+
;Get;`
135138
);
136139
});
137140

@@ -150,7 +153,8 @@ test('Rewrites types for a JavaScript module with `function`', () => {
150153
assert.equal(rewritten?.exports, ['GET']);
151154
assert.equal(
152155
rewritten?.code,
153-
`
156+
`// @ts-nocheck
157+
154158
/** @param {Parameters<import('./$types').Get>[0]} event */
155159
export function GET({ params }) {
156160
return {
@@ -176,7 +180,36 @@ test('Rewrites types for a JavaScript module with `const`', () => {
176180
assert.equal(rewritten?.exports, ['GET']);
177181
assert.equal(
178182
rewritten?.code,
179-
`
183+
`// @ts-nocheck
184+
185+
/** @param {Parameters<import('./$types').Get>[0]} event */
186+
export const GET = ({ params }) => {
187+
return {
188+
a: 1
189+
};
190+
};
191+
`
192+
);
193+
});
194+
195+
test('Appends @ts-nocheck after @ts-check', () => {
196+
const source = `// @ts-check
197+
/** @type {import('./$types').Get} */
198+
export const GET = ({ params }) => {
199+
return {
200+
a: 1
201+
};
202+
};
203+
`;
204+
205+
const rewritten = tweak_types(source, new Set(['GET']));
206+
207+
assert.equal(rewritten?.exports, ['GET']);
208+
assert.equal(
209+
rewritten?.code,
210+
`// @ts-check
211+
// @ts-nocheck
212+
180213
/** @param {Parameters<import('./$types').Get>[0]} event */
181214
export const GET = ({ params }) => {
182215
return {

0 commit comments

Comments
 (0)