UNPKG

@yusufkandemir/eslint-plugin-lodash-template

Version:

ESLint plugin for John Resig-style micro template, Lodash's template, Underscore's template and EJS.

83 lines (75 loc) 2.68 kB
"use strict"; const utils = require("../utils"); const { getSourceCode } = require("eslint-compat-utils"); module.exports = { meta: { docs: { description: 'disallow spacing around equal signs in attribute. (ex. :ok: `<div class="item">` :ng: `<div class = "item">`)', category: "recommended-with-html", url: "https://ota-meshi.github.io/eslint-plugin-lodash-template/rules/no-space-attribute-equal-sign.html", }, fixable: "whitespace", messages: { unexpected: "Equal signs in must not be spaced.", }, schema: [], type: "layout", }, create(context) { const sourceCode = getSourceCode(context); if (!sourceCode.parserServices.getMicroTemplateService) { return {}; } if (!utils.isHtmlFile(context.getFilename())) { return {}; } const microTemplateService = sourceCode.parserServices.getMicroTemplateService(); /** * Reports an AST node as a rule violation * @param {ASTNode} node - The node to report * @returns {void} */ function report(node) { const eqToken = node.eqToken; const keyToken = node.keyToken; const valueToken = node.valueToken; context.report({ node: eqToken, messageId: "unexpected", fix(fixer) { const range = [ keyToken.range[1], valueToken ? valueToken.range[0] : eqToken.range[1], ]; return fixer.replaceTextRange(range, "="); }, }); } return { "Program:exit"() { microTemplateService.traverseDocumentNodes({ HTMLAttribute(node) { const eqToken = node.eqToken; if (!eqToken) { return; } const keyToken = node.keyToken; if (keyToken.range[1] < eqToken.range[0]) { report(node); return; } const valueToken = node.valueToken; if ( valueToken && eqToken.range[1] < valueToken.range[0] ) { report(node); } }, }); }, }; }, };