NodeUtils.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. "use strict";
  2. let estraverse = require('estraverse');
  3. class NodeUtils {
  4. static getNodeScope(node, deep = 0) {
  5. let scopeNodes = [
  6. 'FunctionDeclaration',
  7. 'FunctionExpression',
  8. 'ArrowFunctionExpression',
  9. 'MethodDefinition'
  10. ];
  11. if (node.parentNode.type === 'Program') {
  12. return node.parentNode;
  13. }
  14. if (scopeNodes.indexOf(node.parentNode.type) < 0) {
  15. return NodeUtils.getNodeScope(node.parentNode, deep);
  16. }
  17. if (deep > 0) {
  18. return NodeUtils.getNodeScope(node.parentNode, --deep);
  19. }
  20. if (node.type !== 'BlockStatement') {
  21. return NodeUtils.getNodeScope(node.parentNode);
  22. }
  23. return node;
  24. }
  25. static getParentNodeWithType(node, types, limitNodeTypes = [], deep = 0) {
  26. if (node.parentNode.type === 'Program' || limitNodeTypes.indexOf(node.parentNode.type) >= 0) {
  27. return node.parentNode;
  28. }
  29. if (types.indexOf(node.parentNode.type) < 0) {
  30. return NodeUtils.getParentNodeWithType(node.parentNode, types, limitNodeTypes, deep);
  31. }
  32. if (deep > 0) {
  33. return NodeUtils.getParentNodeWithType(node.parentNode, types, limitNodeTypes, --deep);
  34. }
  35. return node.parentNode;
  36. }
  37. }
  38. exports.NodeUtils = NodeUtils;