decaffeinate-parser
Version:
A better AST for CoffeeScript, inspired by CoffeeScriptRedux.
645 lines (640 loc) • 33.3 kB
TypeScript
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 };