import type { Comment, FunctionDeclaration, SourceLocation } from 'estree';
import { type StepperExpression, type StepperPattern, undefinedNode } from '..';
import type { StepperBaseNode } from '../../interface';
import { StepperArrowFunctionExpression } from '../Expression/ArrowFunctionExpression';
import { StepperIdentifier } from '../Expression/Identifier';
import { StepperBlockStatement } from './BlockStatement';
export declare class StepperFunctionDeclaration implements FunctionDeclaration, StepperBaseNode {
    type: 'FunctionDeclaration';
    id: StepperIdentifier;
    body: StepperBlockStatement;
    params: StepperPattern[];
    generator?: boolean | undefined;
    async?: boolean | undefined;
    leadingComments?: Comment[] | undefined;
    trailingComments?: Comment[] | undefined;
    loc?: SourceLocation | null | undefined;
    range?: [number, number] | undefined;
    constructor(id: StepperIdentifier, body: StepperBlockStatement, params: StepperPattern[], generator?: boolean | undefined, async?: boolean | undefined, leadingComments?: Comment[] | undefined, trailingComments?: Comment[] | undefined, loc?: SourceLocation | null | undefined, range?: [number, number] | undefined);
    static create(node: FunctionDeclaration): StepperFunctionDeclaration;
    isContractible(): boolean;
    isOneStepPossible(): boolean;
    getArrowFunctionExpression(): StepperArrowFunctionExpression;
    contract(): typeof undefinedNode;
    contractEmpty(): void;
    oneStep(): typeof undefinedNode;
    scanAllDeclarationNames(): string[];
    substitute(id: StepperPattern, value: StepperExpression, upperBoundName?: string[]): StepperBaseNode;
    freeNames(): string[];
    allNames(): string[];
    rename(before: string, after: string): StepperFunctionDeclaration;
}
