Added new types and interfaces for Nodes, tests fixes

This commit is contained in:
sanex3339
2016-07-04 13:47:22 +03:00
parent c6b943dfe5
commit ab7bbd2b9e
16 changed files with 229 additions and 171 deletions
+2 -1
View File
@@ -3,6 +3,7 @@ import * as estraverse from 'estraverse';
import { INode } from './interfaces/nodes/INode';
import { TNodeWithBlockStatement } from "./types/TNodeWithBlockStatement";
import { TStatement } from "./types/TStatement";
import { NodeType } from "./enums/NodeType";
@@ -116,7 +117,7 @@ export class NodeUtils {
Object.defineProperty(node, 'parentNode', {
configurable: true,
enumerable: true,
value: isRootNode ? Nodes.getProgramNode([node]) : parentNode || node,
value: isRootNode ? Nodes.getProgramNode(<TStatement[]>[node]) : parentNode || node,
writable: true
});
+3 -1
View File
@@ -7,6 +7,8 @@ import { IProgramNode } from "./interfaces/nodes/IProgramNode";
import { IPropertyNode } from "./interfaces/nodes/IPropertyNode";
import { IVariableDeclaratorNode } from "./interfaces/nodes/IVariableDeclaratorNode";
import { TStatement } from "./types/TStatement";
import { TNodeWithBlockStatement } from "./types/TNodeWithBlockStatement";
import { NodeType } from "./enums/NodeType";
@@ -16,7 +18,7 @@ export class Nodes {
* @param bodyNode
* @returns IProgramNode
*/
public static getProgramNode (bodyNode: INode[]): IProgramNode {
public static getProgramNode (bodyNode: TStatement[]): IProgramNode {
return {
'type': NodeType.Program,
'body': bodyNode
+3 -1
View File
@@ -1,5 +1,7 @@
import { TStatement } from "../../types/TStatement";
import { INode } from "./INode";
export interface IBlockStatementNode extends INode {
body: INode[];
body: TStatement[];
}
+9
View File
@@ -0,0 +1,9 @@
import { TExpression } from "../../types/TExpression";
import { INode } from "./INode";
import { ISpreadElementNode } from "./ISpreadElementNode";
export interface ICallExpressionNode extends INode {
callee: TExpression;
arguments: TExpression[] | ISpreadElementNode[];
}
+3 -1
View File
@@ -1,5 +1,7 @@
import { TExpression } from "../../types/TExpression";
import { INode } from "./INode";
export interface IExpressionStatementNode extends INode {
expression: any;
expression: TExpression;
}
+3
View File
@@ -1,3 +1,5 @@
import { TExpression } from "../../types/TExpression";
import { IBlockStatementNode } from "./IBlockStatementNode";
import { IIdentifierNode } from "./IIdentifierNode";
import { INode } from "./INode";
@@ -5,6 +7,7 @@ import { INode } from "./INode";
export interface IFunctionNode extends INode {
id: IIdentifierNode;
params: IIdentifierNode[];
defaults?: TExpression[];
body: IBlockStatementNode;
generator: boolean;
expression: boolean;
+1 -1
View File
@@ -3,5 +3,5 @@ import { INode } from "./INode";
export interface ILiteralNode extends INode {
value: boolean|number|string;
raw: string;
'x-verbatim-property': any;
'x-verbatim-property'?: any;
}
+3 -1
View File
@@ -1,5 +1,7 @@
import { TStatement } from "../../types/TStatement";
import { INode } from "./INode";
export interface IProgramNode extends INode {
body: INode[];
body: TStatement[];
}
+7
View File
@@ -0,0 +1,7 @@
import { TExpression } from "../../types/TExpression";
import { INode } from "./INode";
export interface ISpreadElementNode extends INode {
argument: TExpression;
}
+10
View File
@@ -0,0 +1,10 @@
import { IArrowFunctionExpressionNode } from "../interfaces/nodes/IArrowFunctionExpressionNode";
import { ICallExpressionNode } from "../interfaces/nodes/ICallExpressionNode";
import { IFunctionExpressionNode } from "../interfaces/nodes/IFunctionExpressionNode";
import { IIdentifierNode } from "../interfaces/nodes/IIdentifierNode";
import { ILiteralNode } from "../interfaces/nodes/ILiteralNode";
import { IMemberExpressionNode } from "../interfaces/nodes/IMemberExpressionNode";
import { INode } from "../interfaces/nodes/INode";
export type TExpression = INode & (IArrowFunctionExpressionNode | ICallExpressionNode | IFunctionExpressionNode |
IIdentifierNode | ILiteralNode | IMemberExpressionNode);
+8
View File
@@ -0,0 +1,8 @@
import { IExpressionStatementNode } from "../interfaces/nodes/IExpressionStatementNode";
import { IFunctionDeclarationNode } from "../interfaces/nodes/IFunctionDeclarationNode";
import { IIfStatementNode } from "../interfaces/nodes/IIfStatementNode";
import { INode } from "../interfaces/nodes/INode";
import { IVariableDeclarationNode } from "../interfaces/nodes/IVariableDeclarationNode";
export type TStatement = INode & (IExpressionStatementNode | IFunctionDeclarationNode | IIfStatementNode |
IVariableDeclarationNode);