Flow opaque type 6.x backport (#6081)

* Flow opaque type backport

* Add tests for strip types, comments, and babel-generator

* Fix failing tests, run scripts

* Bump babylon to 6.18.0
This commit is contained in:
jbrown215
2017-08-15 16:44:15 -04:00
committed by Henry Zhu
parent 2dba910b9e
commit c28465e03e
16 changed files with 353 additions and 78 deletions

View File

@@ -149,8 +149,8 @@ declare class BabelNodeFunctionDeclaration extends BabelNode {
body: BabelNodeBlockStatement;
generator?: boolean;
async?: boolean;
returnType: any;
typeParameters: any;
returnType?: any;
typeParameters?: any;
}
declare class BabelNodeFunctionExpression extends BabelNode {
@@ -160,14 +160,15 @@ declare class BabelNodeFunctionExpression extends BabelNode {
body: BabelNodeBlockStatement;
generator?: boolean;
async?: boolean;
returnType: any;
typeParameters: any;
returnType?: any;
typeParameters?: any;
}
declare class BabelNodeIdentifier extends BabelNode {
type: "Identifier";
name: any;
typeAnnotation: any;
decorators?: any;
typeAnnotation?: any;
}
declare class BabelNodeIfStatement extends BabelNode {
@@ -244,20 +245,20 @@ declare class BabelNodeObjectMethod extends BabelNode {
kind?: any;
computed?: boolean;
key: any;
decorators: any;
decorators?: any;
body: BabelNodeBlockStatement;
generator?: boolean;
async?: boolean;
params: any;
returnType: any;
typeParameters: any;
returnType?: any;
typeParameters?: any;
}
declare class BabelNodeObjectProperty extends BabelNode {
type: "ObjectProperty";
computed?: boolean;
key: any;
value: BabelNodeExpression;
value: BabelNodeExpression | BabelNodePattern | BabelNodeRestElement;
shorthand?: boolean;
decorators?: any;
}
@@ -265,6 +266,7 @@ declare class BabelNodeObjectProperty extends BabelNode {
declare class BabelNodeRestElement extends BabelNode {
type: "RestElement";
argument: BabelNodeLVal;
decorators?: any;
typeAnnotation: any;
}
@@ -301,7 +303,7 @@ declare class BabelNodeThrowStatement extends BabelNode {
declare class BabelNodeTryStatement extends BabelNode {
type: "TryStatement";
body: BabelNodeBlockStatement;
body?: ?BabelNodeBlockStatement;
handler?: any;
finalizer?: ?BabelNodeBlockStatement;
block: any;
@@ -349,11 +351,13 @@ declare class BabelNodeAssignmentPattern extends BabelNode {
type: "AssignmentPattern";
left: BabelNodeIdentifier;
right: BabelNodeExpression;
decorators?: any;
}
declare class BabelNodeArrayPattern extends BabelNode {
type: "ArrayPattern";
elements: any;
decorators?: any;
typeAnnotation: any;
}
@@ -362,7 +366,8 @@ declare class BabelNodeArrowFunctionExpression extends BabelNode {
params: any;
body: BabelNodeBlockStatement | BabelNodeExpression;
async?: boolean;
returnType: any;
returnType?: any;
typeParameters?: any;
}
declare class BabelNodeClassBody extends BabelNode {
@@ -376,9 +381,9 @@ declare class BabelNodeClassDeclaration extends BabelNode {
body: BabelNodeClassBody;
superClass?: ?BabelNodeExpression;
decorators: any;
mixins: any;
typeParameters: any;
superTypeParameters: any;
mixins?: any;
typeParameters?: any;
superTypeParameters?: any;
}
declare class BabelNodeClassExpression extends BabelNode {
@@ -387,9 +392,9 @@ declare class BabelNodeClassExpression extends BabelNode {
body: BabelNodeClassBody;
superClass?: ?BabelNodeExpression;
decorators: any;
mixins: any;
typeParameters: any;
superTypeParameters: any;
mixins?: any;
typeParameters?: any;
superTypeParameters?: any;
}
declare class BabelNodeExportAllDeclaration extends BabelNode {
@@ -412,8 +417,7 @@ declare class BabelNodeExportNamedDeclaration extends BabelNode {
declare class BabelNodeExportSpecifier extends BabelNode {
type: "ExportSpecifier";
local: BabelNodeIdentifier;
imported: BabelNodeIdentifier;
exported: any;
exported: BabelNodeIdentifier;
}
declare class BabelNodeForOfStatement extends BabelNode {
@@ -443,6 +447,7 @@ declare class BabelNodeImportSpecifier extends BabelNode {
type: "ImportSpecifier";
local: BabelNodeIdentifier;
imported: BabelNodeIdentifier;
importKind?: null | "type" | "typeof";
}
declare class BabelNodeMetaProperty extends BabelNode {
@@ -460,14 +465,15 @@ declare class BabelNodeClassMethod extends BabelNode {
body: BabelNodeBlockStatement;
generator?: boolean;
async?: boolean;
decorators: any;
returnType: any;
typeParameters: any;
decorators?: any;
returnType?: any;
typeParameters?: any;
}
declare class BabelNodeObjectPattern extends BabelNode {
type: "ObjectPattern";
properties: any;
decorators?: any;
typeAnnotation: any;
}
@@ -533,6 +539,7 @@ declare class BabelNodeClassImplements extends BabelNode {
declare class BabelNodeClassProperty extends BabelNode {
type: "ClassProperty";
computed?: boolean;
key: any;
value: any;
typeAnnotation: any;
@@ -576,6 +583,13 @@ declare class BabelNodeDeclareTypeAlias extends BabelNode {
right: any;
}
declare class BabelNodeDeclareOpaqueType extends BabelNode {
type: "DeclareOpaqueType";
id: any;
typeParameters: any;
supertype: any;
}
declare class BabelNodeDeclareVariable extends BabelNode {
type: "DeclareVariable";
id: any;
@@ -627,6 +641,10 @@ declare class BabelNodeMixedTypeAnnotation extends BabelNode {
type: "MixedTypeAnnotation";
}
declare class BabelNodeEmptyTypeAnnotation extends BabelNode {
type: "EmptyTypeAnnotation";
}
declare class BabelNodeNullableTypeAnnotation extends BabelNode {
type: "NullableTypeAnnotation";
typeAnnotation: any;
@@ -669,6 +687,14 @@ declare class BabelNodeTypeAlias extends BabelNode {
right: any;
}
declare class BabelNodeOpaqueType extends BabelNode {
type: "OpaqueType";
id: any;
typeParameters: any;
impltype: any;
supertype: any;
}
declare class BabelNodeTypeAnnotation extends BabelNode {
type: "TypeAnnotation";
typeAnnotation: any;
@@ -680,6 +706,11 @@ declare class BabelNodeTypeCastExpression extends BabelNode {
typeAnnotation: any;
}
declare class BabelNodeTypeParameter extends BabelNode {
type: "TypeParameter";
bound: any;
}
declare class BabelNodeTypeParameterDeclaration extends BabelNode {
type: "TypeParameterDeclaration";
params: any;
@@ -715,6 +746,11 @@ declare class BabelNodeObjectTypeProperty extends BabelNode {
value: any;
}
declare class BabelNodeObjectTypeSpreadProperty extends BabelNode {
type: "ObjectTypeSpreadProperty";
argument: any;
}
declare class BabelNodeQualifiedTypeIdentifier extends BabelNode {
type: "QualifiedTypeIdentifier";
id: any;
@@ -758,6 +794,11 @@ declare class BabelNodeJSXExpressionContainer extends BabelNode {
expression: BabelNodeExpression;
}
declare class BabelNodeJSXSpreadChild extends BabelNode {
type: "JSXSpreadChild";
expression: BabelNodeExpression;
}
declare class BabelNodeJSXIdentifier extends BabelNode {
type: "JSXIdentifier";
name: string;
@@ -806,12 +847,23 @@ declare class BabelNodeAwaitExpression extends BabelNode {
argument: BabelNodeExpression;
}
declare class BabelNodeForAwaitStatement extends BabelNode {
type: "ForAwaitStatement";
left: BabelNodeVariableDeclaration | BabelNodeLVal;
right: BabelNodeExpression;
body: BabelNodeStatement;
}
declare class BabelNodeBindExpression extends BabelNode {
type: "BindExpression";
object: any;
callee: any;
}
declare class BabelNodeImport extends BabelNode {
type: "Import";
}
declare class BabelNodeDecorator extends BabelNode {
type: "Decorator";
expression: BabelNodeExpression;
@@ -842,28 +894,28 @@ declare class BabelNodeSpreadProperty extends BabelNode {
argument: BabelNodeExpression;
}
type BabelNodeExpression = BabelNodeArrayExpression | BabelNodeAssignmentExpression | BabelNodeBinaryExpression | BabelNodeCallExpression | BabelNodeConditionalExpression | BabelNodeFunctionExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeRegExpLiteral | BabelNodeLogicalExpression | BabelNodeMemberExpression | BabelNodeNewExpression | BabelNodeObjectExpression | BabelNodeSequenceExpression | BabelNodeThisExpression | BabelNodeUnaryExpression | BabelNodeUpdateExpression | BabelNodeArrowFunctionExpression | BabelNodeClassExpression | BabelNodeMetaProperty | BabelNodeSuper | BabelNodeTaggedTemplateExpression | BabelNodeTemplateLiteral | BabelNodeYieldExpression | BabelNodeTypeCastExpression | BabelNodeJSXElement | BabelNodeJSXEmptyExpression | BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeParenthesizedExpression | BabelNodeAwaitExpression | BabelNodeBindExpression | BabelNodeDoExpression;
type BabelNodeExpression = BabelNodeArrayExpression | BabelNodeAssignmentExpression | BabelNodeBinaryExpression | BabelNodeCallExpression | BabelNodeConditionalExpression | BabelNodeFunctionExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeRegExpLiteral | BabelNodeLogicalExpression | BabelNodeMemberExpression | BabelNodeNewExpression | BabelNodeObjectExpression | BabelNodeSequenceExpression | BabelNodeThisExpression | BabelNodeUnaryExpression | BabelNodeUpdateExpression | BabelNodeArrowFunctionExpression | BabelNodeClassExpression | BabelNodeMetaProperty | BabelNodeSuper | BabelNodeTaggedTemplateExpression | BabelNodeTemplateLiteral | BabelNodeYieldExpression | BabelNodeTypeCastExpression | BabelNodeJSXElement | BabelNodeJSXEmptyExpression | BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeParenthesizedExpression | BabelNodeAwaitExpression | BabelNodeBindExpression | BabelNodeImport | BabelNodeDoExpression;
type BabelNodeBinary = BabelNodeBinaryExpression | BabelNodeLogicalExpression;
type BabelNodeScopable = BabelNodeBlockStatement | BabelNodeCatchClause | BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeSwitchStatement | BabelNodeWhileStatement | BabelNodeArrowFunctionExpression | BabelNodeClassDeclaration | BabelNodeClassExpression | BabelNodeForOfStatement | BabelNodeClassMethod;
type BabelNodeBlockParent = BabelNodeBlockStatement | BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeSwitchStatement | BabelNodeWhileStatement | BabelNodeArrowFunctionExpression | BabelNodeForOfStatement | BabelNodeClassMethod;
type BabelNodeScopable = BabelNodeBlockStatement | BabelNodeCatchClause | BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeSwitchStatement | BabelNodeWhileStatement | BabelNodeArrowFunctionExpression | BabelNodeClassDeclaration | BabelNodeClassExpression | BabelNodeForOfStatement | BabelNodeClassMethod | BabelNodeForAwaitStatement;
type BabelNodeBlockParent = BabelNodeBlockStatement | BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeSwitchStatement | BabelNodeWhileStatement | BabelNodeArrowFunctionExpression | BabelNodeForOfStatement | BabelNodeClassMethod | BabelNodeForAwaitStatement;
type BabelNodeBlock = BabelNodeBlockStatement | BabelNodeProgram;
type BabelNodeStatement = BabelNodeBlockStatement | BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeDebuggerStatement | BabelNodeDoWhileStatement | BabelNodeEmptyStatement | BabelNodeExpressionStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeIfStatement | BabelNodeLabeledStatement | BabelNodeReturnStatement | BabelNodeSwitchStatement | BabelNodeThrowStatement | BabelNodeTryStatement | BabelNodeVariableDeclaration | BabelNodeWhileStatement | BabelNodeWithStatement | BabelNodeClassDeclaration | BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeForOfStatement | BabelNodeImportDeclaration | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareTypeAlias | BabelNodeDeclareVariable | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias;
type BabelNodeStatement = BabelNodeBlockStatement | BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeDebuggerStatement | BabelNodeDoWhileStatement | BabelNodeEmptyStatement | BabelNodeExpressionStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeIfStatement | BabelNodeLabeledStatement | BabelNodeReturnStatement | BabelNodeSwitchStatement | BabelNodeThrowStatement | BabelNodeTryStatement | BabelNodeVariableDeclaration | BabelNodeWhileStatement | BabelNodeWithStatement | BabelNodeClassDeclaration | BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeForOfStatement | BabelNodeImportDeclaration | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias | BabelNodeOpaqueType | BabelNodeForAwaitStatement;
type BabelNodeTerminatorless = BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeReturnStatement | BabelNodeThrowStatement | BabelNodeYieldExpression | BabelNodeAwaitExpression;
type BabelNodeCompletionStatement = BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeReturnStatement | BabelNodeThrowStatement;
type BabelNodeConditional = BabelNodeConditionalExpression | BabelNodeIfStatement;
type BabelNodeLoop = BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeWhileStatement | BabelNodeForOfStatement;
type BabelNodeLoop = BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeWhileStatement | BabelNodeForOfStatement | BabelNodeForAwaitStatement;
type BabelNodeWhile = BabelNodeDoWhileStatement | BabelNodeWhileStatement;
type BabelNodeExpressionWrapper = BabelNodeExpressionStatement | BabelNodeTypeCastExpression | BabelNodeParenthesizedExpression;
type BabelNodeFor = BabelNodeForInStatement | BabelNodeForStatement | BabelNodeForOfStatement;
type BabelNodeForXStatement = BabelNodeForInStatement | BabelNodeForOfStatement;
type BabelNodeFor = BabelNodeForInStatement | BabelNodeForStatement | BabelNodeForOfStatement | BabelNodeForAwaitStatement;
type BabelNodeForXStatement = BabelNodeForInStatement | BabelNodeForOfStatement | BabelNodeForAwaitStatement;
type BabelNodeFunction = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeObjectMethod | BabelNodeArrowFunctionExpression | BabelNodeClassMethod;
type BabelNodeFunctionParent = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeArrowFunctionExpression | BabelNodeClassMethod;
type BabelNodePureish = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeArrowFunctionExpression | BabelNodeClassDeclaration | BabelNodeClassExpression;
type BabelNodeDeclaration = BabelNodeFunctionDeclaration | BabelNodeVariableDeclaration | BabelNodeClassDeclaration | BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeImportDeclaration | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareVariable | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias;
type BabelNodeDeclaration = BabelNodeFunctionDeclaration | BabelNodeVariableDeclaration | BabelNodeClassDeclaration | BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeImportDeclaration | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias | BabelNodeOpaqueType;
type BabelNodeLVal = BabelNodeIdentifier | BabelNodeMemberExpression | BabelNodeRestElement | BabelNodeAssignmentPattern | BabelNodeArrayPattern | BabelNodeObjectPattern;
type BabelNodeLiteral = BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeRegExpLiteral | BabelNodeTemplateLiteral;
type BabelNodeImmutable = BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeJSXAttribute | BabelNodeJSXClosingElement | BabelNodeJSXElement | BabelNodeJSXExpressionContainer | BabelNodeJSXOpeningElement;
type BabelNodeUserWhitespacable = BabelNodeObjectMethod | BabelNodeObjectProperty | BabelNodeObjectTypeCallProperty | BabelNodeObjectTypeIndexer | BabelNodeObjectTypeProperty;
type BabelNodeImmutable = BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeJSXAttribute | BabelNodeJSXClosingElement | BabelNodeJSXElement | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXOpeningElement | BabelNodeJSXText;
type BabelNodeUserWhitespacable = BabelNodeObjectMethod | BabelNodeObjectProperty | BabelNodeObjectTypeCallProperty | BabelNodeObjectTypeIndexer | BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty;
type BabelNodeMethod = BabelNodeObjectMethod | BabelNodeClassMethod;
type BabelNodeObjectMember = BabelNodeObjectMethod | BabelNodeObjectProperty;
type BabelNodeProperty = BabelNodeObjectProperty | BabelNodeClassProperty;
@@ -873,10 +925,10 @@ type BabelNodeClass = BabelNodeClassDeclaration | BabelNodeClassExpression;
type BabelNodeModuleDeclaration = BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeImportDeclaration;
type BabelNodeExportDeclaration = BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration;
type BabelNodeModuleSpecifier = BabelNodeExportSpecifier | BabelNodeImportDefaultSpecifier | BabelNodeImportNamespaceSpecifier | BabelNodeImportSpecifier | BabelNodeExportDefaultSpecifier | BabelNodeExportNamespaceSpecifier;
type BabelNodeFlow = BabelNodeAnyTypeAnnotation | BabelNodeArrayTypeAnnotation | BabelNodeBooleanTypeAnnotation | BabelNodeBooleanLiteralTypeAnnotation | BabelNodeNullLiteralTypeAnnotation | BabelNodeClassImplements | BabelNodeClassProperty | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareVariable | BabelNodeExistentialTypeParam | BabelNodeFunctionTypeAnnotation | BabelNodeFunctionTypeParam | BabelNodeGenericTypeAnnotation | BabelNodeInterfaceExtends | BabelNodeInterfaceDeclaration | BabelNodeIntersectionTypeAnnotation | BabelNodeMixedTypeAnnotation | BabelNodeNullableTypeAnnotation | BabelNodeNumericLiteralTypeAnnotation | BabelNodeNumberTypeAnnotation | BabelNodeStringLiteralTypeAnnotation | BabelNodeStringTypeAnnotation | BabelNodeThisTypeAnnotation | BabelNodeTupleTypeAnnotation | BabelNodeTypeofTypeAnnotation | BabelNodeTypeAlias | BabelNodeTypeAnnotation | BabelNodeTypeCastExpression | BabelNodeTypeParameterDeclaration | BabelNodeTypeParameterInstantiation | BabelNodeObjectTypeAnnotation | BabelNodeObjectTypeCallProperty | BabelNodeObjectTypeIndexer | BabelNodeObjectTypeProperty | BabelNodeQualifiedTypeIdentifier | BabelNodeUnionTypeAnnotation | BabelNodeVoidTypeAnnotation;
type BabelNodeFlowBaseAnnotation = BabelNodeAnyTypeAnnotation | BabelNodeBooleanTypeAnnotation | BabelNodeNullLiteralTypeAnnotation | BabelNodeMixedTypeAnnotation | BabelNodeNumberTypeAnnotation | BabelNodeStringTypeAnnotation | BabelNodeThisTypeAnnotation | BabelNodeVoidTypeAnnotation;
type BabelNodeFlowDeclaration = BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareVariable | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias;
type BabelNodeJSX = BabelNodeJSXAttribute | BabelNodeJSXClosingElement | BabelNodeJSXElement | BabelNodeJSXEmptyExpression | BabelNodeJSXExpressionContainer | BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeJSXNamespacedName | BabelNodeJSXOpeningElement | BabelNodeJSXSpreadAttribute | BabelNodeJSXText;
type BabelNodeFlow = BabelNodeAnyTypeAnnotation | BabelNodeArrayTypeAnnotation | BabelNodeBooleanTypeAnnotation | BabelNodeBooleanLiteralTypeAnnotation | BabelNodeNullLiteralTypeAnnotation | BabelNodeClassImplements | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeExistentialTypeParam | BabelNodeFunctionTypeAnnotation | BabelNodeFunctionTypeParam | BabelNodeGenericTypeAnnotation | BabelNodeInterfaceExtends | BabelNodeInterfaceDeclaration | BabelNodeIntersectionTypeAnnotation | BabelNodeMixedTypeAnnotation | BabelNodeEmptyTypeAnnotation | BabelNodeNullableTypeAnnotation | BabelNodeNumericLiteralTypeAnnotation | BabelNodeNumberTypeAnnotation | BabelNodeStringLiteralTypeAnnotation | BabelNodeStringTypeAnnotation | BabelNodeThisTypeAnnotation | BabelNodeTupleTypeAnnotation | BabelNodeTypeofTypeAnnotation | BabelNodeTypeAlias | BabelNodeOpaqueType | BabelNodeTypeAnnotation | BabelNodeTypeCastExpression | BabelNodeTypeParameter | BabelNodeTypeParameterDeclaration | BabelNodeTypeParameterInstantiation | BabelNodeObjectTypeAnnotation | BabelNodeObjectTypeCallProperty | BabelNodeObjectTypeIndexer | BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty | BabelNodeQualifiedTypeIdentifier | BabelNodeUnionTypeAnnotation | BabelNodeVoidTypeAnnotation;
type BabelNodeFlowBaseAnnotation = BabelNodeAnyTypeAnnotation | BabelNodeBooleanTypeAnnotation | BabelNodeNullLiteralTypeAnnotation | BabelNodeMixedTypeAnnotation | BabelNodeEmptyTypeAnnotation | BabelNodeNumberTypeAnnotation | BabelNodeStringTypeAnnotation | BabelNodeThisTypeAnnotation | BabelNodeVoidTypeAnnotation;
type BabelNodeFlowDeclaration = BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias | BabelNodeOpaqueType;
type BabelNodeJSX = BabelNodeJSXAttribute | BabelNodeJSXClosingElement | BabelNodeJSXElement | BabelNodeJSXEmptyExpression | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeJSXNamespacedName | BabelNodeJSXOpeningElement | BabelNodeJSXSpreadAttribute | BabelNodeJSXText;
declare module "babel-types" {
declare function arrayExpression(elements?: any): BabelNodeArrayExpression;
@@ -897,9 +949,9 @@ declare module "babel-types" {
declare function file(program: BabelNodeProgram, comments: any, tokens: any): BabelNodeFile;
declare function forInStatement(left: BabelNodeVariableDeclaration | BabelNodeLVal, right: BabelNodeExpression, body: BabelNodeStatement): BabelNodeForInStatement;
declare function forStatement(init?: ?BabelNodeVariableDeclaration | BabelNodeExpression, test?: ?BabelNodeExpression, update?: ?BabelNodeExpression, body: BabelNodeStatement): BabelNodeForStatement;
declare function functionDeclaration(id: BabelNodeIdentifier, params: any, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean, returnType: any, typeParameters: any): BabelNodeFunctionDeclaration;
declare function functionExpression(id?: ?BabelNodeIdentifier, params: any, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean, returnType: any, typeParameters: any): BabelNodeFunctionExpression;
declare function identifier(name: any, typeAnnotation: any): BabelNodeIdentifier;
declare function functionDeclaration(id: BabelNodeIdentifier, params: any, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean, returnType?: any, typeParameters?: any): BabelNodeFunctionDeclaration;
declare function functionExpression(id?: ?BabelNodeIdentifier, params: any, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean, returnType?: any, typeParameters?: any): BabelNodeFunctionExpression;
declare function identifier(name: any, decorators?: any, typeAnnotation?: any): BabelNodeIdentifier;
declare function ifStatement(test: BabelNodeExpression, consequent: BabelNodeStatement, alternate?: ?BabelNodeStatement): BabelNodeIfStatement;
declare function labeledStatement(label: BabelNodeIdentifier, body: BabelNodeStatement): BabelNodeLabeledStatement;
declare function stringLiteral(value: string): BabelNodeStringLiteral;
@@ -912,40 +964,40 @@ declare module "babel-types" {
declare function newExpression(callee: BabelNodeExpression, _arguments: any): BabelNodeNewExpression;
declare function program(directives?: any, body: any): BabelNodeProgram;
declare function objectExpression(properties: any): BabelNodeObjectExpression;
declare function objectMethod(kind?: any, computed?: boolean, key: any, decorators: any, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean, params: any, returnType: any, typeParameters: any): BabelNodeObjectMethod;
declare function objectProperty(computed?: boolean, key: any, value: BabelNodeExpression, shorthand?: boolean, decorators?: any): BabelNodeObjectProperty;
declare function restElement(argument: BabelNodeLVal, typeAnnotation: any): BabelNodeRestElement;
declare function objectMethod(kind?: any, computed?: boolean, key: any, decorators?: any, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean, params: any, returnType?: any, typeParameters?: any): BabelNodeObjectMethod;
declare function objectProperty(computed?: boolean, key: any, value: BabelNodeExpression | BabelNodePattern | BabelNodeRestElement, shorthand?: boolean, decorators?: any): BabelNodeObjectProperty;
declare function restElement(argument: BabelNodeLVal, decorators?: any, typeAnnotation: any): BabelNodeRestElement;
declare function returnStatement(argument?: ?BabelNodeExpression): BabelNodeReturnStatement;
declare function sequenceExpression(expressions: any): BabelNodeSequenceExpression;
declare function switchCase(test?: ?BabelNodeExpression, consequent: any): BabelNodeSwitchCase;
declare function switchStatement(discriminant: BabelNodeExpression, cases: any): BabelNodeSwitchStatement;
declare function thisExpression(): BabelNodeThisExpression;
declare function throwStatement(argument: BabelNodeExpression): BabelNodeThrowStatement;
declare function tryStatement(body: BabelNodeBlockStatement, handler?: any, finalizer?: ?BabelNodeBlockStatement, block: any): BabelNodeTryStatement;
declare function tryStatement(body?: ?BabelNodeBlockStatement, handler?: any, finalizer?: ?BabelNodeBlockStatement, block: any): BabelNodeTryStatement;
declare function unaryExpression(prefix?: boolean, argument: BabelNodeExpression, operator: "void" | "delete" | "!" | "+" | "-" | "++" | "--" | "~" | "typeof"): BabelNodeUnaryExpression;
declare function updateExpression(prefix?: boolean, argument: BabelNodeExpression, operator: "++" | "--"): BabelNodeUpdateExpression;
declare function variableDeclaration(kind: any, declarations: any): BabelNodeVariableDeclaration;
declare function variableDeclarator(id: BabelNodeLVal, init?: ?BabelNodeExpression): BabelNodeVariableDeclarator;
declare function whileStatement(test: BabelNodeExpression, body: BabelNodeBlockStatement | BabelNodeStatement): BabelNodeWhileStatement;
declare function withStatement(object: any, body: BabelNodeBlockStatement | BabelNodeStatement): BabelNodeWithStatement;
declare function assignmentPattern(left: BabelNodeIdentifier, right: BabelNodeExpression): BabelNodeAssignmentPattern;
declare function arrayPattern(elements: any, typeAnnotation: any): BabelNodeArrayPattern;
declare function arrowFunctionExpression(params: any, body: BabelNodeBlockStatement | BabelNodeExpression, async?: boolean, returnType: any): BabelNodeArrowFunctionExpression;
declare function assignmentPattern(left: BabelNodeIdentifier, right: BabelNodeExpression, decorators?: any): BabelNodeAssignmentPattern;
declare function arrayPattern(elements: any, decorators?: any, typeAnnotation: any): BabelNodeArrayPattern;
declare function arrowFunctionExpression(params: any, body: BabelNodeBlockStatement | BabelNodeExpression, async?: boolean, returnType?: any, typeParameters?: any): BabelNodeArrowFunctionExpression;
declare function classBody(body: any): BabelNodeClassBody;
declare function classDeclaration(id: BabelNodeIdentifier, body: BabelNodeClassBody, superClass?: ?BabelNodeExpression, decorators: any, mixins: any, typeParameters: any, superTypeParameters: any, _implements: any): BabelNodeClassDeclaration;
declare function classExpression(id?: ?BabelNodeIdentifier, body: BabelNodeClassBody, superClass?: ?BabelNodeExpression, decorators: any, mixins: any, typeParameters: any, superTypeParameters: any, _implements: any): BabelNodeClassExpression;
declare function classDeclaration(id: BabelNodeIdentifier, body: BabelNodeClassBody, superClass?: ?BabelNodeExpression, decorators: any, mixins?: any, typeParameters?: any, superTypeParameters?: any, _implements?: any): BabelNodeClassDeclaration;
declare function classExpression(id?: ?BabelNodeIdentifier, body: BabelNodeClassBody, superClass?: ?BabelNodeExpression, decorators: any, mixins?: any, typeParameters?: any, superTypeParameters?: any, _implements?: any): BabelNodeClassExpression;
declare function exportAllDeclaration(source: BabelNodeStringLiteral): BabelNodeExportAllDeclaration;
declare function exportDefaultDeclaration(declaration: BabelNodeFunctionDeclaration | BabelNodeClassDeclaration | BabelNodeExpression): BabelNodeExportDefaultDeclaration;
declare function exportNamedDeclaration(declaration?: ?BabelNodeDeclaration, specifiers: any, source?: ?BabelNodeStringLiteral): BabelNodeExportNamedDeclaration;
declare function exportSpecifier(local: BabelNodeIdentifier, imported: BabelNodeIdentifier, exported: any): BabelNodeExportSpecifier;
declare function exportSpecifier(local: BabelNodeIdentifier, exported: BabelNodeIdentifier): BabelNodeExportSpecifier;
declare function forOfStatement(left: BabelNodeVariableDeclaration | BabelNodeLVal, right: BabelNodeExpression, body: BabelNodeStatement): BabelNodeForOfStatement;
declare function importDeclaration(specifiers: any, source: BabelNodeStringLiteral): BabelNodeImportDeclaration;
declare function importDefaultSpecifier(local: BabelNodeIdentifier): BabelNodeImportDefaultSpecifier;
declare function importNamespaceSpecifier(local: BabelNodeIdentifier): BabelNodeImportNamespaceSpecifier;
declare function importSpecifier(local: BabelNodeIdentifier, imported: BabelNodeIdentifier): BabelNodeImportSpecifier;
declare function importSpecifier(local: BabelNodeIdentifier, imported: BabelNodeIdentifier, importKind?: null | "type" | "typeof"): BabelNodeImportSpecifier;
declare function metaProperty(meta: string, property: string): BabelNodeMetaProperty;
declare function classMethod(kind?: any, computed?: boolean, _static?: boolean, key: any, params: any, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean, decorators: any, returnType: any, typeParameters: any): BabelNodeClassMethod;
declare function objectPattern(properties: any, typeAnnotation: any): BabelNodeObjectPattern;
declare function classMethod(kind?: any, computed?: boolean, _static?: boolean, key: any, params: any, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean, decorators?: any, returnType?: any, typeParameters?: any): BabelNodeClassMethod;
declare function objectPattern(properties: any, decorators?: any, typeAnnotation: any): BabelNodeObjectPattern;
declare function spreadElement(argument: BabelNodeExpression): BabelNodeSpreadElement;
declare function taggedTemplateExpression(tag: BabelNodeExpression, quasi: BabelNodeTemplateLiteral): BabelNodeTaggedTemplateExpression;
declare function templateElement(value: any, tail?: boolean): BabelNodeTemplateElement;
@@ -957,13 +1009,14 @@ declare module "babel-types" {
declare function booleanLiteralTypeAnnotation(): BabelNodeBooleanLiteralTypeAnnotation;
declare function nullLiteralTypeAnnotation(): BabelNodeNullLiteralTypeAnnotation;
declare function classImplements(id: any, typeParameters: any): BabelNodeClassImplements;
declare function classProperty(key: any, value: any, typeAnnotation: any, decorators: any): BabelNodeClassProperty;
declare function classProperty(computed?: boolean, key: any, value: any, typeAnnotation: any, decorators: any): BabelNodeClassProperty;
declare function declareClass(id: any, typeParameters: any, _extends: any, body: any): BabelNodeDeclareClass;
declare function declareFunction(id: any): BabelNodeDeclareFunction;
declare function declareInterface(id: any, typeParameters: any, _extends: any, body: any): BabelNodeDeclareInterface;
declare function declareModule(id: any, body: any): BabelNodeDeclareModule;
declare function declareModuleExports(typeAnnotation: any): BabelNodeDeclareModuleExports;
declare function declareTypeAlias(id: any, typeParameters: any, right: any): BabelNodeDeclareTypeAlias;
declare function declareOpaqueType(id: any, typeParameters: any, supertype: any): BabelNodeDeclareOpaqueType;
declare function declareVariable(id: any): BabelNodeDeclareVariable;
declare function existentialTypeParam(): BabelNodeExistentialTypeParam;
declare function functionTypeAnnotation(typeParameters: any, params: any, rest: any, returnType: any): BabelNodeFunctionTypeAnnotation;
@@ -973,6 +1026,7 @@ declare module "babel-types" {
declare function interfaceDeclaration(id: any, typeParameters: any, _extends: any, body: any): BabelNodeInterfaceDeclaration;
declare function intersectionTypeAnnotation(types: any): BabelNodeIntersectionTypeAnnotation;
declare function mixedTypeAnnotation(): BabelNodeMixedTypeAnnotation;
declare function emptyTypeAnnotation(): BabelNodeEmptyTypeAnnotation;
declare function nullableTypeAnnotation(typeAnnotation: any): BabelNodeNullableTypeAnnotation;
declare function numericLiteralTypeAnnotation(): BabelNodeNumericLiteralTypeAnnotation;
declare function numberTypeAnnotation(): BabelNodeNumberTypeAnnotation;
@@ -982,14 +1036,17 @@ declare module "babel-types" {
declare function tupleTypeAnnotation(types: any): BabelNodeTupleTypeAnnotation;
declare function typeofTypeAnnotation(argument: any): BabelNodeTypeofTypeAnnotation;
declare function typeAlias(id: any, typeParameters: any, right: any): BabelNodeTypeAlias;
declare function opaqueType(id: any, typeParameters: any, impltype: any, supertype: any): BabelNodeOpaqueType;
declare function typeAnnotation(typeAnnotation: any): BabelNodeTypeAnnotation;
declare function typeCastExpression(expression: any, typeAnnotation: any): BabelNodeTypeCastExpression;
declare function typeParameter(bound: any): BabelNodeTypeParameter;
declare function typeParameterDeclaration(params: any): BabelNodeTypeParameterDeclaration;
declare function typeParameterInstantiation(params: any): BabelNodeTypeParameterInstantiation;
declare function objectTypeAnnotation(properties: any, indexers: any, callProperties: any): BabelNodeObjectTypeAnnotation;
declare function objectTypeCallProperty(value: any): BabelNodeObjectTypeCallProperty;
declare function objectTypeIndexer(id: any, key: any, value: any): BabelNodeObjectTypeIndexer;
declare function objectTypeProperty(key: any, value: any): BabelNodeObjectTypeProperty;
declare function objectTypeSpreadProperty(argument: any): BabelNodeObjectTypeSpreadProperty;
declare function qualifiedTypeIdentifier(id: any, qualification: any): BabelNodeQualifiedTypeIdentifier;
declare function unionTypeAnnotation(types: any): BabelNodeUnionTypeAnnotation;
declare function voidTypeAnnotation(): BabelNodeVoidTypeAnnotation;
@@ -998,6 +1055,7 @@ declare module "babel-types" {
declare function jSXElement(openingElement: BabelNodeJSXOpeningElement, closingElement?: ?BabelNodeJSXClosingElement, children: any, selfClosing: any): BabelNodeJSXElement;
declare function jSXEmptyExpression(): BabelNodeJSXEmptyExpression;
declare function jSXExpressionContainer(expression: BabelNodeExpression): BabelNodeJSXExpressionContainer;
declare function jSXSpreadChild(expression: BabelNodeExpression): BabelNodeJSXSpreadChild;
declare function jSXIdentifier(name: string): BabelNodeJSXIdentifier;
declare function jSXMemberExpression(object: BabelNodeJSXMemberExpression | BabelNodeJSXIdentifier, property: BabelNodeJSXIdentifier): BabelNodeJSXMemberExpression;
declare function jSXNamespacedName(namespace: BabelNodeJSXIdentifier, name: BabelNodeJSXIdentifier): BabelNodeJSXNamespacedName;
@@ -1007,7 +1065,9 @@ declare module "babel-types" {
declare function noop(): BabelNodeNoop;
declare function parenthesizedExpression(expression: BabelNodeExpression): BabelNodeParenthesizedExpression;
declare function awaitExpression(argument: BabelNodeExpression): BabelNodeAwaitExpression;
declare function forAwaitStatement(left: BabelNodeVariableDeclaration | BabelNodeLVal, right: BabelNodeExpression, body: BabelNodeStatement): BabelNodeForAwaitStatement;
declare function bindExpression(object: any, callee: any): BabelNodeBindExpression;
declare function import(): BabelNodeImport;
declare function decorator(expression: BabelNodeExpression): BabelNodeDecorator;
declare function doExpression(body: BabelNodeBlockStatement): BabelNodeDoExpression;
declare function exportDefaultSpecifier(exported: BabelNodeIdentifier): BabelNodeExportDefaultSpecifier;
@@ -1100,6 +1160,7 @@ declare module "babel-types" {
declare function isDeclareModule(node: Object, opts?: Object): boolean;
declare function isDeclareModuleExports(node: Object, opts?: Object): boolean;
declare function isDeclareTypeAlias(node: Object, opts?: Object): boolean;
declare function isDeclareOpaqueType(node: Object, opts?: Object): boolean;
declare function isDeclareVariable(node: Object, opts?: Object): boolean;
declare function isExistentialTypeParam(node: Object, opts?: Object): boolean;
declare function isFunctionTypeAnnotation(node: Object, opts?: Object): boolean;
@@ -1109,6 +1170,7 @@ declare module "babel-types" {
declare function isInterfaceDeclaration(node: Object, opts?: Object): boolean;
declare function isIntersectionTypeAnnotation(node: Object, opts?: Object): boolean;
declare function isMixedTypeAnnotation(node: Object, opts?: Object): boolean;
declare function isEmptyTypeAnnotation(node: Object, opts?: Object): boolean;
declare function isNullableTypeAnnotation(node: Object, opts?: Object): boolean;
declare function isNumericLiteralTypeAnnotation(node: Object, opts?: Object): boolean;
declare function isNumberTypeAnnotation(node: Object, opts?: Object): boolean;
@@ -1118,14 +1180,17 @@ declare module "babel-types" {
declare function isTupleTypeAnnotation(node: Object, opts?: Object): boolean;
declare function isTypeofTypeAnnotation(node: Object, opts?: Object): boolean;
declare function isTypeAlias(node: Object, opts?: Object): boolean;
declare function isOpaqueType(node: Object, opts?: Object): boolean;
declare function isTypeAnnotation(node: Object, opts?: Object): boolean;
declare function isTypeCastExpression(node: Object, opts?: Object): boolean;
declare function isTypeParameter(node: Object, opts?: Object): boolean;
declare function isTypeParameterDeclaration(node: Object, opts?: Object): boolean;
declare function isTypeParameterInstantiation(node: Object, opts?: Object): boolean;
declare function isObjectTypeAnnotation(node: Object, opts?: Object): boolean;
declare function isObjectTypeCallProperty(node: Object, opts?: Object): boolean;
declare function isObjectTypeIndexer(node: Object, opts?: Object): boolean;
declare function isObjectTypeProperty(node: Object, opts?: Object): boolean;
declare function isObjectTypeSpreadProperty(node: Object, opts?: Object): boolean;
declare function isQualifiedTypeIdentifier(node: Object, opts?: Object): boolean;
declare function isUnionTypeAnnotation(node: Object, opts?: Object): boolean;
declare function isVoidTypeAnnotation(node: Object, opts?: Object): boolean;
@@ -1134,6 +1199,7 @@ declare module "babel-types" {
declare function isJSXElement(node: Object, opts?: Object): boolean;
declare function isJSXEmptyExpression(node: Object, opts?: Object): boolean;
declare function isJSXExpressionContainer(node: Object, opts?: Object): boolean;
declare function isJSXSpreadChild(node: Object, opts?: Object): boolean;
declare function isJSXIdentifier(node: Object, opts?: Object): boolean;
declare function isJSXMemberExpression(node: Object, opts?: Object): boolean;
declare function isJSXNamespacedName(node: Object, opts?: Object): boolean;
@@ -1143,7 +1209,9 @@ declare module "babel-types" {
declare function isNoop(node: Object, opts?: Object): boolean;
declare function isParenthesizedExpression(node: Object, opts?: Object): boolean;
declare function isAwaitExpression(node: Object, opts?: Object): boolean;
declare function isForAwaitStatement(node: Object, opts?: Object): boolean;
declare function isBindExpression(node: Object, opts?: Object): boolean;
declare function isImport(node: Object, opts?: Object): boolean;
declare function isDecorator(node: Object, opts?: Object): boolean;
declare function isDoExpression(node: Object, opts?: Object): boolean;
declare function isExportDefaultSpecifier(node: Object, opts?: Object): boolean;
@@ -1187,14 +1255,4 @@ declare module "babel-types" {
declare function isJSX(node: Object, opts?: Object): boolean;
declare function isNumberLiteral(node: Object, opts?: Object): boolean;
declare function isRegexLiteral(node: Object, opts?: Object): boolean;
declare function isReferencedIdentifier(node: Object, opts?: Object): boolean;
declare function isReferencedMemberExpression(node: Object, opts?: Object): boolean;
declare function isBindingIdentifier(node: Object, opts?: Object): boolean;
declare function isScope(node: Object, opts?: Object): boolean;
declare function isReferenced(node: Object, opts?: Object): boolean;
declare function isBlockScoped(node: Object, opts?: Object): boolean;
declare function isVar(node: Object, opts?: Object): boolean;
declare function isUser(node: Object, opts?: Object): boolean;
declare function isGenerated(node: Object, opts?: Object): boolean;
declare function isPure(node: Object, opts?: Object): boolean;
}

View File

@@ -35,7 +35,7 @@
"babel-register": "^6.24.1",
"babel-traverse": "^6.25.0",
"babel-types": "^6.25.0",
"babylon": "^6.17.2",
"babylon": "^6.18.0",
"convert-source-map": "^1.1.0",
"debug": "^2.1.1",
"json5": "^0.5.0",

View File

@@ -22,6 +22,6 @@
},
"devDependencies": {
"babel-helper-fixtures": "^6.22.0",
"babylon": "^6.17.2"
"babylon": "^6.18.0"
}
}

View File

@@ -1,3 +1,5 @@
import * as t from "babel-types";
export function AnyTypeAnnotation() {
this.word("any");
}
@@ -20,17 +22,21 @@ export function NullLiteralTypeAnnotation() {
this.word("null");
}
export function DeclareClass(node: Object) {
this.word("declare");
this.space();
export function DeclareClass(node: Object, parent: Object) {
if (!t.isDeclareExportDeclaration(parent)) {
this.word("declare");
this.space();
}
this.word("class");
this.space();
this._interfaceish(node);
}
export function DeclareFunction(node: Object) {
this.word("declare");
this.space();
export function DeclareFunction(node: Object, parent: Object) {
if (!t.isDeclareExportDeclaration(parent)) {
this.word("declare");
this.space();
}
this.word("function");
this.space();
this.print(node.id, node);
@@ -69,9 +75,19 @@ export function DeclareTypeAlias(node: Object) {
this.TypeAlias(node);
}
export function DeclareVariable(node: Object) {
this.word("declare");
this.space();
export function DeclareOpaqueType(node: Object, parent: Object) {
if (!t.isDeclareExportDeclaration(parent)) {
this.word("declare");
this.space();
}
this.OpaqueType(node);
}
export function DeclareVariable(node: Object, parent: Object) {
if (!t.isDeclareExportDeclaration(parent)) {
this.word("declare");
this.space();
}
this.word("var");
this.space();
this.print(node.id, node);
@@ -79,6 +95,44 @@ export function DeclareVariable(node: Object) {
this.semicolon();
}
export function DeclareExportDeclaration(node: Object) {
this.word("declare");
this.space();
this.word("export");
this.space();
if (node.default) {
this.word("default");
this.space();
}
FlowExportDeclaration.apply(this, arguments);
}
function FlowExportDeclaration(node: Object) {
if (node.declaration) {
const declar = node.declaration;
this.print(declar, node);
if (!t.isStatement(declar)) this.semicolon();
} else {
this.token("{");
if (node.specifiers.length) {
this.space();
this.printList(node.specifiers, node);
this.space();
}
this.token("}");
if (node.source) {
this.space();
this.word("from");
this.space();
this.print(node.source, node);
}
this.semicolon();
}
}
export function ExistentialTypeParam() {
this.token("*");
}
@@ -222,6 +276,26 @@ export function TypeAlias(node: Object) {
this.print(node.right, node);
this.semicolon();
}
export function OpaqueType(node: Object) {
this.word("opaque");
this.space();
this.word("type");
this.space();
this.print(node.id, node);
this.print(node.typeParameters, node);
if (node.supertype) {
this.token(":");
this.space();
this.print(node.supertype, node);
}
if (node.impltype) {
this.space();
this.token("=");
this.space();
this.print(node.impltype, node);
}
this.semicolon();
}
export function TypeAnnotation(node: Object) {
this.token(":");

View File

@@ -18,3 +18,7 @@ declare type B = {
declare interface I { foo: string }
declare interface I<T> { foo: T }
declare module.exports: { foo: string }
declare opaque type Foo<T>: Bar<T>;
declare opaque type ID;
declare opaque type num: number;
declare opaque type NumArray;

View File

@@ -18,3 +18,7 @@ declare type B = {
declare interface I { foo: string }
declare interface I<T> { foo: T }
declare module.exports: { foo: string }
declare opaque type Foo<T>: Bar<T>;
declare opaque type ID;
declare opaque type num: number;
declare opaque type NumArray;

View File

@@ -0,0 +1,14 @@
opaque type ID = string;
opaque type Foo<T> = Bar<T>;
opaque type Maybe<T> = _Maybe<T, *>;
export opaque type Foo = number;
opaque type union =
| {type: "A"}
| {type: "B"}
;
opaque type overloads =
& ((x: string) => number)
& ((x: number) => string)
;

View File

@@ -0,0 +1,8 @@
opaque type ID = string;
opaque type Foo<T> = Bar<T>;
opaque type Maybe<T> = _Maybe<T, *>;
export opaque type Foo = number;
opaque type union = { type: "A" } | { type: "B" };
opaque type overloads = (x: string) => number & (x: number) => string;

View File

@@ -0,0 +1,15 @@
function a() {}
opaque type A = number;
opaque type B = {
name: string;
};
opaque type union =
| {type: "A"}
| {type: "B"}
;
opaque type overloads =
& ((x: string) => number)
& ((x: number) => string)
;

View File

@@ -0,0 +1,13 @@
function a() {}
/*:: opaque type A = number;*/
/*:: opaque type B = {
name: string;
};*/
/*:: opaque type union =
| {type: "A"}
| {type: "B"}
;*/
/*:: opaque type overloads =
& ((x: string) => number)
& ((x: number) => string)
;*/

View File

@@ -0,0 +1,16 @@
opaque type ID = string;
opaque type Foo<T> = Bar<T>
export opaque type Foo = number;
opaque type union =
| {type: "A"}
| {type: "B"}
;
opaque type overloads =
& ((x: string) => number)
& ((x: number) => string)
;
declare opaque type Foo: Bar;
declare export opaque type Foo: Bar;

View File

@@ -12,7 +12,7 @@
"babel-messages": "^6.23.0",
"babel-runtime": "^6.22.0",
"babel-types": "^6.25.0",
"babylon": "^6.17.2",
"babylon": "^6.18.0",
"debug": "^2.2.0",
"globals": "^9.0.0",
"invariant": "^2.2.0",

View File

@@ -46,7 +46,7 @@ See also `t.isArrayPattern(node, opts)` and `t.assertArrayPattern(node, opts)`.
Aliases: `Pattern`, `LVal`
- `elements`: `Array<Expression>` (required)
- `elements`: `Array<Identifier | Pattern | RestElement>` (required)
- `typeAnnotation` (required)
- `decorators`: `Array<Decorator>` (default: `null`)
@@ -463,6 +463,21 @@ Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration`
---
### declareOpaqueType
```javascript
t.declareOpaqueType(id, typeParameters, supertype)
```
See also `t.isDeclareOpaqueType(node, opts)` and `t.assertDeclareOpaqueType(node, opts)`.
Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration`
- `id` (required)
- `typeParameters` (required)
- `supertype` (required)
---
### declareTypeAlias
```javascript
t.declareTypeAlias(id, typeParameters, right)
@@ -1368,7 +1383,7 @@ See also `t.isObjectProperty(node, opts)` and `t.assertObjectProperty(node, opts
Aliases: `UserWhitespacable`, `Property`, `ObjectMember`
- `key`if computed then `Expression` else `Identifier | Literal` (required)
- `value`: `Expression` (required)
- `value`: `Expression | Pattern | RestElement` (required)
- `computed`: `boolean` (default: `false`)
- `shorthand`: `boolean` (default: `false`)
- `decorators`: `Array<Decorator>` (default: `null`)
@@ -1432,6 +1447,35 @@ Aliases: `Flow`, `UserWhitespacable`
---
### objectTypeSpreadProperty
```javascript
t.objectTypeSpreadProperty(argument)
```
See also `t.isObjectTypeSpreadProperty(node, opts)` and `t.assertObjectTypeSpreadProperty(node, opts)`.
Aliases: `Flow`, `UserWhitespacable`
- `argument` (required)
---
### opaqueType
```javascript
t.opaqueType(id, typeParameters, impltype, supertype)
```
See also `t.isOpaqueType(node, opts)` and `t.assertOpaqueType(node, opts)`.
Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration`
- `id` (required)
- `typeParameters` (required)
- `impltype` (required)
- `supertype` (required)
---
### parenthesizedExpression
```javascript
t.parenthesizedExpression(expression)

View File

@@ -15,6 +15,6 @@
},
"devDependencies": {
"babel-generator": "^6.22.0",
"babylon": "^6.17.2"
"babylon": "^6.18.0"
}
}

View File

@@ -103,6 +103,14 @@ defineType("DeclareTypeAlias", {
}
});
defineType("DeclareOpaqueType", {
visitor: ["id", "typeParameters", "supertype"],
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
fields: {
// todo
}
});
defineType("DeclareVariable", {
visitor: ["id"],
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
@@ -111,6 +119,14 @@ defineType("DeclareVariable", {
}
});
defineType("DeclareExportDeclaration", {
visitor: ["declaration", "specifiers", "source"],
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
fields: {
// todo
},
});
defineType("ExistentialTypeParam", {
aliases: ["Flow"]
});
@@ -236,6 +252,14 @@ defineType("TypeAlias", {
}
});
defineType("OpaqueType", {
visitor: ["id", "typeParameters", "impltype", "supertype"],
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
fields: {
// todo
}
});
defineType("TypeAnnotation", {
visitor: ["typeAnnotation"],
aliases: ["Flow"],

View File

@@ -70,6 +70,7 @@ getBindingIdentifiers.keys = {
DeclareVariable: ["id"],
InterfaceDeclaration: ["id"],
TypeAlias: ["id"],
OpaqueType: ["id"],
CatchClause: ["param"],
LabeledStatement: ["label"],