UNPKG

@masknet/eslint-plugin

Version:
55 lines 1.9 kB
import { closest, isMultiline } from "../../node.js"; import { createRule } from "../../rule.js"; import { quote } from "../../utils.js"; // cspell:ignore quasis export default createRule({ name: 'string/no-simple-template-literal', meta: { type: 'suggestion', fixable: 'code', docs: { description: 'Disallow simple template-literal', recommended: 'stylistic', }, schema: [], messages: { invalid: 'Disallow simple template-literal', }, }, defaultOptions: [], create(context) { return { TemplateLiteral(node) { const fix = getFixer(context.sourceCode, node); if (!fix) return; context.report({ node, messageId: 'invalid', fix }); }, }; }, }); function getFixer(source, node) { if (isNoTemplateExpression(node)) { return (fixer) => { const key = quote(node.quasis[0].value.cooked); const property = closest(node, (property) => property.type === 'Property' && property.key === node); return property ? fixer.replaceText(property, `${key}: ${source.getText(property.value)}`) : fixer.replaceText(node, key); }; } else if (isToString(node)) { return (fixer) => fixer.replaceText(node, source.getText(node.expressions[0])); } return; } function isNoTemplateExpression(node) { return (node.parent?.type !== 'TaggedTemplateExpression' && node.quasis.length === 1 && !isMultiline(node.quasis[0]) && node.expressions.length === 0); } function isToString(node) { return (node.quasis.length === 2 && node.quasis.every(({ value }) => value.cooked === '') && node.expressions.length === 1); } //# sourceMappingURL=no-simple-template-literal.js.map