From 62522a3329d33685d930634f835beea2e973e433 Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Wed, 14 Mar 2018 08:30:51 -0700 Subject: [PATCH 1/2] inferFromUsage: Handle being at an unexpected location --- src/services/codefixes/inferFromUsage.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/services/codefixes/inferFromUsage.ts b/src/services/codefixes/inferFromUsage.ts index 74ad2113dccc7..db587bb92bc08 100644 --- a/src/services/codefixes/inferFromUsage.ts +++ b/src/services/codefixes/inferFromUsage.ts @@ -64,17 +64,21 @@ namespace ts.codefix { return undefined; } + const { parent } = token; switch (errorCode) { // Variable and Property declarations case Diagnostics.Member_0_implicitly_has_an_1_type.code: case Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined.code: - annotateVariableDeclaration(changes, sourceFile, token.parent, program, cancellationToken); - return token.parent as Declaration; + if (isVariableDeclaration(parent) || isPropertyDeclaration(parent) || isPropertySignature(parent)) { + annotateVariableDeclaration(changes, sourceFile, parent, program, cancellationToken); + return parent; + } + return undefined; case Diagnostics.Variable_0_implicitly_has_an_1_type.code: { const symbol = program.getTypeChecker().getSymbolAtLocation(token); - if (symbol && symbol.valueDeclaration) { - annotateVariableDeclaration(changes, sourceFile, symbol.valueDeclaration, program, cancellationToken); + if (symbol && symbol.valueDeclaration && isVariableDeclaration(symbol.valueDeclaration)) { + annotateVariableDeclaration(changes, sourceFile, symbol.valueDeclaration, program, cancellationToken); return symbol.valueDeclaration; } } @@ -95,7 +99,7 @@ namespace ts.codefix { // falls through case Diagnostics.Rest_parameter_0_implicitly_has_an_any_type.code: if (!seenFunctions || addToSeen(seenFunctions, getNodeId(containingFunction))) { - const param = cast(token.parent, isParameter); + const param = cast(parent, isParameter); annotateParameters(changes, param, containingFunction, sourceFile, program, cancellationToken); return param; } From d22b0547ed29648939cb1dacbc21fcc1db41b87b Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Wed, 14 Mar 2018 10:37:41 -0700 Subject: [PATCH 2/2] add comment --- src/services/codefixes/inferFromUsage.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/codefixes/inferFromUsage.ts b/src/services/codefixes/inferFromUsage.ts index db587bb92bc08..a79fa5acc6611 100644 --- a/src/services/codefixes/inferFromUsage.ts +++ b/src/services/codefixes/inferFromUsage.ts @@ -69,7 +69,7 @@ namespace ts.codefix { // Variable and Property declarations case Diagnostics.Member_0_implicitly_has_an_1_type.code: case Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined.code: - if (isVariableDeclaration(parent) || isPropertyDeclaration(parent) || isPropertySignature(parent)) { + if (isVariableDeclaration(parent) || isPropertyDeclaration(parent) || isPropertySignature(parent)) { // handle bad location annotateVariableDeclaration(changes, sourceFile, parent, program, cancellationToken); return parent; }