eslint-plugin-complete
Version:
An ESLint plugin that contains useful rules.
50 lines (49 loc) • 1.91 kB
JavaScript
import { ESLintUtils } from "@typescript-eslint/utils";
import ts from "typescript";
import { createRule } from "../utils.js";
export const preferPlusplus = createRule({
name: "prefer-plusplus",
meta: {
type: "problem",
docs: {
description: 'Require "++" or "--" operators instead of assignment operators where applicable',
recommended: true,
requiresTypeChecking: false,
},
schema: [],
messages: {
plusPlus: 'Use "++" instead, as it is more concise and easier to read.',
minusMinus: 'Use "--" instead, as it is more concise and easier to read.',
},
fixable: "code",
},
defaultOptions: [],
create(context) {
const parserServices = ESLintUtils.getParserServices(context);
return {
AssignmentExpression(node) {
if (node.operator !== "+=" && node.operator !== "-=") {
return;
}
const tsNodeRight = parserServices.esTreeNodeToTSNodeMap.get(node.right);
if (!ts.isNumericLiteral(tsNodeRight)) {
return;
}
if (tsNodeRight.getText() !== "1") {
return;
}
const messageId = node.operator === "+=" ? "plusPlus" : "minusMinus";
context.report({
loc: node.loc,
messageId,
fix(fixer) {
const tsNodeLeft = parserServices.esTreeNodeToTSNodeMap.get(node.left);
const newOperator = node.operator === "+=" ? "++" : "--";
const newExpression = tsNodeLeft.getText() + newOperator;
return fixer.replaceText(node, newExpression);
},
});
},
};
},
});