sanex
2020-09-15 16:49:18 +03:00
parent 47263a4c1c
commit 4c1a949fd3
19 changed files with 148 additions and 234 deletions
+2 -27
View File
@@ -1,7 +1,7 @@
import * as ESTree from 'estree';
import { TNodeWithLexicalScope } from '../types/node/TNodeWithLexicalScope';
import { TNodeWithLexicalScopeAndStatements } from '../types/node/TNodeWithLexicalScopeAndStatements';
import { TNodeWithLexicalScopeStatements } from '../types/node/TNodeWithLexicalScopeStatements';
import { TNodeWithStatements } from '../types/node/TNodeWithStatements';
import { NodeType } from '../enums/node/NodeType';
@@ -271,31 +271,6 @@ export class NodeGuards {
return NodeGuards.isNodeWithLexicalScope(node) || NodeGuards.isBlockStatementNode(node);
}
/**
* @param {Node} node
* @returns {node is TNodeWithLexicalScopeAndStatements}
*/
public static isNodeWithLexicalScopeAndStatements (node: ESTree.Node): node is TNodeWithLexicalScopeAndStatements {
if (!NodeGuards.isNodeWithLexicalScope(node)) {
return false;
}
const lexicalScopeBodyNode: ESTree.Program | ESTree.BlockStatement | ESTree.Expression =
NodeGuards.isProgramNode(node)
? node
: node.body;
// invalid lexical scope node
if (
!lexicalScopeBodyNode.parentNode
|| !NodeGuards.isNodeWithLexicalScopeStatements(lexicalScopeBodyNode, lexicalScopeBodyNode.parentNode)
) {
return false;
}
return true;
}
/**
* @param {Node} node
* @param {Node} parentNode
@@ -304,7 +279,7 @@ export class NodeGuards {
public static isNodeWithLexicalScopeStatements (
node: ESTree.Node,
parentNode: ESTree.Node
): node is TNodeWithStatements {
): node is TNodeWithLexicalScopeStatements {
return NodeGuards.isProgramNode(node)
|| (NodeGuards.isBlockStatementNode(node) && NodeGuards.nodesWithLexicalStatements.includes(parentNode.type));
}