pub struct BindingDecl {
pub outputs: Vec<(String, ExprSpan)>,
pub destructure: bool,
pub body: Expr,
pub leading_comment: Option<Comment>,
pub trailing_line_comment: Option<Comment>,
pub blank_line_before: bool,
pub span: ExprSpan,
}Expand description
binding = binding_target ":=" expression ";".
binding_target = identifier | "(" identifier "," [ identifier { "," identifier } ] ")".
The compiler deduces inputs from resolved cell references in body. The structural
AST records only the explicit output names, without resolving cell declarations.
Parenthesizing the left-hand side requests tuple destructuring, matching Rust’s tuple-pattern
syntax: (a, b) := ... and the single-element (a,) := ... (trailing comma mandatory,
exactly as in a Rust 1-tuple pattern) both destructure body’s tuple result element-wise into
outputs. A bare identifier binds body’s whole result directly to that one output instead.
A parenthesized binding target always requires a comma; (a) := ... is invalid.
See Self::destructure.
§Examples
See Module for both direct and destructuring binding targets.
Fields§
§outputs: Vec<(String, ExprSpan)>The binding’s output cell names (the left-hand side), in declaration order.
destructure: boolWhether the left-hand side requests destructuring ((a, b) := ... or (a,) := ...) as
opposed to a direct bind (a := ...). Always
true when outputs.len() > 1; when outputs.len() == 1, distinguishes “destructure
this single-element tuple” from “bind this whole value directly” — a distinction the
parenthesized-or-not left-hand side is the only way to express, since both forms name
exactly one output.
body: ExprThe parsed right-hand-side expression.
leading_comment: Option<Comment>A leading comment immediately preceding this binding, if recovered by
crate::trivia::attach_trivia.
trailing_line_comment: Option<Comment>A ////* */ comment on the same source line as this binding’s own last token, if
recovered by crate::trivia::attach_trivia. See
https://github.com/stlab/cel-rs/issues/59.
blank_line_before: boolWhether a blank line preceded this binding, if recovered by
crate::trivia::attach_trivia.
span: ExprSpanThe span of the whole a := ...; / (a, b) := ...; declaration.