github-pages-deploy-action/node_modules/eslint-plugin-github/lib/rules/js-class-name.js

54 lines
1.4 KiB
JavaScript
Raw Normal View History

2020-03-07 11:45:40 +08:00
module.exports = {
meta: {
docs: {},
schema: []
},
create(context) {
var allJsClassNameRegexp = /\bjs-[_a-zA-Z0-9-]*/g
var validJsClassNameRegexp = /^js(-[a-z0-9]+)+$/g
var endWithJsClassNameRegexp = /\bjs-[_a-zA-Z0-9-]*$/g
function checkStringFormat(node, str) {
var matches = str.match(allJsClassNameRegexp) || []
matches.forEach(function(match) {
if (!match.match(validJsClassNameRegexp)) {
context.report(node, 'js- class names should be lowercase and only contain dashes.')
}
})
}
function checkStringEndsWithJSClassName(node, str) {
if (str.match(endWithJsClassNameRegexp)) {
context.report(node, 'js- class names should be statically defined.')
}
}
return {
Literal(node) {
if (typeof node.value === 'string') {
checkStringFormat(node, node.value)
if (
node.parent &&
node.parent.type === 'BinaryExpression' &&
node.parent.operator === '+' &&
node.parent.left.value
) {
checkStringEndsWithJSClassName(node.parent.left, node.parent.left.value)
}
}
},
TemplateLiteral(node) {
node.quasis.forEach(function(quasi) {
checkStringFormat(quasi, quasi.value.raw)
if (quasi.tail === false) {
checkStringEndsWithJSClassName(quasi, quasi.value.raw)
}
})
}
}
}
}