docs: def match_rules_context(tree, rules, parent_context={}):
      """Recursively matches a Tree structure with rules and returns context
  
      Args:
          tree (Tree): Parsed tree structure
          rules (dict): See match_rules
          parent_context (dict): Context of parent call
      Returns:
          dict: Context matched dictionary of matched rules or
          None if no match
      """
      for template, match_rules in rules.items():
          context = parent_context.copy()
          if match_template(tree, template, context):
              for key, child_rules in match_rules.items():
                  child_context = match_rules_context(context[key], child_rules, context)
                  if child_context:
                      for k, v in child_context.items():
                          context[k] = v
                  else:
                      return None
              return context
      return None