Cherry-pick PR #34679 into release-3.7

Component commits:
e0b98c6eae Do not consider element accesses which are neither statically bindable nor late bound as special assignments
This commit is contained in:
Wesley Wigham
2019-10-23 13:22:52 -07:00
committed by Daniel Rosenwasser
parent 43fb7b44c0
commit 7afaef1067
4 changed files with 31 additions and 3 deletions
+5 -3
View File
@@ -2115,7 +2115,7 @@ namespace ts {
if (expr.operatorToken.kind !== SyntaxKind.EqualsToken || !isAccessExpression(expr.left)) {
return AssignmentDeclarationKind.None;
}
if (isBindableStaticNameExpression(expr.left.expression) && getElementOrPropertyAccessName(expr.left) === "prototype" && isObjectLiteralExpression(getInitializerOfBinaryExpression(expr))) {
if (isBindableStaticNameExpression(expr.left.expression, /*excludeThisKeyword*/ true) && getElementOrPropertyAccessName(expr.left) === "prototype" && isObjectLiteralExpression(getInitializerOfBinaryExpression(expr))) {
// F.prototype = { ... }
return AssignmentDeclarationKind.Prototype;
}
@@ -2183,8 +2183,10 @@ namespace ts {
// exports.name = expr OR module.exports.name = expr OR exports["name"] = expr ...
return AssignmentDeclarationKind.ExportsProperty;
}
// F.G...x = expr
return AssignmentDeclarationKind.Property;
if (isBindableStaticNameExpression(lhs, /*excludeThisKeyword*/ true) || (isElementAccessExpression(lhs) && isDynamicName(lhs) && lhs.expression.kind !== SyntaxKind.ThisKeyword)) {
// F.G...x = expr
return AssignmentDeclarationKind.Property;
}
}
return AssignmentDeclarationKind.None;