fn _match_zero()

in crates/concrete-syntax/src/models/concrete_syntax/interpreter.rs [277:308]


fn _match_zero(
  ctx: &mut MatchingContext, var_name: &str, constraints: &[CsConstraint],
  remaining_pattern: &[ResolvedCsElement],
) -> Option<PatternMatchResult> {
  let mut zero_match_ctx = MatchingContext {
    cursor: ctx.cursor.clone(),
    source_code: ctx.source_code,
    top_node: ctx.top_node,
  };
  let empty_capture = create_empty_captured_node();
  let constraint_context = ConstraintContext {
    captured_node: &empty_capture,
    source_code: ctx.source_code,
    ast_root: ctx.top_node,
  };
  if satisfies_constraints(&empty_capture, constraints, Some(&constraint_context)) {
    let zero_match_result = match_cs_pattern(&mut zero_match_ctx, remaining_pattern, true);
    if let PatternMatchResult::Success {
      captures: mut zero_captures,
      consumed_nodes: last_matched_node_idx,
      range: None,
    } = zero_match_result
    {
      zero_captures.insert(var_name.to_string(), empty_capture);
      return Some(PatternMatchResult::success(
        zero_captures,
        last_matched_node_idx,
      ));
    }
  }
  None
}