Skip to content

Commit 66fbb9a

Browse files
(chore) TypeScript 5.0 (#1919)
--------- Co-authored-by: Lyu, Wei Da <[email protected]>
1 parent 65a23ac commit 66fbb9a

File tree

11 files changed

+60
-35
lines changed

11 files changed

+60
-35
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"lint": "prettier --check ."
1717
},
1818
"dependencies": {
19-
"typescript": "^4.9.3"
19+
"typescript": "^5.0.3"
2020
},
2121
"devDependencies": {
2222
"prettier": "2.8.6",

packages/language-server/src/plugins/typescript/features/CodeActionsProvider.ts

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -207,13 +207,15 @@ export class CodeActionsProviderImpl implements CodeActionsProvider {
207207
normalizePath(virtualDocInfo.virtualDoc.getFilePath()!)
208208
);
209209

210+
console.log(JSON.stringify(fix.changes, null, 2));
210211
for (const change of fix.changes) {
211212
if (getCanonicalFileName(normalizePath(change.fileName)) === virtualDocPath) {
212213
change.fileName = tsDoc.filePath;
213214

214215
this.removeDuplicatedComponentImport(virtualDocInfo.insertedNames, change);
215216
}
216217
}
218+
console.log(JSON.stringify(fix.changes, null, 2));
217219

218220
await this.lsAndTsDocResolver.deleteSnapshot(virtualDocPath);
219221
}
@@ -342,7 +344,13 @@ export class CodeActionsProviderImpl implements CodeActionsProvider {
342344
change.textChanges = change.textChanges
343345
.map((textChange) => ({
344346
...textChange,
345-
newText: textChange.newText.replace(importRegex, '')
347+
newText: textChange.newText.replace(importRegex, (match) => {
348+
if (match.split('\n').length > 2) {
349+
return '\n';
350+
} else {
351+
return '';
352+
}
353+
})
346354
}))
347355
// in case there are replacements
348356
.filter((change) => change.span.length || change.newText);
@@ -1003,6 +1011,8 @@ export class CodeActionsProviderImpl implements CodeActionsProvider {
10031011
const getGlobalCompletion = memoize(() =>
10041012
lang.getCompletionsAtPosition(tsDoc.filePath, 0, userPreferences, formatCodeSettings)
10051013
);
1014+
const [tsMajorStr] = ts.version.split('.');
1015+
const tsSupportHandlerQuickFix = parseInt(tsMajorStr) >= 5;
10061016

10071017
for (const diagnostic of cannotFindNameDiagnostics) {
10081018
const identifier = this.findIdentifierForDiagnostic(tsDoc, diagnostic, sourceFile);
@@ -1012,10 +1022,6 @@ export class CodeActionsProviderImpl implements CodeActionsProvider {
10121022
}
10131023

10141024
const isQuickFixTargetTargetStore = identifier?.escapedText.toString().startsWith('$');
1015-
const isQuickFixTargetEventHandler = this.isQuickFixForEventHandler(
1016-
document,
1017-
diagnostic
1018-
);
10191025

10201026
const fixes: ts.CodeFixAction[] = [];
10211027
if (isQuickFixTargetTargetStore) {
@@ -1031,16 +1037,22 @@ export class CodeActionsProviderImpl implements CodeActionsProvider {
10311037
);
10321038
}
10331039

1034-
if (isQuickFixTargetEventHandler) {
1035-
fixes.push(
1036-
...this.getEventHandlerQuickFixes(
1037-
identifier,
1038-
tsDoc,
1039-
typeChecker,
1040-
quote,
1041-
formatCodeBasis
1042-
)
1040+
if (!tsSupportHandlerQuickFix) {
1041+
const isQuickFixTargetEventHandler = this.isQuickFixForEventHandler(
1042+
document,
1043+
diagnostic
10431044
);
1045+
if (isQuickFixTargetEventHandler) {
1046+
fixes.push(
1047+
...this.getEventHandlerQuickFixes(
1048+
identifier,
1049+
tsDoc,
1050+
typeChecker,
1051+
quote,
1052+
formatCodeBasis
1053+
)
1054+
);
1055+
}
10441056
}
10451057

10461058
if (!fixes.length) {
@@ -1077,6 +1089,8 @@ export class CodeActionsProviderImpl implements CodeActionsProvider {
10771089
return identifier;
10781090
}
10791091

1092+
// TODO: Remove this in late 2023
1093+
// when most users have upgraded to TS 5.0+
10801094
private getSvelteStoreQuickFixes(
10811095
identifier: ts.Identifier,
10821096
lang: ts.LanguageService,
@@ -1180,7 +1194,9 @@ export class CodeActionsProviderImpl implements CodeActionsProvider {
11801194

11811195
const newText = [
11821196
...jsDoc,
1183-
`function ${identifier.text}(${parametersText})${useJsDoc ? '' : ': ' + returnType} {`,
1197+
`function ${identifier.text}(${parametersText})${
1198+
useJsDoc || returnType === 'any' ? '' : ': ' + returnType
1199+
} {`,
11841200
formatCodeBasis.indent +
11851201
`throw new Error(${quote}Function not implemented.${quote})` +
11861202
formatCodeBasis.semi,

packages/language-server/src/plugins/typescript/module-loader.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ class ImpliedNodeFormatResolver {
126126
export function createSvelteModuleLoader(
127127
getSnapshot: (fileName: string) => DocumentSnapshot,
128128
compilerOptions: ts.CompilerOptions,
129-
tsSystem: ts.System
129+
tsSystem: ts.System,
130+
tsResolveModuleName: typeof ts.resolveModuleName
130131
) {
131132
const svelteSys = createSvelteSys(getSnapshot, tsSystem);
132133
const moduleCache = new ModuleResolutionCache();
@@ -186,7 +187,7 @@ export function createSvelteModuleLoader(
186187
// Delegate to the TS resolver first.
187188
// If that does not bring up anything, try the Svelte Module loader
188189
// which is able to deal with .svelte files.
189-
const tsResolvedModule = ts.resolveModuleName(
190+
const tsResolvedModule = tsResolveModuleName(
190191
name,
191192
containingFile,
192193
compilerOptions,
@@ -199,7 +200,7 @@ export function createSvelteModuleLoader(
199200
return tsResolvedModule;
200201
}
201202

202-
const svelteResolvedModule = ts.resolveModuleName(
203+
const svelteResolvedModule = tsResolveModuleName(
203204
name,
204205
containingFile,
205206
compilerOptions,

packages/language-server/src/plugins/typescript/service.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,12 @@ async function createLanguageService(
183183
// by the time they need to be accessed synchronously by DocumentSnapshots.
184184
await configLoader.loadConfigs(workspacePath);
185185

186-
const svelteModuleLoader = createSvelteModuleLoader(getSnapshot, compilerOptions, tsSystem);
186+
const svelteModuleLoader = createSvelteModuleLoader(
187+
getSnapshot,
188+
compilerOptions,
189+
tsSystem,
190+
ts.resolveModuleName
191+
);
187192

188193
let svelteTsPath: string;
189194
try {
@@ -442,7 +447,9 @@ async function createLanguageService(
442447
!compilerOptions.moduleResolution ||
443448
compilerOptions.moduleResolution === ts.ModuleResolutionKind.Classic
444449
) {
445-
compilerOptions.moduleResolution = ts.ModuleResolutionKind.NodeJs;
450+
compilerOptions.moduleResolution =
451+
// NodeJS: up to 4.9, Node10: since 5.0
452+
(ts.ModuleResolutionKind as any).NodeJs ?? ts.ModuleResolutionKind.Node10;
446453
}
447454
if (
448455
!compilerOptions.module ||

packages/language-server/test/plugins/typescript/features/CodeActionsProvider.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ describe('CodeActionsProvider', () => {
264264
edits: [
265265
{
266266
newText:
267-
`\n\n${indent}function handleClick(event: MouseEvent & { currentTarget: EventTarget & HTMLButtonElement; }): any {\n` +
267+
`\n\n${indent}function handleClick(event: MouseEvent & { currentTarget: EventTarget & HTMLButtonElement; }) {\n` +
268268
`${indent}${indent}throw new Error("Function not implemented.");\n` +
269269
`${indent}}\n`,
270270
range: {
@@ -988,8 +988,8 @@ describe('CodeActionsProvider', () => {
988988
edits: [
989989
{
990990
newText:
991-
`\n${indent}import { FixAllImported3 } from \"./importing/c\";\n` +
992-
`${indent}import FixAllImported2 from \"./importing/FixAllImported2.svelte\";\n`,
991+
`\n${indent}import FixAllImported2 from \"./importing/FixAllImported2.svelte\";\n` +
992+
`${indent}import { FixAllImported3 } from \"./importing/c\";\n`,
993993
range: {
994994
start: {
995995
character: 18,

packages/language-server/test/plugins/typescript/module-loader.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ describe('createSvelteModuleLoader', () => {
1818
const resolveStub = sinon.stub().returns(<ts.ResolvedModuleWithFailedLookupLocations>{
1919
resolvedModule
2020
});
21-
sinon.replace(ts, 'resolveModuleName', resolveStub);
2221

2322
const svelteSys = <any>'svelteSys';
2423
sinon.stub(svS, 'createSvelteSys').returns(svelteSys);
@@ -27,7 +26,8 @@ describe('createSvelteModuleLoader', () => {
2726
const moduleResolver = createSvelteModuleLoader(
2827
getSvelteSnapshotStub,
2928
compilerOptions,
30-
ts.sys
29+
ts.sys,
30+
resolveStub
3131
);
3232

3333
return {

packages/language-server/test/plugins/typescript/service.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ describe('service', () => {
6565
strict: true,
6666
declaration: false,
6767
module: ts.ModuleKind.ESNext,
68-
moduleResolution: ts.ModuleResolutionKind.NodeJs,
68+
moduleResolution: ts.ModuleResolutionKind.Node10,
6969
noEmit: true,
7070
skipLibCheck: true,
7171
target: ts.ScriptTarget.ESNext

packages/svelte-check/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"import-fresh": "^3.2.1",
3131
"sade": "^1.7.4",
3232
"svelte-preprocess": "^5.0.3",
33-
"typescript": "^4.9.4"
33+
"typescript": "^5.0.3"
3434
},
3535
"peerDependencies": {
3636
"svelte": "^3.55.0"

packages/svelte2tsx/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
"svelte": "~3.57.0",
3838
"tiny-glob": "^0.2.6",
3939
"tslib": "^2.4.0",
40-
"typescript": "^4.9.3"
40+
"typescript": "^5.0.3"
4141
},
4242
"peerDependencies": {
4343
"svelte": "^3.55",

packages/svelte2tsx/src/emitDts.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,9 @@ function loadTsconfig(config: EmitDtsConfig, svelteMap: SvelteMap) {
7777
options: {
7878
...options,
7979
noEmit: false, // Set to true in case of jsconfig, force false, else nothing is emitted
80-
moduleResolution: ts.ModuleResolutionKind.NodeJs, // Classic if not set, which gives wrong results
80+
moduleResolution:
81+
// NodeJS: up to 4.9, Node10: since 5.0
82+
(ts.ModuleResolutionKind as any).NodeJs ?? ts.ModuleResolutionKind.Node10, // Classic if not set, which gives wrong results
8183
declaration: true, // Needed for d.ts file generation
8284
emitDeclarationOnly: true, // We only want d.ts file generation
8385
declarationDir: config.declarationDir, // Where to put the declarations
@@ -176,7 +178,6 @@ async function createTsCompilerHost(options: any, svelteMap: SvelteMap) {
176178
return resolveModuleName(moduleName, containingFile, compilerOptions);
177179
});
178180
};
179-
// @ts-expect-error remove once we bump dev dep to TS 5
180181
host.resolveModuleNameLiterals = (
181182
moduleLiterals,
182183
containingFile,

yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1632,10 +1632,10 @@ [email protected], type-detect@^4.0.8:
16321632
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
16331633
integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
16341634

1635-
typescript@*, typescript@^4.9.3, typescript@^4.9.4:
1636-
version "4.9.4"
1637-
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78"
1638-
integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==
1635+
typescript@*,typescript@^5.0.3:
1636+
version "5.0.3"
1637+
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.3.tgz#fe976f0c826a88d0a382007681cbb2da44afdedf"
1638+
integrity sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==
16391639

16401640
unist-util-stringify-position@^3.0.0:
16411641
version "3.0.2"

0 commit comments

Comments
 (0)