import ts from 'typescript';
import { Logger } from './logger.js';
import type { DiagnosticCode } from './diagnosticCodes.js';
/**
 * Severity level for compiler diagnostics.
 * Errors prevent ASL generation; warnings do not.
 */
export type DiagnosticSeverity = 'error' | 'warning';
/**
 * A diagnostic message from the compiler.
 */
export interface CompilerDiagnostic {
    readonly file: string;
    readonly line: number;
    readonly column: number;
    readonly message: string;
    readonly severity: DiagnosticSeverity;
    readonly code: string;
}
/**
 * Holds shared state for the entire compilation run.
 *
 * Passed through all compiler stages. No dependency on ts.TransformationContext —
 * the compiler uses ts.createProgram() directly without program.emit().
 */
export declare class CompilerContext {
    readonly program: ts.Program;
    /** Maximum number of diagnostics before suppression. */
    static readonly MAX_DIAGNOSTICS = 200;
    readonly checker: ts.TypeChecker;
    readonly logger: Logger;
    private readonly _diagnostics;
    constructor(program: ts.Program, verbose?: boolean);
    get diagnostics(): readonly CompilerDiagnostic[];
    get errors(): readonly CompilerDiagnostic[];
    get warnings(): readonly CompilerDiagnostic[];
    /**
     * Add a diagnostic from an AST node.
     * Extracts file path, line, and column automatically.
     */
    addDiagnostic(node: ts.Node, message: string, severity: DiagnosticSeverity, code: string): void;
    /**
     * Add a diagnostic without an AST node (e.g., configuration errors).
     */
    addRawDiagnostic(file: string, line: number, column: number, message: string, severity: DiagnosticSeverity, code: string): void;
    /**
     * Convenience: add an error diagnostic from an AST node.
     */
    addError(node: ts.Node, message: string, code: DiagnosticCode | string): void;
    /**
     * Convenience: add a warning diagnostic from an AST node.
     */
    addWarning(node: ts.Node, message: string, code: DiagnosticCode | string): void;
    hasErrors(): boolean;
}
//# sourceMappingURL=compilerContext.d.ts.map