113 lines
2.5 KiB
TypeScript
Executable File
113 lines
2.5 KiB
TypeScript
Executable File
import {Node} from 'acorn';
|
|
|
|
declare module "acorn-walk" {
|
|
type FullWalkerCallback<TState> = (
|
|
node: Node,
|
|
state: TState,
|
|
type: string
|
|
) => void;
|
|
|
|
type FullAncestorWalkerCallback<TState> = (
|
|
node: Node,
|
|
state: TState | Node[],
|
|
ancestors: Node[],
|
|
type: string
|
|
) => void;
|
|
type WalkerCallback<TState> = (node: Node, state: TState) => void;
|
|
|
|
type SimpleWalkerFn<TState> = (
|
|
node: Node,
|
|
state: TState
|
|
) => void;
|
|
|
|
type AncestorWalkerFn<TState> = (
|
|
node: Node,
|
|
state: TState| Node[],
|
|
ancestors: Node[]
|
|
) => void;
|
|
|
|
type RecursiveWalkerFn<TState> = (
|
|
node: Node,
|
|
state: TState,
|
|
callback: WalkerCallback<TState>
|
|
) => void;
|
|
|
|
type SimpleVisitors<TState> = {
|
|
[type: string]: SimpleWalkerFn<TState>
|
|
};
|
|
|
|
type AncestorVisitors<TState> = {
|
|
[type: string]: AncestorWalkerFn<TState>
|
|
};
|
|
|
|
type RecursiveVisitors<TState> = {
|
|
[type: string]: RecursiveWalkerFn<TState>
|
|
};
|
|
|
|
type FindPredicate = (type: string, node: Node) => boolean;
|
|
|
|
interface Found<TState> {
|
|
node: Node,
|
|
state: TState
|
|
}
|
|
|
|
export function simple<TState>(
|
|
node: Node,
|
|
visitors: SimpleVisitors<TState>,
|
|
base?: RecursiveVisitors<TState>,
|
|
state?: TState
|
|
): void;
|
|
|
|
export function ancestor<TState>(
|
|
node: Node,
|
|
visitors: AncestorVisitors<TState>,
|
|
base?: RecursiveVisitors<TState>,
|
|
state?: TState
|
|
): void;
|
|
|
|
export function recursive<TState>(
|
|
node: Node,
|
|
state: TState,
|
|
functions: RecursiveVisitors<TState>,
|
|
base?: RecursiveVisitors<TState>
|
|
): void;
|
|
|
|
export function full<TState>(
|
|
node: Node,
|
|
callback: FullWalkerCallback<TState>,
|
|
base?: RecursiveVisitors<TState>,
|
|
state?: TState
|
|
): void;
|
|
|
|
export function fullAncestor<TState>(
|
|
node: Node,
|
|
callback: FullAncestorWalkerCallback<TState>,
|
|
base?: RecursiveVisitors<TState>,
|
|
state?: TState
|
|
): void;
|
|
|
|
export function make<TState>(
|
|
functions: RecursiveVisitors<TState>,
|
|
base?: RecursiveVisitors<TState>
|
|
): RecursiveVisitors<TState>;
|
|
|
|
export function findNodeAt<TState>(
|
|
node: Node,
|
|
start: number | undefined,
|
|
end?: number | undefined,
|
|
type?: FindPredicate | string,
|
|
base?: RecursiveVisitors<TState>,
|
|
state?: TState
|
|
): Found<TState> | undefined;
|
|
|
|
export function findNodeAround<TState>(
|
|
node: Node,
|
|
start: number | undefined,
|
|
type?: FindPredicate | string,
|
|
base?: RecursiveVisitors<TState>,
|
|
state?: TState
|
|
): Found<TState> | undefined;
|
|
|
|
export const findNodeAfter: typeof findNodeAround;
|
|
}
|