export = CodePathAnalyzer

interface EventGenerator {
    emitter: import("node:events").EventEmitter
    enterNode(node: import("eslint").Rule.Node): void
    leaveNode(node: import("eslint").Rule.Node): void
}

/**
 * The class to analyze code paths.
 * This class implements the EventGenerator interface.
 */
declare class CodePathAnalyzer {
    /**
     * @param {EventGenerator} eventGenerator An event generator to wrap.
     */
    constructor(eventGenerator: EventGenerator)
    original: EventGenerator
    emitter: any
    codePath: any
    idGenerator: IdGenerator
    currentNode: any
    /**
     * This is called on a code path looped.
     * Then this raises a looped event.
     * @param {CodePathSegment} fromSegment A segment of prev.
     * @param {CodePathSegment} toSegment A segment of next.
     * @returns {void}
     */
    onLooped(fromSegment: CodePathSegment, toSegment: CodePathSegment): void
    /**
     * Does the process to enter a given AST node.
     * This updates state of analysis and calls `enterNode` of the wrapped.
     * @param {ASTNode} node A node which is entering.
     * @returns {void}
     */
    enterNode(node: import("eslint").Rule.Node): void
    /**
     * Does the process to leave a given AST node.
     * This updates state of analysis and calls `leaveNode` of the wrapped.
     * @param {ASTNode} node A node which is leaving.
     * @returns {void}
     */
    leaveNode(node: import("eslint").Rule.Node): void
}
import IdGenerator = require("./id-generator")
import CodePathSegment = require("./code-path-segment")
