import type { Rule } from 'eslint';
import type { CallbackHandlingOperation } from '../callback-handling-state.ts';
import { type TrackedBinding } from '../tracked-callback-reference-state.ts';
type TrackedCallbackFunctionBase = {
    readonly callbackBinding: TrackedBinding;
    readonly codePath: Readonly<Rule.CodePath>;
    readonly currentSegments: ReadonlySet<Rule.CodePathSegment>;
    readonly operationsBySegmentId: ReadonlyMap<string, readonly CallbackHandlingOperation[]>;
};
export type DirectTrackedCallbackFunction = TrackedCallbackFunctionBase & {
    readonly callbackName: string;
    readonly callbackNode: Rule.Node;
};
type InheritedTrackedCallbackFunction = TrackedCallbackFunctionBase & {
    readonly callbackName: undefined;
    readonly callbackNode: undefined;
};
export type TrackedCallbackFunction = DirectTrackedCallbackFunction | InheritedTrackedCallbackFunction;
type SharedCallbackTrackingOptions = {
    readonly ignorePending: boolean;
    readonly trackHandledCallbackArguments: boolean;
};
type CallbackTrackingOptions = (SharedCallbackTrackingOptions & {
    readonly includeInheritedCallbackBinding: false;
    readonly onTrackedFunctionEnd: (trackedFunction: Readonly<DirectTrackedCallbackFunction>) => void;
}) | (SharedCallbackTrackingOptions & {
    readonly includeInheritedCallbackBinding: true;
    readonly onTrackedFunctionEnd: (trackedFunction: Readonly<DirectTrackedCallbackFunction | InheritedTrackedCallbackFunction>) => void;
});
export declare function createTrackedCallbackVisitors(context: Readonly<Rule.RuleContext>, callbackTrackingOptions: Readonly<CallbackTrackingOptions>): Readonly<Rule.RuleListener>;
export {};
//# sourceMappingURL=callback-tracking.d.ts.map