mirror of
https://github.com/github/codeql-action.git
synced 2026-01-01 12:10:20 +08:00
97 lines
3.0 KiB
JavaScript
97 lines
3.0 KiB
JavaScript
'use strict'
|
|
|
|
const message = 'English text in string literals is not allowed'
|
|
|
|
function isEnglish(value) {
|
|
return typeof value === 'string' && /^[A-Z][a-z]+\s/.test(value)
|
|
}
|
|
|
|
function isConsole(node) {
|
|
return (
|
|
node.callee.type === 'MemberExpression' &&
|
|
node.callee.object.name === 'console'
|
|
)
|
|
}
|
|
|
|
function isInvariant(node) {
|
|
return node.callee.type === 'Identifier' && node.callee.name === 'invariant'
|
|
}
|
|
|
|
function isSuite(node) {
|
|
return node.callee.type === 'Identifier' && node.callee.name === 'suite'
|
|
}
|
|
|
|
function isTest(node) {
|
|
return node.callee.type === 'Identifier' && node.callee.name === 'test'
|
|
}
|
|
|
|
function isAssert(node) {
|
|
const direct =
|
|
node.callee.type === 'Identifier' && node.callee.name === 'assert'
|
|
const member =
|
|
node.callee.type === 'MemberExpression' &&
|
|
node.callee.object.name === 'assert'
|
|
return direct || member
|
|
}
|
|
|
|
module.exports = function(context) {
|
|
return {
|
|
LogicalExpression: function(node) {
|
|
if (node.right.type === 'Literal' && isEnglish(node.right.value)) {
|
|
context.report({node: node.right, message})
|
|
} else if (node.right.type === 'TemplateLiteral') {
|
|
if (node.right.quasis.some(el => isEnglish(el.value.raw))) {
|
|
context.report({node: node.right, message})
|
|
}
|
|
}
|
|
},
|
|
AssignmentExpression: function(node) {
|
|
if (node.right.type === 'Literal' && isEnglish(node.right.value)) {
|
|
context.report({node: node.right, message})
|
|
} else if (node.right.type === 'TemplateLiteral') {
|
|
if (node.right.quasis.some(el => isEnglish(el.value.raw))) {
|
|
context.report({node: node.right, message})
|
|
}
|
|
}
|
|
},
|
|
CallExpression: function(node) {
|
|
if (isConsole(node) || isInvariant(node)) return
|
|
if (isSuite(node) || isTest(node) || isAssert(node)) return
|
|
|
|
for (const arg of node.arguments) {
|
|
if (arg.type === 'Literal' && isEnglish(arg.value)) {
|
|
context.report({node: arg, message})
|
|
} else if (arg.type === 'TemplateLiteral') {
|
|
if (arg.quasis.some(el => isEnglish(el.value.raw))) {
|
|
context.report({node: arg, message})
|
|
}
|
|
}
|
|
}
|
|
},
|
|
ReturnStatement: function(node) {
|
|
if (!node.argument) return
|
|
|
|
if (node.argument.type === 'Literal' && isEnglish(node.argument.value)) {
|
|
context.report({node: node.argument, message})
|
|
} else if (node.argument.type === 'TemplateLiteral') {
|
|
if (node.argument.quasis.some(el => isEnglish(el.value.raw))) {
|
|
context.report({node: node.argument, message})
|
|
}
|
|
}
|
|
},
|
|
VariableDeclarator: function(node) {
|
|
if (!node.init) return
|
|
|
|
if (node.init.type === 'Literal' && isEnglish(node.init.value)) {
|
|
context.report({node: node.init, message})
|
|
} else if (node.init.type === 'TemplateLiteral') {
|
|
if (node.init.quasis.some(el => isEnglish(el.value.raw))) {
|
|
context.report({node: node.init, message})
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports.schema = []
|