/** Slice 6 — `effects=pure` validator. * * Spec: docs/language/effects-pure-spec.md * * Walks every `fn` / `derive` / `memo` node with `effects=pure` and rejects: * 1. `effects=...` on any other node type (allowed list is `fn|derive|memo`) * 2. `effects=` (slice 6 only accepts the literal `pure`) — * includes empty string and ExprObject `effects={{ ... }}` per spec. * 3. `async=true` / `stream=true` combined with `effects=pure` (incompatible) * 4. handler / cleanup / expr body containing any of the FORBIDDEN_PATTERNS, * checked AFTER stripping comments and string literals to avoid false * positives on commented-out code or string content. * * This is a static walker — same shape as the `batch=true` rejection in * packages/terminal/src/transpiler-ink.ts. Limitations are documented in * the spec doc and are intentional. * * Does NOT change codegen — bodies that pass the walker emit unchanged. */ import type { ParseState } from './parser-diagnostics.js'; import { type IRNode } from './types.js'; export declare function validateEffects(state: ParseState, root: IRNode): void;