eslint-plugin-exception-handling
Version:
💣 Lints unhandled functions that might throw errors. For JavaScript/TypeScript eslint.
53 lines (52 loc) • 2.46 kB
JavaScript
import { isIdentifier } from "@typescript-eslint/utils/ast-utils";
import { isArrowFunctionExpression, isBlockStatement, isCallExpression, isExportNamedDeclaration, isExpressionStatement, isFunctionDeclaration, isImportDeclaration, isImportSpecifier, isMemberExpression, isProgram, isVariableDeclaration, isVariableDeclarator, } from "../../src/utils/ast-guards.js";
export const findIdentifiersInChildren = (name, nodes) => {
const identifiers = [];
for (const node of nodes) {
if (isProgram(node)) {
identifiers.push(...findIdentifiersInChildren(name, node.body));
}
else if (isIdentifier(node)) {
if (node.name === name) {
identifiers.push(node);
}
}
else if (isFunctionDeclaration(node)) {
if (node.id) {
identifiers.push(...findIdentifiersInChildren(name, [node.id]));
}
identifiers.push(...findIdentifiersInChildren(name, node.body.body));
}
else if (isImportDeclaration(node)) {
identifiers.push(...findIdentifiersInChildren(name, node.specifiers));
}
else if (isImportSpecifier(node)) {
identifiers.push(...findIdentifiersInChildren(name, [node.local]));
}
else if (isVariableDeclaration(node)) {
identifiers.push(...findIdentifiersInChildren(name, node.declarations));
}
else if (isVariableDeclarator(node)) {
identifiers.push(...findIdentifiersInChildren(name, [node.id]));
}
else if (isBlockStatement(node)) {
identifiers.push(...findIdentifiersInChildren(name, node.body));
}
else if (isExportNamedDeclaration(node) && node.declaration) {
identifiers.push(...findIdentifiersInChildren(name, [node.declaration]));
}
else if (isArrowFunctionExpression(node)) {
identifiers.push(...findIdentifiersInChildren(name, [node.body]));
}
else if (isExpressionStatement(node)) {
identifiers.push(...findIdentifiersInChildren(name, [node.expression]));
}
else if (isCallExpression(node)) {
identifiers.push(...findIdentifiersInChildren(name, [...node.arguments]));
}
else if (isMemberExpression(node)) {
identifiers.push(...findIdentifiersInChildren(name, [node.property, node.object]));
}
}
return identifiers;
};