refakts
Version:
TypeScript refactoring tool built for AI coding agents to perform precise refactoring operations via command line instead of requiring complete code regeneration.
41 lines • 1.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ExpressionAnalyzer = void 0;
const ts_morph_1 = require("ts-morph");
class ExpressionAnalyzer {
needsParentheses(node) {
if (!ts_morph_1.Node.isBinaryExpression(node)) {
return false;
}
return this.isSimpleAdditionOrSubtraction(node);
}
formatWithParentheses(initializer, _context) {
const initializerText = initializer.getText();
if (this.needsParentheses(initializer)) {
return `(${initializerText})`;
}
return initializerText;
}
isSimpleAdditionOrSubtraction(node) {
const binaryExpr = node.asKindOrThrow(ts_morph_1.SyntaxKind.BinaryExpression);
if (!this.isAdditionOrSubtraction(binaryExpr)) {
return false;
}
return this.hasSimpleOperands(binaryExpr);
}
isAdditionOrSubtraction(binaryExpr) {
const operator = binaryExpr.getOperatorToken().getKind();
return operator === ts_morph_1.SyntaxKind.PlusToken || operator === ts_morph_1.SyntaxKind.MinusToken;
}
hasSimpleOperands(binaryExpr) {
const left = binaryExpr.getLeft();
const right = binaryExpr.getRight();
return this.areSimpleOperands(left, right);
}
areSimpleOperands(left, right) {
return (ts_morph_1.Node.isIdentifier(left) || ts_morph_1.Node.isNumericLiteral(left)) &&
(ts_morph_1.Node.isIdentifier(right) || ts_morph_1.Node.isNumericLiteral(right));
}
}
exports.ExpressionAnalyzer = ExpressionAnalyzer;
//# sourceMappingURL=expression-analyzer.js.map