From fbd7c137d5baae4ee68db7e384ef522749e2bcfd Mon Sep 17 00:00:00 2001 From: Teddy Katz Date: Thu, 26 Jan 2017 21:30:23 -0500 Subject: [PATCH] Update: ensure operator-assignment handles exponentiation operators (#7970) --- lib/rules/operator-assignment.js | 2 +- tests/lib/rules/operator-assignment.js | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/rules/operator-assignment.js b/lib/rules/operator-assignment.js index e003478c7bc..c5b82f5b0f4 100644 --- a/lib/rules/operator-assignment.js +++ b/lib/rules/operator-assignment.js @@ -27,7 +27,7 @@ function isCommutativeOperatorWithShorthand(operator) { * a shorthand form. */ function isNonCommutativeOperatorWithShorthand(operator) { - return ["+", "-", "/", "%", "<<", ">>", ">>>"].indexOf(operator) >= 0; + return ["+", "-", "/", "%", "<<", ">>", ">>>", "**"].indexOf(operator) >= 0; } //------------------------------------------------------------------------------ diff --git a/tests/lib/rules/operator-assignment.js b/tests/lib/rules/operator-assignment.js index 84d28c653d7..ed394e315e7 100644 --- a/tests/lib/rules/operator-assignment.js +++ b/tests/lib/rules/operator-assignment.js @@ -16,7 +16,7 @@ const rule = require("../../../lib/rules/operator-assignment"), // Tests //------------------------------------------------------------------------------ -const ruleTester = new RuleTester(); +const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 7 } }); const EXPECTED_OPERATOR_ASSIGNMENT = [{ message: "Assignment can be replaced with operator assignment.", type: "AssignmentExpression" }]; const UNEXPECTED_OPERATOR_ASSIGNMENT = [{ message: "Unexpected operator assignment shorthand.", type: "AssignmentExpression" }]; @@ -40,6 +40,7 @@ ruleTester.run("operator-assignment", rule, { "x >>= x >> y", "x >>>= y", "x &= y", + "x **= y", "x ^= y ^ z", "x |= x | y", "x = x && y", @@ -66,6 +67,11 @@ ruleTester.run("operator-assignment", rule, { code: "x = x + y", options: ["never"] }, + { + code: "x = x ** y", + options: ["never"] + }, + "x = y ** x", "x = x < y", "x = x > y", "x = x <= y", @@ -184,6 +190,15 @@ ruleTester.run("operator-assignment", rule, { output: "(foo.bar) = (foo.bar) ^ ((((((((((((((((baz))))))))))))))))", options: ["never"], errors: UNEXPECTED_OPERATOR_ASSIGNMENT + }, { + code: "foo = foo ** bar", + output: "foo **= bar", + errors: EXPECTED_OPERATOR_ASSIGNMENT + }, { + code: "foo **= bar", + output: "foo = foo ** bar", + options: ["never"], + errors: UNEXPECTED_OPERATOR_ASSIGNMENT }] });