From a97ba985b2e4481d6d3b94503b266a6c56c2c97b Mon Sep 17 00:00:00 2001 From: Vitaly Date: Mon, 10 Apr 2023 23:13:46 +0300 Subject: [PATCH] infer from usages: support short-circuiting assignment operators (#52860) --- src/services/codefixes/inferFromUsage.ts | 3 +++ .../codeFixInferFromUsageAllAssignments.ts | 14 ++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 tests/cases/fourslash/codeFixInferFromUsageAllAssignments.ts diff --git a/src/services/codefixes/inferFromUsage.ts b/src/services/codefixes/inferFromUsage.ts index c41673645ad..af21562a22a 100644 --- a/src/services/codefixes/inferFromUsage.ts +++ b/src/services/codefixes/inferFromUsage.ts @@ -869,6 +869,9 @@ function inferTypeFromReferences(program: Program, references: readonly Identifi case SyntaxKind.EqualsEqualsEqualsToken: case SyntaxKind.ExclamationEqualsEqualsToken: case SyntaxKind.ExclamationEqualsToken: + case SyntaxKind.AmpersandAmpersandEqualsToken: + case SyntaxKind.QuestionQuestionEqualsToken: + case SyntaxKind.BarBarEqualsToken: addCandidateType(usage, checker.getTypeAtLocation(parent.left === node ? parent.right : parent.left)); break; diff --git a/tests/cases/fourslash/codeFixInferFromUsageAllAssignments.ts b/tests/cases/fourslash/codeFixInferFromUsageAllAssignments.ts new file mode 100644 index 00000000000..cfd05965194 --- /dev/null +++ b/tests/cases/fourslash/codeFixInferFromUsageAllAssignments.ts @@ -0,0 +1,14 @@ +/// + +// @noImplicitAny: false +////[|let x +////|] +////x ??= 1 +////x ||= "2" +////x &&= true + +verify.codeFix({ + description: "Infer type of 'x' from usage", + index: 0, + newRangeContent: 'let x: string | number | boolean\n', +})