UNPKG

decaffeinate-parser

Version:

A better AST for CoffeeScript, inspired by CoffeeScriptRedux.

645 lines (640 loc) 33.3 kB
import { SourceTokenList, SourceToken } from 'coffee-lex'; import { Block as Block$1, Base, LocationData } from 'decaffeinate-coffeescript2/lib/coffeescript/nodes.js'; import { LinesAndColumns } from 'lines-and-columns'; /** * Any information we need to know about the current state of parsing. While the * hope is that this is mostly immutable, with replace operations as we walk the * AST, it is partially mutable to collect bound method names in a class. */ declare class ParseState { readonly currentClassBoundMethods: Array<ClassProtoAssignOp> | null; currentClassCtor: Constructor | null; constructor(currentClassBoundMethods: Array<ClassProtoAssignOp> | null); isInClassBody(): boolean; recordBoundMethod(method: ClassProtoAssignOp): void; recordConstructor(ctor: Constructor): void; pushCurrentClass(): ParseState; dropCurrentClass(): ParseState; static initialState(): ParseState; } declare class ParseContext { readonly source: string; readonly linesAndColumns: LinesAndColumns; readonly sourceTokens: SourceTokenList; readonly ast: Block$1; readonly parseState: ParseState; constructor(source: string, linesAndColumns: LinesAndColumns, sourceTokens: SourceTokenList, ast: Block$1, parseState: ParseState); getRange(locatable: Base | LocationData): [number, number] | null; static fromSource(source: string, sourceLex: (source: string) => SourceTokenList, parse: (source: string) => Block$1): ParseContext; updateState(updater: (oldState: ParseState) => ParseState): ParseContext; } declare abstract class Node { readonly type: string; readonly line: number; readonly column: number; readonly start: number; readonly end: number; readonly raw: string; parentNode: Node | null; constructor(type: string, line: number, column: number, start: number, end: number, raw: string); getChildren(): Array<Node>; getChildFields(): Array<Node | Array<Node | null> | null>; /** * Return the names of the properties container child nodes, in traversal * order. */ abstract getChildNames(): Array<string>; } declare class Identifier extends Node { readonly data: string; constructor(line: number, column: number, start: number, end: number, raw: string, data: string); getChildNames(): Array<keyof this & string>; } declare class Bool extends Node { readonly data: boolean; constructor(line: number, column: number, start: number, end: number, raw: string, data: boolean); static true(): Bool; static false(): Bool; getChildNames(): Array<keyof this & string>; } declare class JavaScript extends Node { readonly data: string; constructor(line: number, column: number, start: number, end: number, raw: string, data: string); getChildNames(): Array<keyof this & string>; } declare class Number extends Node { readonly data: number; constructor(type: string, line: number, column: number, start: number, end: number, raw: string, data: number); getChildNames(): Array<keyof this & string>; } declare class Float extends Number { constructor(line: number, column: number, start: number, end: number, raw: string, data: number); } declare class Int extends Number { constructor(line: number, column: number, start: number, end: number, raw: string, data: number); } declare abstract class AccessOp extends Node { readonly expression: Node; constructor(type: string, line: number, column: number, start: number, end: number, raw: string, expression: Node); } declare class MemberAccessOp extends AccessOp { readonly member: Identifier; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node, member: Identifier); getChildNames(): Array<keyof this & string>; } declare class ProtoMemberAccessOp extends AccessOp { constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); getChildNames(): Array<keyof this & string>; } declare class SoakedMemberAccessOp extends AccessOp { readonly member: Identifier; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node, member: Identifier); getChildNames(): Array<keyof this & string>; } declare class SoakedProtoMemberAccessOp extends AccessOp { constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); getChildNames(): Array<keyof this & string>; } declare class DynamicMemberAccessOp extends AccessOp { readonly indexingExpr: Node; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node, indexingExpr: Node); getChildNames(): Array<keyof this & string>; } declare class SoakedDynamicMemberAccessOp extends AccessOp { readonly indexingExpr: Node; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node, indexingExpr: Node); getChildNames(): Array<keyof this & string>; } declare class Quasi extends Node { readonly data: string; constructor(line: number, column: number, start: number, end: number, raw: string, data: string); getChildNames(): Array<keyof this & string>; } declare class String extends Node { readonly quasis: Array<Quasi>; readonly expressions: Array<Node | null>; constructor(line: number, column: number, start: number, end: number, raw: string, quasis: Array<Quasi>, expressions: Array<Node | null>); getChildNames(): Array<keyof this & string>; } declare class TaggedTemplateLiteral extends Node { readonly tag: Node; readonly template: String; constructor(line: number, column: number, start: number, end: number, raw: string, tag: Node, template: String); getChildNames(): Array<keyof this & string>; } declare class ObjectInitialiser extends Node { readonly members: Array<ObjectInitialiserMember | AssignOp | Spread>; constructor(line: number, column: number, start: number, end: number, raw: string, members: Array<ObjectInitialiserMember | AssignOp | Spread>); getChildNames(): Array<keyof this & string>; } declare class ObjectInitialiserMember extends Node { readonly key: Node; readonly expression: Node | null; readonly isComputed: boolean; constructor(line: number, column: number, start: number, end: number, raw: string, key: Node, expression: Node | null, isComputed: boolean); getChildNames(): Array<keyof this & string>; } declare class Conditional extends Node { readonly condition: Node; readonly consequent: Block | null; readonly alternate: Block | null; readonly isUnless: boolean; constructor(line: number, column: number, start: number, end: number, raw: string, condition: Node, consequent: Block | null, alternate: Block | null, isUnless: boolean); getChildNames(): Array<keyof this & string>; } declare class Program extends Node { readonly body: Block | null; context: ParseContext; constructor(line: number, column: number, start: number, end: number, raw: string, body: Block | null, context: ParseContext); getChildNames(): Array<keyof this & string>; } declare class Block extends Node { readonly statements: Array<Node>; readonly inline: boolean; constructor(line: number, column: number, start: number, end: number, raw: string, statements: Array<Node>, inline: boolean); getChildNames(): Array<keyof this & string>; withInline(inline: boolean): Block; } declare class Loop extends Node { readonly body: Node | null; constructor(line: number, column: number, start: number, end: number, raw: string, body: Node | null); getChildNames(): Array<keyof this & string>; } declare class While extends Node { readonly condition: Node; readonly guard: Node | null; readonly body: Node | null; readonly isUntil: boolean; constructor(line: number, column: number, start: number, end: number, raw: string, condition: Node, guard: Node | null, body: Node | null, isUntil: boolean); getChildNames(): Array<keyof this & string>; } declare abstract class For extends Node { readonly keyAssignee: Node | null; readonly valAssignee: Node | null; readonly target: Node; readonly filter: Node | null; readonly body: Block | null; constructor(type: string, line: number, column: number, start: number, end: number, raw: string, keyAssignee: Node | null, valAssignee: Node | null, target: Node, filter: Node | null, body: Block | null); } declare class ForOf extends For { readonly isOwn: boolean; constructor(line: number, column: number, start: number, end: number, raw: string, keyAssignee: Node | null, valAssignee: Node | null, target: Node, filter: Node | null, body: Block | null, isOwn: boolean); getChildNames(): Array<keyof this & string>; } declare class ForIn extends For { readonly step: Node | null; constructor(line: number, column: number, start: number, end: number, raw: string, keyAssignee: Node | null, valAssignee: Node | null, target: Node, filter: Node | null, body: Block | null, step: Node | null); getChildNames(): Array<keyof this & string>; } declare class ForFrom extends For { constructor(line: number, column: number, start: number, end: number, raw: string, valAssignee: Node | null, target: Node, filter: Node | null, body: Block | null); getChildNames(): Array<keyof this & string>; } declare class Switch extends Node { readonly expression: Node | null; readonly cases: Array<SwitchCase>; readonly alternate: Block | null; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node | null, cases: Array<SwitchCase>, alternate: Block | null); getChildNames(): Array<keyof this & string>; } declare class SwitchCase extends Node { readonly conditions: Array<Node>; readonly consequent: Block | null; constructor(line: number, column: number, start: number, end: number, raw: string, conditions: Array<Node>, consequent: Block | null); getChildNames(): Array<keyof this & string>; } declare class RegexFlags { readonly global: boolean; readonly ignoreCase: boolean; readonly multiline: boolean; readonly unicode: boolean; readonly sticky: boolean; readonly g: boolean; readonly i: boolean; readonly m: boolean; readonly u: boolean; readonly y: boolean; constructor(global: boolean, ignoreCase: boolean, multiline: boolean, unicode: boolean, sticky: boolean); static parse(flags: string): RegexFlags; } declare class Heregex extends Node { readonly quasis: Array<Quasi>; readonly expressions: Array<Node | null>; readonly flags: RegexFlags; constructor(line: number, column: number, start: number, end: number, raw: string, quasis: Array<Quasi>, expressions: Array<Node | null>, flags: RegexFlags); getChildNames(): Array<keyof this & string>; } declare class Null extends Node { constructor(line: number, column: number, start: number, end: number, raw: string); getChildNames(): Array<keyof this & string>; } declare class Undefined extends Node { constructor(line: number, column: number, start: number, end: number, raw: string); getChildNames(): Array<keyof this & string>; } declare class Regex extends Node { readonly pattern: string; readonly flags: RegexFlags; constructor(line: number, column: number, start: number, end: number, raw: string, pattern: string, flags: RegexFlags); getChildNames(): Array<keyof this & string>; } declare class Return extends Node { readonly expression: Node | null; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node | null); getChildNames(): Array<keyof this & string>; } declare class YieldReturn extends Node { readonly expression: Node | null; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node | null); getChildNames(): Array<keyof this & string>; } declare class AwaitReturn extends Node { readonly expression: Node | null; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node | null); getChildNames(): Array<keyof this & string>; } declare class This extends Node { constructor(line: number, column: number, start: number, end: number, raw: string); getChildNames(): Array<keyof this & string>; } declare class Throw extends Node { readonly expression: Node | null; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node | null); getChildNames(): Array<keyof this & string>; } declare class ArrayInitialiser extends Node { readonly members: Array<Node>; constructor(line: number, column: number, start: number, end: number, raw: string, members: Array<Node>); getChildNames(): Array<keyof this & string>; } declare class DefaultParam extends Node { readonly param: Node; readonly default: Node; constructor(line: number, column: number, start: number, end: number, raw: string, param: Node, defaultValue: Node); getChildNames(): Array<keyof this & string>; } declare class Rest extends Node { readonly expression: Node; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); getChildNames(): Array<keyof this & string>; } declare class Expansion extends Node { constructor(line: number, column: number, start: number, end: number, raw: string); getChildNames(): Array<keyof this & string>; } declare class Elision extends Node { constructor(line: number, column: number, start: number, end: number, raw: string); getChildNames(): Array<keyof this & string>; } declare class Break extends Node { constructor(line: number, column: number, start: number, end: number, raw: string); getChildNames(): Array<keyof this & string>; } declare class Continue extends Node { constructor(line: number, column: number, start: number, end: number, raw: string); getChildNames(): Array<keyof this & string>; } declare class Debugger extends Node { constructor(line: number, column: number, start: number, end: number, raw: string); getChildNames(): Array<keyof this & string>; } declare class Spread extends Node { readonly expression: Node; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); getChildNames(): Array<keyof this & string>; } declare class Range extends Node { readonly left: Node; readonly right: Node; readonly isInclusive: boolean; constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node, isInclusive: boolean); getChildNames(): Array<keyof this & string>; } declare abstract class BinaryOp extends Node { readonly left: Node; readonly right: Node; constructor(type: string, line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); getChildNames(): Array<string>; } declare abstract class UnaryOp extends Node { readonly expression: Node; constructor(type: string, line: number, column: number, start: number, end: number, raw: string, expression: Node); getChildNames(): Array<keyof this & string>; } declare class ChainedComparisonOp extends Node { readonly operands: Array<Node>; readonly operators: Array<OperatorInfo>; constructor(line: number, column: number, start: number, end: number, raw: string, operands: Array<Node>, operators: Array<OperatorInfo>); getChildNames(): Array<keyof this & string>; } declare class OperatorInfo { readonly operator: string; readonly token: SourceToken; constructor(operator: string, token: SourceToken); } declare type Op = UnaryOp | BinaryOp | ChainedComparisonOp; declare class EQOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class NEQOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class LTOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class LTEOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class GTOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class GTEOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class LogicalNotOp extends UnaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); } declare class LogicalAndOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class LogicalOrOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class SubtractOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class PlusOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class UnaryPlusOp extends UnaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); } declare class MultiplyOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class DivideOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class FloorDivideOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class ExistsOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class UnaryExistsOp extends UnaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); } declare class UnaryNegateOp extends UnaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); } declare class BitNotOp extends UnaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); } declare class BitAndOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class BitOrOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class BitXorOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class LeftShiftOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class SignedRightShiftOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class UnsignedRightShiftOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class PreDecrementOp extends UnaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); } declare class PreIncrementOp extends UnaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); } declare class PostDecrementOp extends UnaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); } declare class PostIncrementOp extends UnaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); } declare class ExpOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class RemOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class ModuloOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class InOp extends BinaryOp { readonly isNot: boolean; constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node, isNot: boolean); } declare class BaseAssignOp extends Node { readonly assignee: Node; readonly expression: Node; constructor(type: string, line: number, column: number, start: number, end: number, raw: string, assignee: Node, expression: Node); getChildNames(): Array<string>; } declare class AssignOp extends BaseAssignOp { constructor(line: number, column: number, start: number, end: number, raw: string, assignee: Node, expression: Node); withExpression(expression: Node): AssignOp; } declare class CompoundAssignOp extends BaseAssignOp { readonly op: string; constructor(line: number, column: number, start: number, end: number, raw: string, assignee: Node, expression: Node, op: string); } declare class ExtendsOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class SeqOp extends BinaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node); } declare class TypeofOp extends UnaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); } declare class InstanceofOp extends BinaryOp { readonly isNot: boolean; constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node, isNot: boolean); } declare class OfOp extends BinaryOp { readonly isNot: boolean; constructor(line: number, column: number, start: number, end: number, raw: string, left: Node, right: Node, isNot: boolean); } declare class DeleteOp extends UnaryOp { constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); } declare class Yield extends Node { readonly expression: Node | null; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node | null); getChildNames(): Array<keyof this & string>; } declare class YieldFrom extends Node { readonly expression: Node; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); getChildNames(): Array<keyof this & string>; } declare class Await extends Node { readonly expression: Node; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); getChildNames(): Array<keyof this & string>; } declare class Slice extends Node { readonly expression: Node; readonly left: Node | null; readonly right: Node | null; readonly isInclusive: boolean; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node, left: Node | null, right: Node | null, isInclusive: boolean); getChildNames(): Array<keyof this & string>; } declare class SoakedSlice extends Node { readonly expression: Node; readonly left: Node | null; readonly right: Node | null; readonly isInclusive: boolean; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node, left: Node | null, right: Node | null, isInclusive: boolean); getChildNames(): Array<keyof this & string>; } declare abstract class BaseFunction extends Node { readonly parameters: Array<Node>; readonly body: Block | null; constructor(type: string, line: number, column: number, start: number, end: number, raw: string, parameters: Array<Node>, body: Block | null); getChildNames(): Array<keyof this & string>; abstract withParameters(parameters: Array<Node>): BaseFunction; } declare class Function extends BaseFunction { constructor(line: number, column: number, start: number, end: number, raw: string, parameters: Array<Node>, body: Block | null); withParameters(parameters: Array<Node>): BaseFunction; } declare class BoundFunction extends BaseFunction { constructor(line: number, column: number, start: number, end: number, raw: string, parameters: Array<Node>, body: Block | null); withParameters(parameters: Array<Node>): BaseFunction; } declare class GeneratorFunction extends BaseFunction { constructor(line: number, column: number, start: number, end: number, raw: string, parameters: Array<Node>, body: Block | null); withParameters(parameters: Array<Node>): BaseFunction; } declare class BoundGeneratorFunction extends BaseFunction { constructor(line: number, column: number, start: number, end: number, raw: string, parameters: Array<Node>, body: Block | null); withParameters(parameters: Array<Node>): BaseFunction; } declare class AsyncFunction extends BaseFunction { constructor(line: number, column: number, start: number, end: number, raw: string, parameters: Array<Node>, body: Block | null); withParameters(parameters: Array<Node>): BaseFunction; } declare class BoundAsyncFunction extends BaseFunction { constructor(line: number, column: number, start: number, end: number, raw: string, parameters: Array<Node>, body: Block | null); withParameters(parameters: Array<Node>): BaseFunction; } declare class Try extends Node { readonly body: Node | null; readonly catchAssignee: Node | null; readonly catchBody: Node | null; readonly finallyBody: Node | null; constructor(line: number, column: number, start: number, end: number, raw: string, body: Node | null, catchAssignee: Node | null, catchBody: Node | null, finallyBody: Node | null); getChildNames(): Array<keyof this & string>; } declare class Constructor extends BaseAssignOp { constructor(line: number, column: number, start: number, end: number, raw: string, assignee: Node, expression: Node); } declare class ClassProtoAssignOp extends BaseAssignOp { constructor(line: number, column: number, start: number, end: number, raw: string, assignee: Node, expression: Node); } declare class Class extends Node { readonly nameAssignee: Node | null; readonly name: Node | null; readonly body: Block | null; readonly boundMembers: Array<ClassProtoAssignOp>; readonly parent: Node | null; readonly ctor: Constructor | null; constructor(line: number, column: number, start: number, end: number, raw: string, nameAssignee: Node | null, name: Node | null, body: Block | null, boundMembers: Array<ClassProtoAssignOp>, parent: Node | null, ctor: Constructor | null); getChildNames(): Array<keyof this & string>; } declare class FunctionApplication extends Node { readonly function: Node; readonly arguments: Array<Node>; constructor(line: number, column: number, start: number, end: number, raw: string, fn: Node, args: Array<Node>); getChildNames(): Array<keyof this & string>; } declare class SoakedFunctionApplication extends Node { readonly function: Node; readonly arguments: Array<Node>; constructor(line: number, column: number, start: number, end: number, raw: string, fn: Node, args: Array<Node>); getChildNames(): Array<keyof this & string>; } declare class Super extends Node { constructor(line: number, column: number, start: number, end: number, raw: string); getChildNames(): Array<keyof this & string>; } declare class BareSuperFunctionApplication extends Node { constructor(line: number, column: number, start: number, end: number, raw: string); getChildNames(): Array<keyof this & string>; } declare class NewOp extends Node { readonly ctor: Node; readonly arguments: Array<Node>; constructor(line: number, column: number, start: number, end: number, raw: string, ctor: Node, args: Array<Node>); getChildNames(): Array<keyof this & string>; } declare class SoakedNewOp extends Node { readonly ctor: Node; readonly arguments: Array<Node>; constructor(line: number, column: number, start: number, end: number, raw: string, ctor: Node, args: Array<Node>); getChildNames(): Array<keyof this & string>; } declare class DoOp extends Node { readonly expression: Node; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); getChildNames(): Array<keyof this & string>; } declare class ImportDeclaration extends Node { readonly defaultBinding: Identifier | null; readonly namespaceImport: Identifier | null; readonly namedImports: Array<ModuleSpecifier> | null; readonly source: String; constructor(line: number, column: number, start: number, end: number, raw: string, defaultBinding: Identifier | null, namespaceImport: Identifier | null, namedImports: Array<ModuleSpecifier> | null, source: String); getChildNames(): Array<keyof this & string>; } declare class ExportNamedDeclaration extends Node { readonly expression: Node; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); getChildNames(): Array<keyof this & string>; } declare class ExportBindingsDeclaration extends Node { readonly namedExports: Array<ModuleSpecifier>; readonly source: String | null; constructor(line: number, column: number, start: number, end: number, raw: string, namedExports: Array<ModuleSpecifier>, source: String | null); getChildNames(): Array<keyof this & string>; } declare class ExportDefaultDeclaration extends Node { readonly expression: Node; constructor(line: number, column: number, start: number, end: number, raw: string, expression: Node); getChildNames(): Array<keyof this & string>; } declare class ExportAllDeclaration extends Node { readonly source: String; constructor(line: number, column: number, start: number, end: number, raw: string, source: String); getChildNames(): Array<keyof this & string>; } declare class ModuleSpecifier extends Node { readonly original: Identifier; readonly alias: Identifier | null; constructor(line: number, column: number, start: number, end: number, raw: string, original: Identifier, alias: Identifier | null); getChildNames(): Array<keyof this & string>; } declare class CSXElement extends Node { readonly properties: Array<Node>; readonly children: Array<Node | null>; constructor(line: number, column: number, start: number, end: number, raw: string, properties: Array<Node>, children: Array<Node | null>); getChildNames(): Array<keyof this & string>; } declare type Options = { useCS2: boolean; }; declare const DEFAULT_OPTIONS: Options; declare function parse(source: string, options?: Options): Program; declare function traverse(node: Node, callback: (node: Node, parent: Node | null) => boolean | void): void; export { AccessOp, ArrayInitialiser, AssignOp, AsyncFunction, Await, AwaitReturn, BareSuperFunctionApplication, BaseAssignOp, BaseFunction, BinaryOp, BitAndOp, BitNotOp, BitOrOp, BitXorOp, Block, Bool, BoundAsyncFunction, BoundFunction, BoundGeneratorFunction, Break, CSXElement, ChainedComparisonOp, Class, ClassProtoAssignOp, CompoundAssignOp, Conditional, Constructor, Continue, DEFAULT_OPTIONS, Debugger, DefaultParam, DeleteOp, DivideOp, DoOp, DynamicMemberAccessOp, EQOp, Elision, ExistsOp, ExpOp, Expansion, ExportAllDeclaration, ExportBindingsDeclaration, ExportDefaultDeclaration, ExportNamedDeclaration, ExtendsOp, Float, FloorDivideOp, For, ForFrom, ForIn, ForOf, Function, FunctionApplication, GTEOp, GTOp, GeneratorFunction, Heregex, Identifier, ImportDeclaration, InOp, InstanceofOp, Int, JavaScript, LTEOp, LTOp, LeftShiftOp, LogicalAndOp, LogicalNotOp, LogicalOrOp, Loop, MemberAccessOp, ModuleSpecifier, ModuloOp, MultiplyOp, NEQOp, NewOp, Node, Null, Number, ObjectInitialiser, ObjectInitialiserMember, OfOp, Op, OperatorInfo, Options, PlusOp, PostDecrementOp, PostIncrementOp, PreDecrementOp, PreIncrementOp, Program, ProtoMemberAccessOp, Quasi, Range, Regex, RegexFlags, RemOp, Rest, Return, SeqOp, SignedRightShiftOp, Slice, SoakedDynamicMemberAccessOp, SoakedFunctionApplication, SoakedMemberAccessOp, SoakedNewOp, SoakedProtoMemberAccessOp, SoakedSlice, Spread, String, SubtractOp, Super, Switch, SwitchCase, TaggedTemplateLiteral, This, Throw, Try, TypeofOp, UnaryExistsOp, UnaryNegateOp, UnaryOp, UnaryPlusOp, Undefined, UnsignedRightShiftOp, While, Yield, YieldFrom, YieldReturn, parse, traverse };