UNPKG

@maniascript/mslint

Version:
47 lines (46 loc) 1.62 kB
// Based on https://github.com/eslint/eslint/blob/main/lib/rules/no-useless-concat.js import {} from '../linter/rule.js'; import { BinaryExpression, BinaryOperator, TemplateTextLiteral, TextLiteral } from '@maniascript/parser'; export const noUselessConcat = { meta: { id: 'no-useless-concat', description: 'Forbid unnecessary concatenation of Text literals', recommended: true }, create(context) { function isConcatenation(node) { return (node instanceof BinaryExpression && node.operator === BinaryOperator['^']); } function getLeft(node) { let left = node.left; while (isConcatenation(left)) { left = left.right; } return left; } function getRight(node) { let right = node.right; while (isConcatenation(right)) { right = right.left; } return right; } function isStringLiteral(node) { return (node instanceof TextLiteral || node instanceof TemplateTextLiteral); } return { 'BinaryExpression:enter': (node) => { if (isConcatenation(node)) { const left = getLeft(node); const right = getRight(node); if (isStringLiteral(left) && isStringLiteral(right)) { context.report(node, 'Forbidden concatenation of Text literals'); } } } }; } };