mirror of
https://github.com/joelwmale/webhook-action.git
synced 2024-11-29 19:05:22 +01:00
53 lines
1.4 KiB
JavaScript
53 lines
1.4 KiB
JavaScript
module.exports = {
|
|
meta: {
|
|
docs: {},
|
|
schema: []
|
|
},
|
|
|
|
create(context) {
|
|
const allJsClassNameRegexp = /\bjs-[_a-zA-Z0-9-]*/g
|
|
const validJsClassNameRegexp = /^js(-[a-z0-9]+)+$/g
|
|
const endWithJsClassNameRegexp = /\bjs-[_a-zA-Z0-9-]*$/g
|
|
|
|
function checkStringFormat(node, str) {
|
|
const matches = str.match(allJsClassNameRegexp) || []
|
|
for (const match of matches) {
|
|
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) {
|
|
for (const quasi of node.quasis) {
|
|
checkStringFormat(quasi, quasi.value.raw)
|
|
|
|
if (quasi.tail === false) {
|
|
checkStringEndsWithJSClassName(quasi, quasi.value.raw)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|