function verify(node) {
			if (
				node.operator !== "=" ||
				node.right.type !== "BinaryExpression"
			) {
				return;
			}

			const left = node.left;
			const expr = node.right;
			const operator = expr.operator;

			if (
				isCommutativeOperatorWithShorthand(operator) ||
				isNonCommutativeOperatorWithShorthand(operator)
			) {
				const replacementOperator = `${operator}=`;

				if (astUtils.isSameReference(left, expr.left, true)) {
					context.report({
						node,
						messageId: "replaced",
						data: { operator: replacementOperator },
						fix(fixer) {
							if (canBeFixed(left) && canBeFixed(expr.left)) {
								const equalsToken = getOperatorToken(node);
								const operatorToken = getOperatorToken(expr);
								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}${replacementOperator}${rightText}`,
								);
							}
							return null;
						},
					});
				} else if (
					astUtils.isSameReference(left, expr.right, true) &&
					isCommutativeOperatorWithShorthand(operator)
				) {
					/*
					 * This case can't be fixed safely.
					 * If `a` and `b` both have custom valueOf() behavior, then fixing `a = b * a` to `a *= b` would
					 * change the execution order of the valueOf() functions.
					 */
					context.report({
						node,
						messageId: "replaced",
						data: { operator: replacementOperator },
					});
				}
			}
		}
Ensures that an assignment uses the shorthand form where possible.
@param {ASTNode} node An AssignmentExpression node.
@returns {void}