[
  {
    "type": "_arg",
    "named": true,
    "subtypes": [
      {
        "type": "_primary",
        "named": true
      },
      {
        "type": "assignment",
        "named": true
      },
      {
        "type": "binary",
        "named": true
      },
      {
        "type": "conditional",
        "named": true
      },
      {
        "type": "operator_assignment",
        "named": true
      },
      {
        "type": "range",
        "named": true
      },
      {
        "type": "unary",
        "named": true
      }
    ]
  },
  {
    "type": "_lhs",
    "named": true,
    "subtypes": [
      {
        "type": "_variable",
        "named": true
      },
      {
        "type": "call",
        "named": true
      },
      {
        "type": "element_reference",
        "named": true
      },
      {
        "type": "false",
        "named": true
      },
      {
        "type": "method_call",
        "named": true
      },
      {
        "type": "nil",
        "named": true
      },
      {
        "type": "scope_resolution",
        "named": true
      },
      {
        "type": "true",
        "named": true
      }
    ]
  },
  {
    "type": "_method_name",
    "named": true,
    "subtypes": [
      {
        "type": "class_variable",
        "named": true
      },
      {
        "type": "constant",
        "named": true
      },
      {
        "type": "global_variable",
        "named": true
      },
      {
        "type": "identifier",
        "named": true
      },
      {
        "type": "instance_variable",
        "named": true
      },
      {
        "type": "operator",
        "named": true
      },
      {
        "type": "setter",
        "named": true
      },
      {
        "type": "symbol",
        "named": true
      }
    ]
  },
  {
    "type": "_primary",
    "named": true,
    "subtypes": [
      {
        "type": "_lhs",
        "named": true
      },
      {
        "type": "array",
        "named": true
      },
      {
        "type": "begin",
        "named": true
      },
      {
        "type": "break",
        "named": true
      },
      {
        "type": "case",
        "named": true
      },
      {
        "type": "chained_string",
        "named": true
      },
      {
        "type": "character",
        "named": true
      },
      {
        "type": "class",
        "named": true
      },
      {
        "type": "complex",
        "named": true
      },
      {
        "type": "float",
        "named": true
      },
      {
        "type": "for",
        "named": true
      },
      {
        "type": "hash",
        "named": true
      },
      {
        "type": "heredoc_beginning",
        "named": true
      },
      {
        "type": "if",
        "named": true
      },
      {
        "type": "integer",
        "named": true
      },
      {
        "type": "lambda",
        "named": true
      },
      {
        "type": "method",
        "named": true
      },
      {
        "type": "module",
        "named": true
      },
      {
        "type": "next",
        "named": true
      },
      {
        "type": "parenthesized_statements",
        "named": true
      },
      {
        "type": "rational",
        "named": true
      },
      {
        "type": "redo",
        "named": true
      },
      {
        "type": "regex",
        "named": true
      },
      {
        "type": "retry",
        "named": true
      },
      {
        "type": "return",
        "named": true
      },
      {
        "type": "singleton_class",
        "named": true
      },
      {
        "type": "singleton_method",
        "named": true
      },
      {
        "type": "string",
        "named": true
      },
      {
        "type": "string_array",
        "named": true
      },
      {
        "type": "subshell",
        "named": true
      },
      {
        "type": "symbol",
        "named": true
      },
      {
        "type": "symbol_array",
        "named": true
      },
      {
        "type": "unary",
        "named": true
      },
      {
        "type": "unless",
        "named": true
      },
      {
        "type": "until",
        "named": true
      },
      {
        "type": "while",
        "named": true
      },
      {
        "type": "yield",
        "named": true
      }
    ]
  },
  {
    "type": "_statement",
    "named": true,
    "subtypes": [
      {
        "type": "_arg",
        "named": true
      },
      {
        "type": "alias",
        "named": true
      },
      {
        "type": "assignment",
        "named": true
      },
      {
        "type": "begin_block",
        "named": true
      },
      {
        "type": "binary",
        "named": true
      },
      {
        "type": "break",
        "named": true
      },
      {
        "type": "end_block",
        "named": true
      },
      {
        "type": "if_modifier",
        "named": true
      },
      {
        "type": "method_call",
        "named": true
      },
      {
        "type": "next",
        "named": true
      },
      {
        "type": "operator_assignment",
        "named": true
      },
      {
        "type": "rescue_modifier",
        "named": true
      },
      {
        "type": "return",
        "named": true
      },
      {
        "type": "undef",
        "named": true
      },
      {
        "type": "unless_modifier",
        "named": true
      },
      {
        "type": "until_modifier",
        "named": true
      },
      {
        "type": "while_modifier",
        "named": true
      },
      {
        "type": "yield",
        "named": true
      }
    ]
  },
  {
    "type": "_variable",
    "named": true,
    "subtypes": [
      {
        "type": "class_variable",
        "named": true
      },
      {
        "type": "constant",
        "named": true
      },
      {
        "type": "global_variable",
        "named": true
      },
      {
        "type": "identifier",
        "named": true
      },
      {
        "type": "instance_variable",
        "named": true
      },
      {
        "type": "self",
        "named": true
      },
      {
        "type": "super",
        "named": true
      }
    ]
  },
  {
    "type": "alias",
    "named": true,
    "fields": {
      "alias": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_method_name",
            "named": true
          }
        ]
      },
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_method_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "argument_list",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_arg",
          "named": true
        },
        {
          "type": "block_argument",
          "named": true
        },
        {
          "type": "hash_splat_argument",
          "named": true
        },
        {
          "type": "method_call",
          "named": true
        },
        {
          "type": "pair",
          "named": true
        },
        {
          "type": "splat_argument",
          "named": true
        }
      ]
    }
  },
  {
    "type": "array",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_arg",
          "named": true
        },
        {
          "type": "block_argument",
          "named": true
        },
        {
          "type": "hash_splat_argument",
          "named": true
        },
        {
          "type": "pair",
          "named": true
        },
        {
          "type": "splat_argument",
          "named": true
        }
      ]
    }
  },
  {
    "type": "assignment",
    "named": true,
    "fields": {
      "left": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_lhs",
            "named": true
          },
          {
            "type": "left_assignment_list",
            "named": true
          }
        ]
      },
      "right": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          },
          {
            "type": "break",
            "named": true
          },
          {
            "type": "method_call",
            "named": true
          },
          {
            "type": "next",
            "named": true
          },
          {
            "type": "return",
            "named": true
          },
          {
            "type": "right_assignment_list",
            "named": true
          },
          {
            "type": "splat_argument",
            "named": true
          },
          {
            "type": "yield",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "bare_string",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "escape_sequence",
          "named": true
        },
        {
          "type": "interpolation",
          "named": true
        }
      ]
    }
  },
  {
    "type": "bare_symbol",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "escape_sequence",
          "named": true
        },
        {
          "type": "interpolation",
          "named": true
        }
      ]
    }
  },
  {
    "type": "begin",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_statement",
          "named": true
        },
        {
          "type": "else",
          "named": true
        },
        {
          "type": "empty_statement",
          "named": true
        },
        {
          "type": "ensure",
          "named": true
        },
        {
          "type": "rescue",
          "named": true
        }
      ]
    }
  },
  {
    "type": "begin_block",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_statement",
          "named": true
        },
        {
          "type": "empty_statement",
          "named": true
        }
      ]
    }
  },
  {
    "type": "binary",
    "named": true,
    "fields": {
      "left": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          },
          {
            "type": "break",
            "named": true
          },
          {
            "type": "method_call",
            "named": true
          },
          {
            "type": "next",
            "named": true
          },
          {
            "type": "return",
            "named": true
          },
          {
            "type": "yield",
            "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": "=~",
            "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
          }
        ]
      },
      "right": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          },
          {
            "type": "break",
            "named": true
          },
          {
            "type": "method_call",
            "named": true
          },
          {
            "type": "next",
            "named": true
          },
          {
            "type": "return",
            "named": true
          },
          {
            "type": "yield",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "block",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_statement",
          "named": true
        },
        {
          "type": "block_parameters",
          "named": true
        },
        {
          "type": "empty_statement",
          "named": true
        }
      ]
    }
  },
  {
    "type": "block_argument",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "_arg",
          "named": true
        }
      ]
    }
  },
  {
    "type": "block_parameter",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "identifier",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "block_parameters",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "block_parameter",
          "named": true
        },
        {
          "type": "destructured_parameter",
          "named": true
        },
        {
          "type": "hash_splat_parameter",
          "named": true
        },
        {
          "type": "identifier",
          "named": true
        },
        {
          "type": "keyword_parameter",
          "named": true
        },
        {
          "type": "optional_parameter",
          "named": true
        },
        {
          "type": "splat_parameter",
          "named": true
        }
      ]
    }
  },
  {
    "type": "break",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "argument_list",
          "named": true
        }
      ]
    }
  },
  {
    "type": "call",
    "named": true,
    "fields": {
      "method": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "argument_list",
            "named": true
          },
          {
            "type": "constant",
            "named": true
          },
          {
            "type": "identifier",
            "named": true
          },
          {
            "type": "operator",
            "named": true
          }
        ]
      },
      "receiver": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_primary",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "case",
    "named": true,
    "fields": {
      "value": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "_arg",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "else",
          "named": true
        },
        {
          "type": "when",
          "named": true
        }
      ]
    }
  },
  {
    "type": "chained_string",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "string",
          "named": true
        }
      ]
    }
  },
  {
    "type": "class",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "constant",
            "named": true
          },
          {
            "type": "scope_resolution",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_statement",
          "named": true
        },
        {
          "type": "else",
          "named": true
        },
        {
          "type": "empty_statement",
          "named": true
        },
        {
          "type": "ensure",
          "named": true
        },
        {
          "type": "rescue",
          "named": true
        },
        {
          "type": "superclass",
          "named": true
        }
      ]
    }
  },
  {
    "type": "conditional",
    "named": true,
    "fields": {
      "alternative": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          }
        ]
      },
      "condition": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          }
        ]
      },
      "consequence": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "destructured_left_assignment",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "_lhs",
          "named": true
        },
        {
          "type": "destructured_left_assignment",
          "named": true
        },
        {
          "type": "rest_assignment",
          "named": true
        }
      ]
    }
  },
  {
    "type": "destructured_parameter",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "block_parameter",
          "named": true
        },
        {
          "type": "destructured_parameter",
          "named": true
        },
        {
          "type": "hash_splat_parameter",
          "named": true
        },
        {
          "type": "identifier",
          "named": true
        },
        {
          "type": "keyword_parameter",
          "named": true
        },
        {
          "type": "optional_parameter",
          "named": true
        },
        {
          "type": "splat_parameter",
          "named": true
        }
      ]
    }
  },
  {
    "type": "do",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_statement",
          "named": true
        },
        {
          "type": "empty_statement",
          "named": true
        }
      ]
    }
  },
  {
    "type": "do_block",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_statement",
          "named": true
        },
        {
          "type": "block_parameters",
          "named": true
        },
        {
          "type": "else",
          "named": true
        },
        {
          "type": "empty_statement",
          "named": true
        },
        {
          "type": "ensure",
          "named": true
        },
        {
          "type": "rescue",
          "named": true
        }
      ]
    }
  },
  {
    "type": "element_reference",
    "named": true,
    "fields": {
      "object": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_primary",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_arg",
          "named": true
        },
        {
          "type": "block_argument",
          "named": true
        },
        {
          "type": "hash_splat_argument",
          "named": true
        },
        {
          "type": "pair",
          "named": true
        },
        {
          "type": "splat_argument",
          "named": true
        }
      ]
    }
  },
  {
    "type": "else",
    "named": true,
    "fields": {
      "condition": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": ";",
            "named": false
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_statement",
          "named": true
        },
        {
          "type": "empty_statement",
          "named": true
        }
      ]
    }
  },
  {
    "type": "elsif",
    "named": true,
    "fields": {
      "alternative": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "else",
            "named": true
          },
          {
            "type": "elsif",
            "named": true
          }
        ]
      },
      "condition": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_statement",
            "named": true
          }
        ]
      },
      "consequence": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "then",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "empty_statement",
    "named": true,
    "fields": {}
  },
  {
    "type": "end_block",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_statement",
          "named": true
        },
        {
          "type": "empty_statement",
          "named": true
        }
      ]
    }
  },
  {
    "type": "ensure",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_statement",
          "named": true
        },
        {
          "type": "empty_statement",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exception_variable",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "_lhs",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exceptions",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "_arg",
          "named": true
        },
        {
          "type": "splat_argument",
          "named": true
        }
      ]
    }
  },
  {
    "type": "for",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "do",
            "named": true
          }
        ]
      },
      "pattern": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "_lhs",
            "named": true
          },
          {
            "type": "destructured_left_assignment",
            "named": true
          },
          {
            "type": "rest_assignment",
            "named": true
          }
        ]
      },
      "value": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "in",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "hash",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "hash_splat_argument",
          "named": true
        },
        {
          "type": "pair",
          "named": true
        }
      ]
    }
  },
  {
    "type": "hash_splat_argument",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "_arg",
          "named": true
        }
      ]
    }
  },
  {
    "type": "hash_splat_parameter",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "identifier",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "if",
    "named": true,
    "fields": {
      "alternative": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "else",
            "named": true
          },
          {
            "type": "elsif",
            "named": true
          }
        ]
      },
      "condition": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_statement",
            "named": true
          }
        ]
      },
      "consequence": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "then",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "if_modifier",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_statement",
            "named": true
          }
        ]
      },
      "condition": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          },
          {
            "type": "break",
            "named": true
          },
          {
            "type": "method_call",
            "named": true
          },
          {
            "type": "next",
            "named": true
          },
          {
            "type": "return",
            "named": true
          },
          {
            "type": "yield",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "in",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "_arg",
          "named": true
        }
      ]
    }
  },
  {
    "type": "interpolation",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "_statement",
          "named": true
        }
      ]
    }
  },
  {
    "type": "keyword_parameter",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "identifier",
            "named": true
          }
        ]
      },
      "value": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "_arg",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "lambda",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "block",
            "named": true
          },
          {
            "type": "do_block",
            "named": true
          }
        ]
      },
      "parameters": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "lambda_parameters",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "lambda_parameters",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "block_parameter",
          "named": true
        },
        {
          "type": "destructured_parameter",
          "named": true
        },
        {
          "type": "hash_splat_parameter",
          "named": true
        },
        {
          "type": "identifier",
          "named": true
        },
        {
          "type": "keyword_parameter",
          "named": true
        },
        {
          "type": "optional_parameter",
          "named": true
        },
        {
          "type": "splat_parameter",
          "named": true
        }
      ]
    }
  },
  {
    "type": "left_assignment_list",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "_lhs",
          "named": true
        },
        {
          "type": "destructured_left_assignment",
          "named": true
        },
        {
          "type": "rest_assignment",
          "named": true
        }
      ]
    }
  },
  {
    "type": "method",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_method_name",
            "named": true
          }
        ]
      },
      "parameters": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "method_parameters",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_statement",
          "named": true
        },
        {
          "type": "else",
          "named": true
        },
        {
          "type": "empty_statement",
          "named": true
        },
        {
          "type": "ensure",
          "named": true
        },
        {
          "type": "rescue",
          "named": true
        }
      ]
    }
  },
  {
    "type": "method_call",
    "named": true,
    "fields": {
      "arguments": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "argument_list",
            "named": true
          }
        ]
      },
      "block": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "block",
            "named": true
          },
          {
            "type": "do_block",
            "named": true
          }
        ]
      },
      "method": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_variable",
            "named": true
          },
          {
            "type": "call",
            "named": true
          },
          {
            "type": "scope_resolution",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "method_parameters",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "block_parameter",
          "named": true
        },
        {
          "type": "destructured_parameter",
          "named": true
        },
        {
          "type": "hash_splat_parameter",
          "named": true
        },
        {
          "type": "identifier",
          "named": true
        },
        {
          "type": "keyword_parameter",
          "named": true
        },
        {
          "type": "optional_parameter",
          "named": true
        },
        {
          "type": "splat_parameter",
          "named": true
        }
      ]
    }
  },
  {
    "type": "module",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "constant",
            "named": true
          },
          {
            "type": "scope_resolution",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_statement",
          "named": true
        },
        {
          "type": "else",
          "named": true
        },
        {
          "type": "empty_statement",
          "named": true
        },
        {
          "type": "ensure",
          "named": true
        },
        {
          "type": "rescue",
          "named": true
        }
      ]
    }
  },
  {
    "type": "next",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "argument_list",
          "named": true
        }
      ]
    }
  },
  {
    "type": "operator",
    "named": true,
    "fields": {}
  },
  {
    "type": "operator_assignment",
    "named": true,
    "fields": {
      "left": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_lhs",
            "named": true
          }
        ]
      },
      "right": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          },
          {
            "type": "break",
            "named": true
          },
          {
            "type": "method_call",
            "named": true
          },
          {
            "type": "next",
            "named": true
          },
          {
            "type": "return",
            "named": true
          },
          {
            "type": "yield",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "optional_parameter",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "identifier",
            "named": true
          }
        ]
      },
      "value": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "pair",
    "named": true,
    "fields": {
      "key": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          },
          {
            "type": "string",
            "named": true
          },
          {
            "type": "symbol",
            "named": true
          }
        ]
      },
      "value": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "parenthesized_statements",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_statement",
          "named": true
        },
        {
          "type": "empty_statement",
          "named": true
        }
      ]
    }
  },
  {
    "type": "pattern",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "_arg",
          "named": true
        },
        {
          "type": "splat_argument",
          "named": true
        }
      ]
    }
  },
  {
    "type": "program",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_statement",
          "named": true
        },
        {
          "type": "empty_statement",
          "named": true
        },
        {
          "type": "uninterpreted",
          "named": true
        }
      ]
    }
  },
  {
    "type": "range",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "_arg",
          "named": true
        }
      ]
    }
  },
  {
    "type": "rational",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "integer",
          "named": true
        }
      ]
    }
  },
  {
    "type": "redo",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "argument_list",
          "named": true
        }
      ]
    }
  },
  {
    "type": "regex",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "escape_sequence",
          "named": true
        },
        {
          "type": "interpolation",
          "named": true
        }
      ]
    }
  },
  {
    "type": "rescue",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "then",
            "named": true
          }
        ]
      },
      "exceptions": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "exceptions",
            "named": true
          }
        ]
      },
      "variable": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "exception_variable",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "rescue_modifier",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_statement",
            "named": true
          }
        ]
      },
      "handler": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          },
          {
            "type": "break",
            "named": true
          },
          {
            "type": "method_call",
            "named": true
          },
          {
            "type": "next",
            "named": true
          },
          {
            "type": "return",
            "named": true
          },
          {
            "type": "yield",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "rest_assignment",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "_lhs",
          "named": true
        }
      ]
    }
  },
  {
    "type": "retry",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "argument_list",
          "named": true
        }
      ]
    }
  },
  {
    "type": "return",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "argument_list",
          "named": true
        }
      ]
    }
  },
  {
    "type": "right_assignment_list",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "_arg",
          "named": true
        },
        {
          "type": "splat_argument",
          "named": true
        }
      ]
    }
  },
  {
    "type": "scope_resolution",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "constant",
            "named": true
          },
          {
            "type": "identifier",
            "named": true
          }
        ]
      },
      "scope": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "_primary",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "setter",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "identifier",
          "named": true
        }
      ]
    }
  },
  {
    "type": "singleton_class",
    "named": true,
    "fields": {
      "value": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_statement",
          "named": true
        },
        {
          "type": "else",
          "named": true
        },
        {
          "type": "empty_statement",
          "named": true
        },
        {
          "type": "ensure",
          "named": true
        },
        {
          "type": "rescue",
          "named": true
        }
      ]
    }
  },
  {
    "type": "singleton_method",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_method_name",
            "named": true
          }
        ]
      },
      "object": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          },
          {
            "type": "_variable",
            "named": true
          }
        ]
      },
      "parameters": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "method_parameters",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_statement",
          "named": true
        },
        {
          "type": "else",
          "named": true
        },
        {
          "type": "empty_statement",
          "named": true
        },
        {
          "type": "ensure",
          "named": true
        },
        {
          "type": "rescue",
          "named": true
        }
      ]
    }
  },
  {
    "type": "splat_argument",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "_arg",
          "named": true
        }
      ]
    }
  },
  {
    "type": "splat_parameter",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "identifier",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "string",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "escape_sequence",
          "named": true
        },
        {
          "type": "interpolation",
          "named": true
        }
      ]
    }
  },
  {
    "type": "string_array",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "bare_string",
          "named": true
        }
      ]
    }
  },
  {
    "type": "subshell",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "escape_sequence",
          "named": true
        },
        {
          "type": "interpolation",
          "named": true
        }
      ]
    }
  },
  {
    "type": "superclass",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "_arg",
          "named": true
        }
      ]
    }
  },
  {
    "type": "symbol",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "escape_sequence",
          "named": true
        },
        {
          "type": "interpolation",
          "named": true
        }
      ]
    }
  },
  {
    "type": "symbol_array",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "bare_symbol",
          "named": true
        }
      ]
    }
  },
  {
    "type": "then",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "_statement",
          "named": true
        },
        {
          "type": "empty_statement",
          "named": true
        }
      ]
    }
  },
  {
    "type": "unary",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "_arg",
          "named": true
        },
        {
          "type": "float",
          "named": true
        },
        {
          "type": "integer",
          "named": true
        },
        {
          "type": "parenthesized_statements",
          "named": true
        }
      ]
    }
  },
  {
    "type": "undef",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "_method_name",
          "named": true
        }
      ]
    }
  },
  {
    "type": "unless",
    "named": true,
    "fields": {
      "alternative": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "else",
            "named": true
          },
          {
            "type": "elsif",
            "named": true
          }
        ]
      },
      "condition": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_statement",
            "named": true
          }
        ]
      },
      "consequence": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "then",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "unless_modifier",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_statement",
            "named": true
          }
        ]
      },
      "condition": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          },
          {
            "type": "break",
            "named": true
          },
          {
            "type": "method_call",
            "named": true
          },
          {
            "type": "next",
            "named": true
          },
          {
            "type": "return",
            "named": true
          },
          {
            "type": "yield",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "until",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "do",
            "named": true
          }
        ]
      },
      "condition": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "until_modifier",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_statement",
            "named": true
          }
        ]
      },
      "condition": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          },
          {
            "type": "break",
            "named": true
          },
          {
            "type": "method_call",
            "named": true
          },
          {
            "type": "next",
            "named": true
          },
          {
            "type": "return",
            "named": true
          },
          {
            "type": "yield",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "when",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "then",
            "named": true
          }
        ]
      },
      "pattern": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": ",",
            "named": false
          },
          {
            "type": "pattern",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "while",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "do",
            "named": true
          }
        ]
      },
      "condition": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "while_modifier",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_statement",
            "named": true
          }
        ]
      },
      "condition": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "_arg",
            "named": true
          },
          {
            "type": "break",
            "named": true
          },
          {
            "type": "method_call",
            "named": true
          },
          {
            "type": "next",
            "named": true
          },
          {
            "type": "return",
            "named": true
          },
          {
            "type": "yield",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "yield",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "argument_list",
          "named": true
        }
      ]
    }
  },
  {
    "type": "!",
    "named": false
  },
  {
    "type": "!=",
    "named": false
  },
  {
    "type": "!~",
    "named": false
  },
  {
    "type": "\"",
    "named": false
  },
  {
    "type": "#{",
    "named": false
  },
  {
    "type": "%",
    "named": false
  },
  {
    "type": "%=",
    "named": false
  },
  {
    "type": "%i(",
    "named": false
  },
  {
    "type": "%w(",
    "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": "::",
    "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": "BEGIN",
    "named": false
  },
  {
    "type": "END",
    "named": false
  },
  {
    "type": "[",
    "named": false
  },
  {
    "type": "[]",
    "named": false
  },
  {
    "type": "[]=",
    "named": false
  },
  {
    "type": "]",
    "named": false
  },
  {
    "type": "^",
    "named": false
  },
  {
    "type": "^=",
    "named": false
  },
  {
    "type": "__END__",
    "named": false
  },
  {
    "type": "`",
    "named": false
  },
  {
    "type": "alias",
    "named": false
  },
  {
    "type": "and",
    "named": false
  },
  {
    "type": "begin",
    "named": false
  },
  {
    "type": "break",
    "named": false
  },
  {
    "type": "case",
    "named": false
  },
  {
    "type": "character",
    "named": true
  },
  {
    "type": "class",
    "named": false
  },
  {
    "type": "class_variable",
    "named": true
  },
  {
    "type": "complex",
    "named": true
  },
  {
    "type": "constant",
    "named": true
  },
  {
    "type": "def",
    "named": false
  },
  {
    "type": "defined?",
    "named": false
  },
  {
    "type": "do",
    "named": false
  },
  {
    "type": "else",
    "named": false
  },
  {
    "type": "elsif",
    "named": false
  },
  {
    "type": "end",
    "named": false
  },
  {
    "type": "ensure",
    "named": false
  },
  {
    "type": "escape_sequence",
    "named": true
  },
  {
    "type": "false",
    "named": true
  },
  {
    "type": "float",
    "named": true
  },
  {
    "type": "for",
    "named": false
  },
  {
    "type": "global_variable",
    "named": true
  },
  {
    "type": "heredoc_beginning",
    "named": true
  },
  {
    "type": "heredoc_end",
    "named": true
  },
  {
    "type": "identifier",
    "named": true
  },
  {
    "type": "if",
    "named": false
  },
  {
    "type": "in",
    "named": false
  },
  {
    "type": "instance_variable",
    "named": true
  },
  {
    "type": "integer",
    "named": true
  },
  {
    "type": "module",
    "named": false
  },
  {
    "type": "next",
    "named": false
  },
  {
    "type": "nil",
    "named": true
  },
  {
    "type": "not",
    "named": false
  },
  {
    "type": "or",
    "named": false
  },
  {
    "type": "r",
    "named": false
  },
  {
    "type": "redo",
    "named": false
  },
  {
    "type": "rescue",
    "named": false
  },
  {
    "type": "retry",
    "named": false
  },
  {
    "type": "return",
    "named": false
  },
  {
    "type": "self",
    "named": true
  },
  {
    "type": "super",
    "named": true
  },
  {
    "type": "then",
    "named": false
  },
  {
    "type": "true",
    "named": true
  },
  {
    "type": "undef",
    "named": false
  },
  {
    "type": "uninterpreted",
    "named": true
  },
  {
    "type": "unless",
    "named": false
  },
  {
    "type": "until",
    "named": false
  },
  {
    "type": "when",
    "named": false
  },
  {
    "type": "while",
    "named": false
  },
  {
    "type": "yield",
    "named": false
  },
  {
    "type": "{",
    "named": false
  },
  {
    "type": "|",
    "named": false
  },
  {
    "type": "|=",
    "named": false
  },
  {
    "type": "||",
    "named": false
  },
  {
    "type": "||=",
    "named": false
  },
  {
    "type": "}",
    "named": false
  },
  {
    "type": "~",
    "named": false
  }
]