From aa3c5a787cff8ba0660443c1ab58f198d7976f03 Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Tue, 5 Apr 2022 00:56:35 +0300 Subject: [PATCH] fix(48418): allow using empty tuple (#48420) --- src/services/codefixes/helpers.ts | 7 ++++- .../codeFixAddMissingProperties19.ts | 28 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/codeFixAddMissingProperties19.ts diff --git a/src/services/codefixes/helpers.ts b/src/services/codefixes/helpers.ts index cc6575912be..a33fe54ec2a 100644 --- a/src/services/codefixes/helpers.ts +++ b/src/services/codefixes/helpers.ts @@ -192,7 +192,12 @@ namespace ts.codefix { const program = context.program; const checker = program.getTypeChecker(); const scriptTarget = getEmitScriptTarget(program.getCompilerOptions()); - const flags = NodeBuilderFlags.NoTruncation | NodeBuilderFlags.NoUndefinedOptionalParameterType | NodeBuilderFlags.SuppressAnyReturnType | (quotePreference === QuotePreference.Single ? NodeBuilderFlags.UseSingleQuotesForStringLiteralType : 0); + const flags = + NodeBuilderFlags.NoTruncation + | NodeBuilderFlags.NoUndefinedOptionalParameterType + | NodeBuilderFlags.SuppressAnyReturnType + | NodeBuilderFlags.AllowEmptyTuple + | (quotePreference === QuotePreference.Single ? NodeBuilderFlags.UseSingleQuotesForStringLiteralType : NodeBuilderFlags.None); const signatureDeclaration = checker.signatureToSignatureDeclaration(signature, kind, enclosingDeclaration, flags, getNoopSymbolTrackerWithResolver(context)) as ArrowFunction | FunctionExpression | MethodDeclaration; if (!signatureDeclaration) { return undefined; diff --git a/tests/cases/fourslash/codeFixAddMissingProperties19.ts b/tests/cases/fourslash/codeFixAddMissingProperties19.ts new file mode 100644 index 00000000000..b8a8b9143b9 --- /dev/null +++ b/tests/cases/fourslash/codeFixAddMissingProperties19.ts @@ -0,0 +1,28 @@ +/// + +////export interface Foo { +//// z(...args: T extends unknown[] ? T : [T]); +////} +////export interface Bar { +//// a(foo: Foo<[number]>): void; +//// b(foo: Foo<[]>): void; +//// c(foo: Foo): void; +////} +////[|const bar: Bar = {};|] + +verify.codeFix({ + index: 0, + description: ts.Diagnostics.Add_missing_properties.message, + newRangeContent: +`const bar: Bar = { + a: function(foo: Foo<[number]>): void { + throw new Error("Function not implemented."); + }, + b: function(foo: Foo<[]>): void { + throw new Error("Function not implemented."); + }, + c: function(foo: Foo): void { + throw new Error("Function not implemented."); + } +};`, +});