UNPKG

eslint-plugin-san

Version:

Official ESLint plugin for San

67 lines (58 loc) 2.11 kB
/** * @author Toru Nagashima * @copyright 2017 Toru Nagashima. All rights reserved. * See LICENSE file in root directory for full license. */ 'use strict'; /* eslint-disable */ // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ const utils = require('../utils'); // ------------------------------------------------------------------------------ // Rule Definition // ------------------------------------------------------------------------------ module.exports = { meta: { type: 'suggestion', docs: { description: 'enforce end tag style', categories: ['strongly-recommended'], url: 'https://ecomfe.github.io/eslint-plugin-san/rules/html-end-tags.html' }, fixable: 'code', schema: [] }, /** @param {RuleContext} context */ create(context) { let hasInvalidEOF = false; return utils.defineTemplateBodyVisitor( context, { VElement(node) { if (hasInvalidEOF) { return; } const name = node.name; const isVoid = utils.isHtmlVoidElementName(name); const isSelfClosing = node.startTag.selfClosing; const hasEndTag = node.endTag != null; if (!isVoid && !hasEndTag && !isSelfClosing) { context.report({ node: node.startTag, loc: node.startTag.loc, message: "'<{{name}}>' should have end tag.", data: {name}, fix: fixer => fixer.insertTextAfter(node, `</${name}>`) }); } } }, { Program(node) { hasInvalidEOF = utils.hasInvalidEOF(node); } } ); } };