@exadel/eslint-plugin-esl
Version:
Helper ESLint rules to find and migrate ESL (@exadel/esl) library deprecations
28 lines (27 loc) • 1.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.traverseNodes = traverseNodes;
const wrapNode = (node, location = { parent: null, parentKey: null, parentPath: null }) => Object.assign({}, location, { node });
function* traverseNodes(context, root) {
const allVisitorKeys = context.sourceCode.visitorKeys || {};
const queue = [];
root && queue.push(wrapNode(root));
while (queue.length) {
const current = queue.shift();
yield current;
const visitorKeys = allVisitorKeys[current.node.type];
if (!visitorKeys)
continue;
for (const visitorKey of visitorKeys) {
const child = current.node[visitorKey];
if (!child)
continue;
const location = {
parent: current.node,
parentKey: visitorKey,
parentPath: current
};
[].concat(child).forEach((node) => queue.push(wrapNode(node, location)));
}
}
}