From 0fa41db6c68e550dfec9491c9f4f211f5181dab5 Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Tue, 8 Dec 2020 00:00:46 +0200 Subject: [PATCH] fix(41827): allow infer parameters from method signature usage (#41836) --- src/services/codefixes/inferFromUsage.ts | 1 + .../codeFixInferFromUsageMethodSignature.ts | 52 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 tests/cases/fourslash/codeFixInferFromUsageMethodSignature.ts diff --git a/src/services/codefixes/inferFromUsage.ts b/src/services/codefixes/inferFromUsage.ts index ac05ebda1d9..3721d4ea124 100644 --- a/src/services/codefixes/inferFromUsage.ts +++ b/src/services/codefixes/inferFromUsage.ts @@ -453,6 +453,7 @@ namespace ts.codefix { break; case SyntaxKind.FunctionDeclaration: case SyntaxKind.MethodDeclaration: + case SyntaxKind.MethodSignature: searchToken = containingFunction.name; break; } diff --git a/tests/cases/fourslash/codeFixInferFromUsageMethodSignature.ts b/tests/cases/fourslash/codeFixInferFromUsageMethodSignature.ts new file mode 100644 index 00000000000..4eab7f0f56a --- /dev/null +++ b/tests/cases/fourslash/codeFixInferFromUsageMethodSignature.ts @@ -0,0 +1,52 @@ +/// + +////interface Options { +//// run(a, b, c, d, e, f): void; +////} +//// +////interface I { +//// x: number; +////} +//// +////enum E { +//// X +////} +//// +////function foo(options: Options) { +//// const a = 1; +//// const b = ""; +//// const c = { x: 1, y: 1 }; +//// const d = [1, 2, 3]; +//// const e: I = { x: 1 }; +//// const f: E = E.X; +//// +//// options.run(a, b, c, d, e, f); +////} + +verify.codeFixAll({ + fixId: "inferFromUsage", + fixAllDescription: "Infer all types from usage", + newFileContent: +`interface Options { + run(a: number, b: string, c: { x: number; y: number; }, d: number[], e: I, f: E): void; +} + +interface I { + x: number; +} + +enum E { + X +} + +function foo(options: Options) { + const a = 1; + const b = ""; + const c = { x: 1, y: 1 }; + const d = [1, 2, 3]; + const e: I = { x: 1 }; + const f: E = E.X; + + options.run(a, b, c, d, e, f); +}`, +});