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
}