From cf007461b923fa5b826d29daa9ad1d124182d871 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 18 Nov 2015 01:41:41 -0800 Subject: [PATCH 1/3] Fixed invalid code for binding expressions. --- scripts/tslint/preferConstRule.ts | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/scripts/tslint/preferConstRule.ts b/scripts/tslint/preferConstRule.ts index e4ffa396fb7..c14264ed7af 100644 --- a/scripts/tslint/preferConstRule.ts +++ b/scripts/tslint/preferConstRule.ts @@ -106,11 +106,23 @@ class PreferConstWalker extends Lint.RuleWalker { if (node.kind === ts.SyntaxKind.ObjectLiteralExpression) { const pattern = node as ts.ObjectLiteralExpression; for (const element of pattern.properties) { - if (element.name.kind === ts.SyntaxKind.Identifier) { - this.markAssignment(element.name as ts.Identifier); + const kind = element.kind; + + if (kind === ts.SyntaxKind.ShorthandPropertyAssignment) { + this.markAssignment((element as ts.ShorthandPropertyAssignment).name); } - else if (isBindingPattern(element.name)) { - this.visitBindingPatternIdentifiers(element.name as ts.BindingPattern); + else if (kind === ts.SyntaxKind.PropertyAssignment) { + const rhs = (element as ts.PropertyAssignment).initializer; + + if (rhs.kind === ts.SyntaxKind.Identifier) { + this.markAssignment(rhs as ts.Identifier); + } + else if (rhs.kind === ts.SyntaxKind.ObjectLiteralExpression || rhs.kind === ts.SyntaxKind.ArrayLiteralExpression) { + this.visitBindingLiteralExpression(rhs as ts.ObjectLiteralExpression | ts.ArrayLiteralExpression); + } + else { + // Should be an error, but do nothing for now. + } } } } From 15d689cdcdddb0b926d3e96249cde6f1abe7105c Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 18 Nov 2015 01:46:17 -0800 Subject: [PATCH 2/3] Simplify simplify simplify. --- scripts/tslint/preferConstRule.ts | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/scripts/tslint/preferConstRule.ts b/scripts/tslint/preferConstRule.ts index c14264ed7af..a4606481079 100644 --- a/scripts/tslint/preferConstRule.ts +++ b/scripts/tslint/preferConstRule.ts @@ -112,17 +112,10 @@ class PreferConstWalker extends Lint.RuleWalker { this.markAssignment((element as ts.ShorthandPropertyAssignment).name); } else if (kind === ts.SyntaxKind.PropertyAssignment) { - const rhs = (element as ts.PropertyAssignment).initializer; - - if (rhs.kind === ts.SyntaxKind.Identifier) { - this.markAssignment(rhs as ts.Identifier); - } - else if (rhs.kind === ts.SyntaxKind.ObjectLiteralExpression || rhs.kind === ts.SyntaxKind.ArrayLiteralExpression) { - this.visitBindingLiteralExpression(rhs as ts.ObjectLiteralExpression | ts.ArrayLiteralExpression); - } - else { - // Should be an error, but do nothing for now. - } + this.visitLHSExpressions((element as ts.PropertyAssignment).initializer); + } + else { + // Should we throw an exception? } } } From cbb61654fbe95c0d77e7a0ac6c3ba3080ee705c4 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 18 Nov 2015 01:52:08 -0800 Subject: [PATCH 3/3] Small refactorings. --- scripts/tslint/preferConstRule.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/scripts/tslint/preferConstRule.ts b/scripts/tslint/preferConstRule.ts index a4606481079..2b5b5550c06 100644 --- a/scripts/tslint/preferConstRule.ts +++ b/scripts/tslint/preferConstRule.ts @@ -85,12 +85,12 @@ class PreferConstWalker extends Lint.RuleWalker { visitBinaryExpression(node: ts.BinaryExpression) { if (isAssignmentOperator(node.operatorToken.kind)) { - this.visitLHSExpressions(node.left); + this.visitLeftHandSideExpression(node.left); } super.visitBinaryExpression(node); } - private visitLHSExpressions(node: ts.Expression) { + private visitLeftHandSideExpression(node: ts.Expression) { while (node.kind === ts.SyntaxKind.ParenthesizedExpression) { node = (node as ts.ParenthesizedExpression).expression; } @@ -112,7 +112,7 @@ class PreferConstWalker extends Lint.RuleWalker { this.markAssignment((element as ts.ShorthandPropertyAssignment).name); } else if (kind === ts.SyntaxKind.PropertyAssignment) { - this.visitLHSExpressions((element as ts.PropertyAssignment).initializer); + this.visitLeftHandSideExpression((element as ts.PropertyAssignment).initializer); } else { // Should we throw an exception? @@ -122,7 +122,7 @@ class PreferConstWalker extends Lint.RuleWalker { else if (node.kind === ts.SyntaxKind.ArrayLiteralExpression) { const pattern = node as ts.ArrayLiteralExpression; for (const element of pattern.elements) { - this.visitLHSExpressions(element); + this.visitLeftHandSideExpression(element); } } } @@ -150,7 +150,7 @@ class PreferConstWalker extends Lint.RuleWalker { private visitAnyUnaryExpression(node: ts.PrefixUnaryExpression | ts.PostfixUnaryExpression) { if (node.operator === ts.SyntaxKind.PlusPlusToken || node.operator === ts.SyntaxKind.MinusMinusToken) { - this.visitLHSExpressions(node.operand); + this.visitLeftHandSideExpression(node.operand); } } @@ -216,12 +216,12 @@ class PreferConstWalker extends Lint.RuleWalker { } } - private collectNameIdentifiers(value: ts.VariableDeclaration, node: ts.Identifier | ts.BindingPattern, table: ts.Map) { + private collectNameIdentifiers(declaration: ts.VariableDeclaration, node: ts.Identifier | ts.BindingPattern, table: ts.Map) { if (node.kind === ts.SyntaxKind.Identifier) { - table[(node as ts.Identifier).text] = {declaration: value, usages: 0}; + table[(node as ts.Identifier).text] = { declaration, usages: 0 }; } else { - this.collectBindingPatternIdentifiers(value, node as ts.BindingPattern, table); + this.collectBindingPatternIdentifiers(declaration, node as ts.BindingPattern, table); } }