/** * Closure Convention Rules * Enforces closure best practices from docs/guide-conventions.md:237-286. */ import type { ValidationRule } from '../types.js'; /** * Warns on bare $ in stored closures without parameters. * Bare $ in stored closures has ambiguous binding - it refers to the * pipe value at closure invocation time, not definition time. * * Detection: * - Zero-parameter closures (|| { }) used outside dict context * - Body contains bare $ references (VariableNode with name '$') * * Valid patterns: * - Dict closures: [count: ||{ $.items -> .len }] ($ binds to dict) * - Parameterized closures: |x|{ $x } (explicit params) * - Inline blocks: -> { $ * 2 } (immediate evaluation) * * References: * - docs/guide-conventions.md:251-261 * - docs/topic-closures.md: Late binding section */ export declare const CLOSURE_BARE_DOLLAR: ValidationRule; /** * Enforces braces for complex closure bodies. * Simple expressions can use parentheses, but complex bodies need braces. * * Complex body criteria: * - Contains Block (multiple statements) * - Contains Conditional * - Contains loop constructs * * Simple bodies (parentheses OK): * - Single expression: |x|($x * 2) * - Single method chain: |s|($s.trim.lower) * * Complex bodies (braces required): * - Conditionals: |n| { ($n < 1) ? 1 ! ($n * $fact($n - 1)) } * - Multiple statements: |x| { $x => $y; $y * 2 } * * References: * - docs/guide-conventions.md:239-249 */ export declare const CLOSURE_BRACES: ValidationRule; /** * Detects closures created inside sequential collection bodies that may * suffer from late binding issues. Closures capture variables by reference, * so all closures created in a loop body share the final iteration value. * * Targets the sequential callables `seq` and `acc`. (`fan`/`filter` execute * in parallel, `fold` reduces to a single value, so late-binding pitfalls * are less common there.) * * Solution: Explicit capture per iteration: * [1, 2, 3] -> seq({ * $ => $item * || { $item } * }) */ export declare const CLOSURE_LATE_BINDING: ValidationRule;