import type { ScopeInfo, TypeCheckerContext } from "./types.js"; /** * Emit a diagnostic for every variable reference that doesn't resolve * — `let x = undefinedVar`, `print(missingThing)`, `for (item in * notArray)`, etc. * * Severity is controlled by `config.typechecker.undefinedVariables`: * - "silent" (default): no diagnostics emitted * - "warn": pushed as warnings * - "error": pushed as errors * * Resolution is delegated to `resolveVariable` (pure function in * resolveVariable.ts) — this module just walks the AST and translates * "didn't resolve" into a diagnostic. * * Skipped contexts (handled by other passes / not actually variable * lookups): * - `valueAccess.chain[i].kind === "property"` — property names like * `obj.x` are not variable references; the typechecker checks them * against the base's structural type elsewhere. * - The base of a `valueAccess` is checked here (it's the variable), * but only when it's a `variableName`. * - `functionCall.functionName` is checked by `checkUndefinedFunctions`, * not here. * - The `name` of a `namedArgument` is a parameter name, not a variable. * - Object literal keys (`{ key: value }`) are field names, not * variable refs. */ export declare function checkUndefinedVariables(scopes: ScopeInfo[], ctx: TypeCheckerContext): void;