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 } [ "," ] ")".
Unlike the old method_decl this replaces, a binding names no explicit input cell list —
its inputs are whichever already-declared cells body references, deduced at compile time
(see crate::parser::AdamParser::parse_deduced_expr); this untyped CST parser has no cell
declarations to resolve against, so it records no input list at all, only the outputs.
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, or a single parenthesized identifier with no comma ((a) := ..., mere grouping), binds body’s whole result directly to that one output instead — see
Self::destructure.
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 := ... or the equivalent grouping (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.
Trait Implementations§
Source§impl Clone for BindingDecl
impl Clone for BindingDecl
Source§fn clone(&self) -> BindingDecl
fn clone(&self) -> BindingDecl
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more