From c80a0201673a2f98b4320cee3205ec6e4cd847b3 Mon Sep 17 00:00:00 2001 From: "Lyu, Wei-Da" <36730922+jasonlyu123@users.noreply.github.com> Date: Sat, 26 Aug 2023 19:47:49 +0800 Subject: [PATCH] (fix) ignore error about transition third argument (#2139) --- .../features/DiagnosticsProvider.ts | 41 ++++++++++++++++++- .../transition-options/expectedv2.json | 1 + .../fixtures/transition-options/input.svelte | 11 +++++ 3 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/transition-options/expectedv2.json create mode 100644 packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/transition-options/input.svelte diff --git a/packages/language-server/src/plugins/typescript/features/DiagnosticsProvider.ts b/packages/language-server/src/plugins/typescript/features/DiagnosticsProvider.ts index b69864983..0015dd762 100644 --- a/packages/language-server/src/plugins/typescript/features/DiagnosticsProvider.ts +++ b/packages/language-server/src/plugins/typescript/features/DiagnosticsProvider.ts @@ -41,7 +41,8 @@ export enum DiagnosticCode { MISSING_PROPS = 2739, // "Type '...' is missing the following properties from type '..': ..." MISSING_PROP = 2741, // "Property '..' is missing in type '..' but required in type '..'." NO_OVERLOAD_MATCHES_CALL = 2769, // "No overload matches this call" - CANNOT_FIND_NAME = 2304 // "Cannot find name 'xxx'" + CANNOT_FIND_NAME = 2304, // "Cannot find name 'xxx'" + EXPECTED_N_ARGUMENTS = 2554 // Expected {0} arguments, but got {1}. } export class DiagnosticsProviderImpl implements DiagnosticsProvider { @@ -117,7 +118,11 @@ export class DiagnosticsProviderImpl implements DiagnosticsProvider { } diagnostics.push(...additionalStoreDiagnostics); - diagnostics = diagnostics.filter(notGenerated).filter(not(isUnusedReactiveStatementLabel)); + diagnostics = diagnostics + .filter(notGenerated) + .filter(not(isUnusedReactiveStatementLabel)) + .filter((diagnostics) => !expectedTransitionThirdArgument(diagnostics, tsDoc, lang)); + diagnostics = resolveNoopsInReactiveStatements(lang, diagnostics); return diagnostics @@ -499,3 +504,35 @@ function movePropsErrorRangeBackIfNecessary( }); } } + +function expectedTransitionThirdArgument( + diagnostic: ts.Diagnostic, + tsDoc: SvelteDocumentSnapshot, + lang: ts.LanguageService +) { + if ( + diagnostic.code !== DiagnosticCode.EXPECTED_N_ARGUMENTS || + !diagnostic.start || + !tsDoc.getText(0, diagnostic.start).endsWith('__sveltets_2_ensureTransition(') + ) { + return false; + } + + const node = findDiagnosticNode(diagnostic); + if (!node) { + return false; + } + + const callExpression = findNodeAtSpan( + node, + { start: node.getStart(), length: node.getWidth() }, + ts.isCallExpression + ); + const signature = + callExpression && lang.getProgram()?.getTypeChecker().getResolvedSignature(callExpression); + + return ( + signature?.parameters.filter((parameter) => !(parameter.flags & ts.SymbolFlags.Optional)) + .length === 3 + ); +} diff --git a/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/transition-options/expectedv2.json b/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/transition-options/expectedv2.json new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/transition-options/expectedv2.json @@ -0,0 +1 @@ +[] diff --git a/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/transition-options/input.svelte b/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/transition-options/input.svelte new file mode 100644 index 000000000..b54423ea7 --- /dev/null +++ b/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/transition-options/input.svelte @@ -0,0 +1,11 @@ + + +