CEL.Expr.MacroCall (CEL v0.2.0)

Copy Markdown View Source

A macro, as written: l.all(x, p), l.exists(x, p), l.exists_one(x, p), l.map(x, f), l.map(x, p, f), l.filter(x, p), the two-variable forms such as m.all(k, v, p), cel.bind(v, init, body), o.optMap(v, f) and o.optFlatMap(v, f).

function is the macro's name and target its receiver, or nil for cel.bind. args start with the variables the macro binds, as CEL.Expr.Ident nodes with scope: :local and their types, followed by the other arguments.

For a comprehension macro, expansion is the CEL.Expr.Comprehension it expands to, which evaluation runs; its subexpressions include the nodes in args. It is nil for cel.bind, optMap and optFlatMap. has(m.f) is not a MacroCall but a CEL.Expr.Select with test_only: true.

Summary

Types

t()

@type t() :: %CEL.Expr.MacroCall{
  args: [CEL.Expr.t()],
  expansion: CEL.Expr.Comprehension.t() | nil,
  function: String.t(),
  id: CEL.Checked.expr_id(),
  target: CEL.Expr.t() | nil,
  type: CEL.Expr.type()
}