mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-23 17:19:37 +02:00
* [eslint-plugin] add rule for throw inside callback code * [monorepo] enable our custom eslint plugins globally * [monorepo] fix running make lint from root * [monorepo] turn throw statements in callback code into callback calls * [monorepo] add eslint-plugin libraries to all the Dockerfiles * [monorepo] install eslint-plugin library at the root level * [linked-url-proxy] add eslint-plugin library into Dockerfile * [latexqc] add our eslint-plugin to eslint config GitOrigin-RevId: b05e3ebbefb62370f2422e83880dd3913815270d
53 lines
1.4 KiB
JavaScript
53 lines
1.4 KiB
JavaScript
const CALLBACK_PARAM_NAMES = new Set(['cb', 'callback', 'done', 'next'])
|
|
|
|
function isCallbackParam(param) {
|
|
return (
|
|
param && param.type === 'Identifier' && CALLBACK_PARAM_NAMES.has(param.name)
|
|
)
|
|
}
|
|
|
|
module.exports = {
|
|
meta: {
|
|
type: 'error',
|
|
docs: {
|
|
description: 'Disallow throw statements inside callback-based functions',
|
|
},
|
|
messages: {
|
|
noThrowInCallback:
|
|
'Pass the error to the callback instead of throwing in callback-based code.',
|
|
},
|
|
},
|
|
create(context) {
|
|
// Stack tracks whether each enclosing function is a callback-style function.
|
|
// A callback-style function is non-async and has a last param named cb/callback/done/next.
|
|
const stack = []
|
|
|
|
function enterFunction(node) {
|
|
const params = node.params
|
|
const isCallback =
|
|
!node.async &&
|
|
params.length > 0 &&
|
|
isCallbackParam(params[params.length - 1])
|
|
stack.push(isCallback)
|
|
}
|
|
|
|
function exitFunction() {
|
|
stack.pop()
|
|
}
|
|
|
|
return {
|
|
FunctionDeclaration: enterFunction,
|
|
'FunctionDeclaration:exit': exitFunction,
|
|
FunctionExpression: enterFunction,
|
|
'FunctionExpression:exit': exitFunction,
|
|
ArrowFunctionExpression: enterFunction,
|
|
'ArrowFunctionExpression:exit': exitFunction,
|
|
ThrowStatement(node) {
|
|
if (stack[stack.length - 1]) {
|
|
context.report({ node, messageId: 'noThrowInCallback' })
|
|
}
|
|
},
|
|
}
|
|
},
|
|
}
|