[
  {
    "type": "argument",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "bracket_argument",
          "named": true
        },
        {
          "type": "quoted_argument",
          "named": true
        },
        {
          "type": "unquoted_argument",
          "named": true
        }
      ]
    }
  },
  {
    "type": "argument_list",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "argument",
          "named": true
        },
        {
          "type": "bracket_comment",
          "named": true
        },
        {
          "type": "line_comment",
          "named": true
        }
      ]
    }
  },
  {
    "type": "block_command",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "argument_list",
          "named": true
        },
        {
          "type": "block",
          "named": true
        }
      ]
    }
  },
  {
    "type": "block_def",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "block_command",
          "named": true
        },
        {
          "type": "body",
          "named": true
        },
        {
          "type": "endblock_command",
          "named": true
        }
      ]
    }
  },
  {
    "type": "body",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "block_def",
          "named": true
        },
        {
          "type": "bracket_comment",
          "named": true
        },
        {
          "type": "foreach_loop",
          "named": true
        },
        {
          "type": "function_def",
          "named": true
        },
        {
          "type": "if_condition",
          "named": true
        },
        {
          "type": "line_comment",
          "named": true
        },
        {
          "type": "macro_def",
          "named": true
        },
        {
          "type": "normal_command",
          "named": true
        },
        {
          "type": "while_loop",
          "named": true
        }
      ]
    }
  },
  {
    "type": "bracket_argument",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "bracket_argument_close",
          "named": true
        },
        {
          "type": "bracket_argument_content",
          "named": true
        },
        {
          "type": "bracket_argument_open",
          "named": true
        }
      ]
    }
  },
  {
    "type": "bracket_comment",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "bracket_comment_close",
          "named": true
        },
        {
          "type": "bracket_comment_content",
          "named": true
        },
        {
          "type": "bracket_comment_open",
          "named": true
        }
      ]
    }
  },
  {
    "type": "cache_var",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "variable",
          "named": true
        }
      ]
    }
  },
  {
    "type": "else_command",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "argument_list",
          "named": true
        },
        {
          "type": "else",
          "named": true
        }
      ]
    }
  },
  {
    "type": "elseif_command",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "argument_list",
          "named": true
        },
        {
          "type": "elseif",
          "named": true
        }
      ]
    }
  },
  {
    "type": "endblock_command",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "argument_list",
          "named": true
        },
        {
          "type": "endblock",
          "named": true
        }
      ]
    }
  },
  {
    "type": "endforeach_command",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "argument",
          "named": true
        },
        {
          "type": "endforeach",
          "named": true
        }
      ]
    }
  },
  {
    "type": "endfunction_command",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "argument_list",
          "named": true
        },
        {
          "type": "endfunction",
          "named": true
        }
      ]
    }
  },
  {
    "type": "endif_command",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "argument_list",
          "named": true
        },
        {
          "type": "endif",
          "named": true
        }
      ]
    }
  },
  {
    "type": "endmacro_command",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "argument_list",
          "named": true
        },
        {
          "type": "endmacro",
          "named": true
        }
      ]
    }
  },
  {
    "type": "endwhile_command",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "argument",
          "named": true
        },
        {
          "type": "endwhile",
          "named": true
        }
      ]
    }
  },
  {
    "type": "env_var",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "variable",
          "named": true
        }
      ]
    }
  },
  {
    "type": "escape_sequence",
    "named": true,
    "fields": {}
  },
  {
    "type": "foreach_command",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "argument_list",
          "named": true
        },
        {
          "type": "foreach",
          "named": true
        }
      ]
    }
  },
  {
    "type": "foreach_loop",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "body",
          "named": true
        },
        {
          "type": "endforeach_command",
          "named": true
        },
        {
          "type": "foreach_command",
          "named": true
        }
      ]
    }
  },
  {
    "type": "function_command",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "argument_list",
          "named": true
        },
        {
          "type": "function",
          "named": true
        }
      ]
    }
  },
  {
    "type": "function_def",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "body",
          "named": true
        },
        {
          "type": "endfunction_command",
          "named": true
        },
        {
          "type": "function_command",
          "named": true
        }
      ]
    }
  },
  {
    "type": "if_command",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "argument_list",
          "named": true
        },
        {
          "type": "if",
          "named": true
        }
      ]
    }
  },
  {
    "type": "if_condition",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "body",
          "named": true
        },
        {
          "type": "else_command",
          "named": true
        },
        {
          "type": "elseif_command",
          "named": true
        },
        {
          "type": "endif_command",
          "named": true
        },
        {
          "type": "if_command",
          "named": true
        }
      ]
    }
  },
  {
    "type": "macro_command",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "argument_list",
          "named": true
        },
        {
          "type": "macro",
          "named": true
        }
      ]
    }
  },
  {
    "type": "macro_def",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "body",
          "named": true
        },
        {
          "type": "endmacro_command",
          "named": true
        },
        {
          "type": "macro_command",
          "named": true
        }
      ]
    }
  },
  {
    "type": "normal_command",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "argument_list",
          "named": true
        },
        {
          "type": "identifier",
          "named": true
        }
      ]
    }
  },
  {
    "type": "normal_var",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "variable",
          "named": true
        }
      ]
    }
  },
  {
    "type": "quoted_argument",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "quoted_element",
          "named": true
        }
      ]
    }
  },
  {
    "type": "quoted_element",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "escape_sequence",
          "named": true
        },
        {
          "type": "variable_ref",
          "named": true
        }
      ]
    }
  },
  {
    "type": "source_file",
    "named": true,
    "root": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "block_def",
          "named": true
        },
        {
          "type": "bracket_comment",
          "named": true
        },
        {
          "type": "foreach_loop",
          "named": true
        },
        {
          "type": "function_def",
          "named": true
        },
        {
          "type": "if_condition",
          "named": true
        },
        {
          "type": "line_comment",
          "named": true
        },
        {
          "type": "macro_def",
          "named": true
        },
        {
          "type": "normal_command",
          "named": true
        },
        {
          "type": "while_loop",
          "named": true
        }
      ]
    }
  },
  {
    "type": "unquoted_argument",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "escape_sequence",
          "named": true
        },
        {
          "type": "variable_ref",
          "named": true
        }
      ]
    }
  },
  {
    "type": "variable",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "escape_sequence",
          "named": true
        },
        {
          "type": "variable_ref",
          "named": true
        }
      ]
    }
  },
  {
    "type": "variable_ref",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "cache_var",
          "named": true
        },
        {
          "type": "env_var",
          "named": true
        },
        {
          "type": "normal_var",
          "named": true
        }
      ]
    }
  },
  {
    "type": "while_command",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "argument_list",
          "named": true
        },
        {
          "type": "while",
          "named": true
        }
      ]
    }
  },
  {
    "type": "while_loop",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "body",
          "named": true
        },
        {
          "type": "endwhile_command",
          "named": true
        },
        {
          "type": "while_command",
          "named": true
        }
      ]
    }
  },
  {
    "type": "\"",
    "named": false
  },
  {
    "type": "$",
    "named": false
  },
  {
    "type": "(",
    "named": false
  },
  {
    "type": ")",
    "named": false
  },
  {
    "type": ";",
    "named": false
  },
  {
    "type": "CACHE",
    "named": false
  },
  {
    "type": "ENV",
    "named": false
  },
  {
    "type": "\\;",
    "named": false
  },
  {
    "type": "\\n",
    "named": false
  },
  {
    "type": "\\r",
    "named": false
  },
  {
    "type": "\\t",
    "named": false
  },
  {
    "type": "block",
    "named": true
  },
  {
    "type": "bracket_argument_close",
    "named": true
  },
  {
    "type": "bracket_argument_content",
    "named": true
  },
  {
    "type": "bracket_argument_open",
    "named": true
  },
  {
    "type": "bracket_comment_close",
    "named": true
  },
  {
    "type": "bracket_comment_content",
    "named": true
  },
  {
    "type": "bracket_comment_open",
    "named": true
  },
  {
    "type": "else",
    "named": true
  },
  {
    "type": "elseif",
    "named": true
  },
  {
    "type": "endblock",
    "named": true
  },
  {
    "type": "endforeach",
    "named": true
  },
  {
    "type": "endfunction",
    "named": true
  },
  {
    "type": "endif",
    "named": true
  },
  {
    "type": "endmacro",
    "named": true
  },
  {
    "type": "endwhile",
    "named": true
  },
  {
    "type": "foreach",
    "named": true
  },
  {
    "type": "function",
    "named": true
  },
  {
    "type": "identifier",
    "named": true
  },
  {
    "type": "if",
    "named": true
  },
  {
    "type": "line_comment",
    "named": true
  },
  {
    "type": "macro",
    "named": true
  },
  {
    "type": "while",
    "named": true
  },
  {
    "type": "{",
    "named": false
  },
  {
    "type": "}",
    "named": false
  }
]