[
  {
    "type": "expression",
    "named": true,
    "subtypes": [
      {
        "type": "binary_expression",
        "named": true
      },
      {
        "type": "false",
        "named": true
      },
      {
        "type": "function_definition",
        "named": true
      },
      {
        "type": "nil",
        "named": true
      },
      {
        "type": "number",
        "named": true
      },
      {
        "type": "prefix_expression",
        "named": true
      },
      {
        "type": "string",
        "named": true
      },
      {
        "type": "table",
        "named": true
      },
      {
        "type": "true",
        "named": true
      },
      {
        "type": "unary_expression",
        "named": true
      },
      {
        "type": "vararg_expression",
        "named": true
      }
    ]
  },
  {
    "type": "prefix_expression",
    "named": true,
    "subtypes": [
      {
        "type": "call",
        "named": true
      },
      {
        "type": "parenthesized_expression",
        "named": true
      },
      {
        "type": "variable",
        "named": true
      }
    ]
  },
  {
    "type": "statement",
    "named": true,
    "subtypes": [
      {
        "type": "break_statement",
        "named": true
      },
      {
        "type": "call",
        "named": true
      },
      {
        "type": "do_statement",
        "named": true
      },
      {
        "type": "empty_statement",
        "named": true
      },
      {
        "type": "for_generic_statement",
        "named": true
      },
      {
        "type": "for_numeric_statement",
        "named": true
      },
      {
        "type": "function_definition_statement",
        "named": true
      },
      {
        "type": "goto_statement",
        "named": true
      },
      {
        "type": "if_statement",
        "named": true
      },
      {
        "type": "label_statement",
        "named": true
      },
      {
        "type": "local_function_definition_statement",
        "named": true
      },
      {
        "type": "local_variable_declaration",
        "named": true
      },
      {
        "type": "repeat_statement",
        "named": true
      },
      {
        "type": "variable_assignment",
        "named": true
      },
      {
        "type": "while_statement",
        "named": true
      }
    ]
  },
  {
    "type": "argument_list",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "expression_list",
          "named": true
        },
        {
          "type": "string",
          "named": true
        },
        {
          "type": "table",
          "named": true
        }
      ]
    }
  },
  {
    "type": "attribute",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "identifier",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "binary_expression",
    "named": true,
    "fields": {
      "left": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "operator": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "%",
            "named": false
          },
          {
            "type": "&",
            "named": false
          },
          {
            "type": "*",
            "named": false
          },
          {
            "type": "+",
            "named": false
          },
          {
            "type": "-",
            "named": false
          },
          {
            "type": "..",
            "named": false
          },
          {
            "type": "/",
            "named": false
          },
          {
            "type": "//",
            "named": false
          },
          {
            "type": "<",
            "named": false
          },
          {
            "type": "<<",
            "named": false
          },
          {
            "type": "<=",
            "named": false
          },
          {
            "type": "==",
            "named": false
          },
          {
            "type": ">",
            "named": false
          },
          {
            "type": ">=",
            "named": false
          },
          {
            "type": ">>",
            "named": false
          },
          {
            "type": "^",
            "named": false
          },
          {
            "type": "and",
            "named": false
          },
          {
            "type": "or",
            "named": false
          },
          {
            "type": "|",
            "named": false
          },
          {
            "type": "~",
            "named": false
          },
          {
            "type": "~=",
            "named": false
          }
        ]
      },
      "right": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "block",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "return_statement",
          "named": true
        },
        {
          "type": "statement",
          "named": true
        }
      ]
    }
  },
  {
    "type": "call",
    "named": true,
    "fields": {
      "arguments": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "argument_list",
            "named": true
          }
        ]
      },
      "function": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "call",
            "named": true
          },
          {
            "type": "parenthesized_expression",
            "named": true
          },
          {
            "type": "variable",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "chunk",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "return_statement",
          "named": true
        },
        {
          "type": "shebang",
          "named": true
        },
        {
          "type": "statement",
          "named": true
        }
      ]
    }
  },
  {
    "type": "comment",
    "named": true,
    "fields": {}
  },
  {
    "type": "do_statement",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "block",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "else_clause",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "block",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "elseif_clause",
    "named": true,
    "fields": {
      "condition": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "consequence": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "block",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "empty_statement",
    "named": true,
    "fields": {}
  },
  {
    "type": "expression_list",
    "named": true,
    "fields": {
      "value": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "expression",
          "named": true
        }
      ]
    }
  },
  {
    "type": "field",
    "named": true,
    "fields": {
      "key": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "expression",
            "named": true
          },
          {
            "type": "identifier",
            "named": true
          }
        ]
      },
      "value": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "field_list",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "field",
          "named": true
        }
      ]
    }
  },
  {
    "type": "for_generic_statement",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "block",
            "named": true
          }
        ]
      },
      "left": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "variable_list",
            "named": true
          }
        ]
      },
      "right": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression_list",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "for_numeric_statement",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "block",
            "named": true
          }
        ]
      },
      "end": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "identifier",
            "named": true
          }
        ]
      },
      "start": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "step": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "function_definition",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "block",
            "named": true
          }
        ]
      },
      "parameters": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "parameter_list",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "function_definition_statement",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "block",
            "named": true
          }
        ]
      },
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "identifier",
            "named": true
          },
          {
            "type": "variable",
            "named": true
          }
        ]
      },
      "parameters": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "parameter_list",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "goto_statement",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "identifier",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "if_statement",
    "named": true,
    "fields": {
      "alternative": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "else_clause",
            "named": true
          },
          {
            "type": "elseif_clause",
            "named": true
          }
        ]
      },
      "condition": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "consequence": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "block",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "label_statement",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "identifier",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "local_function_definition_statement",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "block",
            "named": true
          }
        ]
      },
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "identifier",
            "named": true
          }
        ]
      },
      "parameters": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "parameter_list",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "local_variable_declaration",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "expression_list",
          "named": true
        },
        {
          "type": "variable_list",
          "named": true
        }
      ]
    }
  },
  {
    "type": "parameter_list",
    "named": true,
    "fields": {
      "name": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "identifier",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "vararg_expression",
          "named": true
        }
      ]
    }
  },
  {
    "type": "parenthesized_expression",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "expression",
          "named": true
        }
      ]
    }
  },
  {
    "type": "repeat_statement",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "block",
            "named": true
          }
        ]
      },
      "condition": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "return_statement",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "empty_statement",
          "named": true
        },
        {
          "type": "expression_list",
          "named": true
        }
      ]
    }
  },
  {
    "type": "string",
    "named": true,
    "fields": {}
  },
  {
    "type": "table",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "field_list",
          "named": true
        }
      ]
    }
  },
  {
    "type": "unary_expression",
    "named": true,
    "fields": {
      "argument": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "operator": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "#",
            "named": false
          },
          {
            "type": "-",
            "named": false
          },
          {
            "type": "not",
            "named": false
          },
          {
            "type": "~",
            "named": false
          }
        ]
      }
    }
  },
  {
    "type": "variable",
    "named": true,
    "fields": {
      "field": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "expression",
            "named": true
          },
          {
            "type": "identifier",
            "named": true
          }
        ]
      },
      "method": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "identifier",
            "named": true
          }
        ]
      },
      "name": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "identifier",
            "named": true
          }
        ]
      },
      "table": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "identifier",
            "named": true
          },
          {
            "type": "prefix_expression",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "attribute",
          "named": true
        }
      ]
    }
  },
  {
    "type": "variable_assignment",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "expression_list",
          "named": true
        },
        {
          "type": "variable_list",
          "named": true
        }
      ]
    }
  },
  {
    "type": "variable_list",
    "named": true,
    "fields": {
      "name": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "identifier",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "variable",
          "named": true
        }
      ]
    }
  },
  {
    "type": "while_statement",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "block",
            "named": true
          }
        ]
      },
      "condition": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "#",
    "named": false
  },
  {
    "type": "%",
    "named": false
  },
  {
    "type": "&",
    "named": false
  },
  {
    "type": "(",
    "named": false
  },
  {
    "type": ")",
    "named": false
  },
  {
    "type": "*",
    "named": false
  },
  {
    "type": "+",
    "named": false
  },
  {
    "type": ",",
    "named": false
  },
  {
    "type": "-",
    "named": false
  },
  {
    "type": ".",
    "named": false
  },
  {
    "type": "..",
    "named": false
  },
  {
    "type": "/",
    "named": false
  },
  {
    "type": "//",
    "named": false
  },
  {
    "type": ":",
    "named": false
  },
  {
    "type": "::",
    "named": false
  },
  {
    "type": ";",
    "named": false
  },
  {
    "type": "<",
    "named": false
  },
  {
    "type": "<<",
    "named": false
  },
  {
    "type": "<=",
    "named": false
  },
  {
    "type": "=",
    "named": false
  },
  {
    "type": "==",
    "named": false
  },
  {
    "type": ">",
    "named": false
  },
  {
    "type": ">=",
    "named": false
  },
  {
    "type": ">>",
    "named": false
  },
  {
    "type": "[",
    "named": false
  },
  {
    "type": "]",
    "named": false
  },
  {
    "type": "^",
    "named": false
  },
  {
    "type": "and",
    "named": false
  },
  {
    "type": "break_statement",
    "named": true
  },
  {
    "type": "do",
    "named": false
  },
  {
    "type": "else",
    "named": false
  },
  {
    "type": "elseif",
    "named": false
  },
  {
    "type": "end",
    "named": false
  },
  {
    "type": "false",
    "named": true
  },
  {
    "type": "for",
    "named": false
  },
  {
    "type": "function",
    "named": false
  },
  {
    "type": "goto",
    "named": false
  },
  {
    "type": "identifier",
    "named": true
  },
  {
    "type": "if",
    "named": false
  },
  {
    "type": "in",
    "named": false
  },
  {
    "type": "local",
    "named": false
  },
  {
    "type": "nil",
    "named": true
  },
  {
    "type": "not",
    "named": false
  },
  {
    "type": "number",
    "named": true
  },
  {
    "type": "or",
    "named": false
  },
  {
    "type": "repeat",
    "named": false
  },
  {
    "type": "return",
    "named": false
  },
  {
    "type": "shebang",
    "named": true
  },
  {
    "type": "then",
    "named": false
  },
  {
    "type": "true",
    "named": true
  },
  {
    "type": "until",
    "named": false
  },
  {
    "type": "vararg_expression",
    "named": true
  },
  {
    "type": "while",
    "named": false
  },
  {
    "type": "{",
    "named": false
  },
  {
    "type": "|",
    "named": false
  },
  {
    "type": "}",
    "named": false
  },
  {
    "type": "~",
    "named": false
  },
  {
    "type": "~=",
    "named": false
  }
]