import type { Diagnostic } from '../errors/diagnostic.js'; import { type ProgramNode } from '../ast/nodes.js'; export interface SemanticAnalyzerOptions { /** * Optional DataLex contract registry for resolving `datalex_contract` * references on blocks. When omitted, the analyzer accepts any contract * reference syntactically but emits a single project-level warning * suggesting the user load a DataLex manifest. When provided, unresolved * references on certified blocks become errors; on draft/review blocks * they become warnings (per manifest-spec/docs/interop.md rule 5). */ datalexRegistry?: import('../contracts/index.js').DataLexContractRegistry; } export declare class SemanticAnalyzer { private reporter; private scopes; private datalexRegistry?; constructor(options?: SemanticAnalyzerOptions); analyze(program: ProgramNode): Diagnostic[]; validate(program: ProgramNode): void; private analyzeWorkbook; private analyzePage; private analyzeBlockDecl; private analyzeBusinessViewDecl; private analyzeTermDecl; private analyzeDashboard; private analyzeBodyItems; private analyzeParamDecl; private analyzeChartCall; private analyzeFilterCall; private analyzeVariableDecl; private validateChartArgs; private validateSQLInterpolations; private validateDecorators; private resolveVariable; private pushScope; private popScope; private currentScope; } export declare function analyze(program: ProgramNode, options?: SemanticAnalyzerOptions): Diagnostic[]; /** * Cross-artifact trust-conflict detection. The per-file analyzer above cannot * see two files at once, so conflict detection (two certified terms / blocks * claiming the same concept but disagreeing) is a manifest-level pass. It is * surfaced here so semantic analysis has one entry point. See * `semantic/conflicts.ts` for the conservative heuristic. */ export { detectTrustConflicts } from './conflicts.js'; //# sourceMappingURL=analyzer.d.ts.map