import ts = require('typescript'); /*** * This module is designed to match simple patterns on Typescript AST Tree * it functionality mirrors jsASTMatchers which allows you to match on jsAST */ export declare module Matching { type Node = ts.Node; type Expression = ts.Expression; type Identifier = ts.Identifier; type SyntaxKind = ts.SyntaxKind; type CallExpression = ts.CallExpression; interface NodeMatcher { doMatch(node: Node): any; } interface TypedMatcher extends NodeMatcher { /** * returns null or the value not null means that matched * @param node */ doMatch(node: Node): any; nodeType(): ts.SyntaxKind; } interface Transformer { (a: T): R; } interface NodeCallback { (node: Node): T; } interface NodesCallback { (nodes: Node[]): T; } /** * do match checks the node type and if node type is ok * calls match function otherwise it returns null */ class BasicMatcher { protected match(node: Node): any; nodeType(): ts.SyntaxKind; doMatch(n: Node): any; } class ClassDeclarationMatcher extends BasicMatcher implements TypedMatcher { protected match(node: Node): ts.ClassDeclaration; constructor(); nodeType(): ts.SyntaxKind; } class FieldMatcher extends BasicMatcher implements TypedMatcher { match(node: ts.PropertyDeclaration): ts.PropertyDeclaration; nodeType(): ts.SyntaxKind; } class AssignmentExpressionMatcher extends BasicMatcher implements TypedMatcher { private left; private right; private tr; match(node: ts.BinaryExpression): any; constructor(left: TypedMatcher, right: TypedMatcher, tr: Transformer); nodeType(): ts.SyntaxKind; } class VariableDeclarationMatcher extends BasicMatcher implements TypedMatcher { private left; private right; private tr; match(node: ts.VariableDeclaration): any; constructor(left: TypedMatcher, right: TypedMatcher, tr: Transformer); nodeType(): ts.SyntaxKind; } var SKIP: {}; function visit(n: Node, cb: NodeCallback): T; class PathNode { private _base; name: string; arguments: ReadonlyArray; _callExpression: ts.CallExpression; constructor(name: string, _base: Node); } class CallPath { private _baseNode; base: string; start(): number; startLocation(): ts.LineAndCharacter; endLocation(): ts.LineAndCharacter; end(): number; constructor(base: string, _baseNode: ts.Node); path: PathNode[]; toString(): string; } function memberFromExp(objMatcher: string, tr?: Transformer): TypedMatcher; class CallBaseMatcher implements TypedMatcher { private rootMatcher; doMatch(node: Expression): CallPath; nodeType(): ts.SyntaxKind; constructor(rootMatcher: TypedMatcher); } function ident(name: string): TypedMatcher; function anyNode(): TypedMatcher; function call(calleeMatcher: TypedMatcher, tr?: Transformer): TypedMatcher; function exprStmt(eM: TypedMatcher, tr?: Transformer): TypedMatcher; function assign(left: TypedMatcher, right: TypedMatcher, tr?: Transformer): TypedMatcher; function varDecl(left: TypedMatcher, right: TypedMatcher, tr?: Transformer): TypedMatcher; function field(): FieldMatcher; function classDeclaration(): ClassDeclarationMatcher; }