summaryrefslogtreecommitdiff
path: root/tools/node_modules/eslint/lib/rules/operator-assignment.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/node_modules/eslint/lib/rules/operator-assignment.js')
-rw-r--r--tools/node_modules/eslint/lib/rules/operator-assignment.js23
1 files changed, 22 insertions, 1 deletions
diff --git a/tools/node_modules/eslint/lib/rules/operator-assignment.js b/tools/node_modules/eslint/lib/rules/operator-assignment.js
index 63982cf392..e294668b42 100644
--- a/tools/node_modules/eslint/lib/rules/operator-assignment.js
+++ b/tools/node_modules/eslint/lib/rules/operator-assignment.js
@@ -150,6 +150,11 @@ module.exports = {
const leftText = sourceCode.getText().slice(node.range[0], equalsToken.range[0]);
const rightText = sourceCode.getText().slice(operatorToken.range[1], node.right.range[1]);
+ // Check for comments that would be removed.
+ if (sourceCode.commentsExistBetween(equalsToken, operatorToken)) {
+ return null;
+ }
+
return fixer.replaceText(node, `${leftText}${expr.operator}=${rightText}`);
}
return null;
@@ -182,11 +187,17 @@ module.exports = {
messageId: "unexpected",
fix(fixer) {
if (canBeFixed(node.left)) {
+ const firstToken = sourceCode.getFirstToken(node);
const operatorToken = getOperatorToken(node);
const leftText = sourceCode.getText().slice(node.range[0], operatorToken.range[0]);
const newOperator = node.operator.slice(0, -1);
let rightText;
+ // Check for comments that would be duplicated.
+ if (sourceCode.commentsExistBetween(firstToken, operatorToken)) {
+ return null;
+ }
+
// If this change would modify precedence (e.g. `foo *= bar + 1` => `foo = foo * (bar + 1)`), parenthesize the right side.
if (
astUtils.getPrecedence(node.right) <= astUtils.getPrecedence({ type: "BinaryExpression", operator: newOperator }) &&
@@ -194,7 +205,17 @@ module.exports = {
) {
rightText = `${sourceCode.text.slice(operatorToken.range[1], node.right.range[0])}(${sourceCode.getText(node.right)})`;
} else {
- rightText = sourceCode.text.slice(operatorToken.range[1], node.range[1]);
+ const firstRightToken = sourceCode.getFirstToken(node.right);
+ let rightTextPrefix = "";
+
+ if (
+ operatorToken.range[1] === firstRightToken.range[0] &&
+ !astUtils.canTokensBeAdjacent(newOperator, firstRightToken)
+ ) {
+ rightTextPrefix = " "; // foo+=+bar -> foo= foo+ +bar
+ }
+
+ rightText = `${rightTextPrefix}${sourceCode.text.slice(operatorToken.range[1], node.range[1])}`;
}
return fixer.replaceText(node, `${leftText}= ${leftText}${newOperator}${rightText}`);