Added new utils method getRootStatementOfNode

This commit is contained in:
sanex3339
2018-05-25 11:15:45 +03:00
parent 4b74976cc7
commit 850cd68804
8 changed files with 553 additions and 420 deletions
+22
View File
@@ -93,6 +93,28 @@ export class NodeUtils {
return NodeUtils.getSiblingStatementByOffset(statement, -1);
}
/**
* @param {Node} node
* @returns {Statement}
*/
public static getRootStatementOfNode (node: ESTree.Node): ESTree.Statement {
if (NodeGuards.isProgramNode(node)) {
throw new Error('Unable to find root statement for `Program` node');
}
const parentNode: ESTree.Node | undefined = node.parentNode;
if (!parentNode) {
throw new ReferenceError('`parentNode` property of given node is `undefined`');
}
if (!NodeGuards.isNodeHasScope(parentNode)) {
return NodeUtils.getRootStatementOfNode(parentNode);
}
return <ESTree.Statement>node;
}
/**
* @param {NodeGuards} node
* @returns {TNodeWithScope}