eslint-plugin-san
Version:
Official ESLint plugin for San
67 lines (58 loc) • 2.11 kB
JavaScript
/**
* @author Toru Nagashima
* @copyright 2017 Toru Nagashima. All rights reserved.
* See LICENSE file in root directory for full license.
*/
;
/* 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);
}
}
);
}
};