{
"$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
"name": "rbs",
"word": "identifier",
"rules": {
"program": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "use_directive"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "decl"
}
}
]
},
{
"type": "SYMBOL",
"name": "inline_type"
},
{
"type": "SYMBOL",
"name": "inline_content"
}
]
},
"inline_content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "inline_type"
},
{
"type": "REPEAT1",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "inline_prefix"
},
{
"type": "SYMBOL",
"name": "inline_body"
}
]
}
}
]
},
"inline_type": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "inline_prefix"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "inline_body"
}
]
},
"inline_body": {
"type": "CHOICE",
"members": [
{
"type": "PREC",
"value": 6,
"content": {
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "override"
},
"named": true,
"value": "inline_override"
}
},
{
"type": "PREC",
"value": 6,
"content": {
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "skip"
},
"named": true,
"value": "inline_skip"
}
},
{
"type": "PREC",
"value": 6,
"content": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "generic"
},
"named": true,
"value": "inline_generic"
},
{
"type": "SYMBOL",
"name": "module_type_parameter"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "inline_doc_comment"
},
{
"type": "BLANK"
}
]
}
]
}
},
{
"type": "PREC",
"value": 5,
"content": {
"type": "SYMBOL",
"name": "inline_doc"
}
},
{
"type": "PREC",
"value": 4,
"content": {
"type": "SYMBOL",
"name": "method_type"
}
},
{
"type": "PREC",
"value": 3,
"content": {
"type": "SYMBOL",
"name": "method_type_body"
}
},
{
"type": "PREC",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "ivar_member"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "inline_doc_comment"
},
{
"type": "BLANK"
}
]
}
]
}
},
{
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "inline_class_annotation"
}
},
{
"type": "SYMBOL",
"name": "type"
}
]
}
}
]
},
"inline_doc": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "&"
},
"named": true,
"value": "block_operator"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "var_name"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "STRING",
"value": ":"
},
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "?"
},
"named": true,
"value": "optional_block_operator"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "inline_block_type"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "inline_doc_comment"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "\\*\\*?"
},
"named": true,
"value": "rest_operator"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "var_name"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "inline_doc_comment"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "!return"
},
"named": true,
"value": "var_name"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "inline_doc_comment"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "var_name"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "inline_doc_comment"
},
{
"type": "BLANK"
}
]
}
]
}
]
},
"inline_block_type": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "parameters"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "->"
},
{
"type": "SYMBOL",
"name": "type"
}
]
},
"inline_doc_comment": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "--"
},
{
"type": "PATTERN",
"value": ".*"
}
]
},
"inline_class_annotation": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "inherits"
},
{
"type": "STRING",
"value": "module-self"
},
{
"type": "STRING",
"value": "module"
},
{
"type": "STRING",
"value": "class"
}
]
},
"inline_prefix": {
"type": "TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "#:\\s*"
},
{
"type": "PATTERN",
"value": "#\\s*@rbs\\s*"
},
{
"type": "PATTERN",
"value": "#\\s*\\|\\s*"
}
]
}
},
"constant": {
"type": "PATTERN",
"value": "[A-Z]\\w*"
},
"interface": {
"type": "PATTERN",
"value": "_[A-Z]\\w*"
},
"self": {
"type": "STRING",
"value": "self"
},
"_no_parantheses_type": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "class_type"
},
{
"type": "SYMBOL",
"name": "interface_type"
},
{
"type": "SYMBOL",
"name": "alias_type"
},
{
"type": "SYMBOL",
"name": "singleton_type"
},
{
"type": "SYMBOL",
"name": "_literal"
},
{
"type": "SYMBOL",
"name": "union_type"
},
{
"type": "SYMBOL",
"name": "intersection_type"
},
{
"type": "SYMBOL",
"name": "optional_type"
},
{
"type": "SYMBOL",
"name": "record_type"
},
{
"type": "SYMBOL",
"name": "tuple_type"
},
{
"type": "SYMBOL",
"name": "builtin_type"
},
{
"type": "SYMBOL",
"name": "proc"
}
]
},
"_parantheses_type": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "_no_parantheses_type"
},
{
"type": "STRING",
"value": ")"
}
]
},
"type": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_no_parantheses_type"
},
{
"type": "SYMBOL",
"name": "_parantheses_type"
}
]
},
"builtin_type": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "self"
},
{
"type": "STRING",
"value": "instance"
},
{
"type": "STRING",
"value": "class"
},
{
"type": "STRING",
"value": "bool"
},
{
"type": "STRING",
"value": "class"
},
{
"type": "STRING",
"value": "untyped"
},
{
"type": "STRING",
"value": "__todo__"
},
{
"type": "STRING",
"value": "nil"
},
{
"type": "STRING",
"value": "top"
},
{
"type": "STRING",
"value": "bot"
},
{
"type": "STRING",
"value": "void"
}
]
},
"comment": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": -2,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "#"
},
{
"type": "PATTERN",
"value": ".*"
}
]
}
}
},
"class_type": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "class_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "type_arguments"
},
{
"type": "BLANK"
}
]
}
]
}
},
"interface_type": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "interface_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "type_arguments"
},
{
"type": "BLANK"
}
]
}
]
}
},
"alias_type": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "alias_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "type_arguments"
},
{
"type": "BLANK"
}
]
}
]
}
},
"singleton_type": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "singleton"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "class_name"
},
{
"type": "STRING",
"value": ")"
}
]
},
"union_type": {
"type": "PREC_LEFT",
"value": -1,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "type"
}
},
{
"type": "STRING",
"value": "|"
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "type"
}
}
]
}
},
"intersection_type": {
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "type"
}
},
{
"type": "STRING",
"value": "&"
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "type"
}
}
]
}
},
"optional_type": {
"type": "PREC",
"value": 3,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "?"
}
}
]
}
},
"tuple_type": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "type"
}
]
}
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "]"
}
]
},
"_record_type_single": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "?"
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "key",
"content": {
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "identifier"
},
"named": true,
"value": "record_key"
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "type"
}
}
]
},
"record_type": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_record_type_single"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "_record_type_single"
}
]
}
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "}"
}
]
},
"class_name": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "namespace"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "constant"
}
]
},
"interface_name": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "namespace"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "interface"
}
]
},
"alias_name": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "namespace"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
"type_variable": {
"type": "SYMBOL",
"name": "constant"
},
"_scope": {
"type": "TOKEN",
"content": {
"type": "STRING",
"value": "::"
}
},
"namespace": {
"type": "PREC_RIGHT",
"value": 2,
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_scope"
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "namespace"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "constant"
},
{
"type": "SYMBOL",
"name": "_scope"
}
]
}
]
}
},
"type_arguments": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "type"
}
]
}
}
]
},
{
"type": "STRING",
"value": "]"
}
]
},
"_literal": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "string_literal"
},
{
"type": "SYMBOL",
"name": "symbol_literal"
},
{
"type": "SYMBOL",
"name": "integer_literal"
},
{
"type": "STRING",
"value": "true"
},
{
"type": "STRING",
"value": "false"
}
]
},
"string_literal": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\""
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "double_quote_string_body"
},
{
"type": "SYMBOL",
"name": "escape_sequence"
}
]
}
},
{
"type": "STRING",
"value": "\""
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "single_quote_string_body"
},
{
"type": "SYMBOL",
"name": "escape_sequence"
}
]
}
},
{
"type": "STRING",
"value": "'"
}
]
}
]
},
"double_quote_string_body": {
"type": "TOKEN",
"content": {
"type": "PATTERN",
"value": "[^\"\\\\]+"
}
},
"single_quote_string_body": {
"type": "TOKEN",
"content": {
"type": "PATTERN",
"value": "[^'\\\\]+"
}
},
"symbol_literal": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ":\""
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "double_quote_string_body"
},
{
"type": "SYMBOL",
"name": "escape_sequence"
}
]
}
},
{
"type": "STRING",
"value": "\""
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ":'"
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "single_quote_string_body"
},
{
"type": "SYMBOL",
"name": "escape_sequence"
}
]
}
},
{
"type": "STRING",
"value": "'"
}
]
},
{
"type": "PATTERN",
"value": ":[a-zA-Z]\\w*"
},
{
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": ":[a-zA-Z]\\w*"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "?"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": ":[a-zA-Z]\\w*"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "="
}
}
]
},
{
"type": "PATTERN",
"value": ":((\\.\\.)|(\\|)|(\\^)|(&)|(<=>)|(==)|(===)|(=~)|(>)|(>=)|(<)|(<=)|(\\+)|(-)|(\\*)|(\\/)|(%)|(!)|(!~)|(\\*\\*)|(<<)|(>>)|(~)|(\\+@)|(-@)|(~@)|(\\[\\])|(\\[\\]=)|(`))"
}
]
}
},
"integer_literal": {
"type": "PATTERN",
"value": "\\d(_?\\d)*"
},
"escape_sequence": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\\"
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^ux0-7]"
},
{
"type": "PATTERN",
"value": "x[0-9a-fA-F]{1,2}"
},
{
"type": "PATTERN",
"value": "[0-7]{1,3}"
},
{
"type": "PATTERN",
"value": "u[0-9a-fA-F]{4}"
},
{
"type": "PATTERN",
"value": "u\\{[0-9a-fA-F ]+\\}"
}
]
}
]
}
},
"proc": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "^"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "parameters"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "self_type_binding"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "block"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "->"
},
{
"type": "SYMBOL",
"name": "type"
}
]
},
"use_directive": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "use"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "use_clause"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "use_clause"
}
]
}
}
]
}
]
},
"use_clause": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "class_name"
},
"named": true,
"value": "type_name"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "class_name"
},
"named": true,
"value": "type_name"
},
{
"type": "STRING",
"value": "as"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "constant"
},
"named": true,
"value": "simple_type_name"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "namespace"
},
{
"type": "STRING",
"value": "*"
}
]
}
]
},
"_annotation_text_without_brace": {
"type": "PATTERN",
"value": "[^\\x00}]*"
},
"_annotation_text_without_parenthesis": {
"type": "PATTERN",
"value": "[^\\x00)]*"
},
"_annotation_text_without_bracket": {
"type": "PATTERN",
"value": "[^\\x00]]*"
},
"_annotation_text_without_bar": {
"type": "PATTERN",
"value": "[^\\x00\\|]]*"
},
"_annotation_text_without_angle_bracket": {
"type": "PATTERN",
"value": "[^\\x00>]]*"
},
"annotation": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "%a{"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_annotation_text_without_brace"
},
"named": true,
"value": "annotation_text"
},
{
"type": "STRING",
"value": "}"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "%a("
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_annotation_text_without_parenthesis"
},
"named": true,
"value": "annotation_text"
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "%a["
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_annotation_text_without_bracket"
},
"named": true,
"value": "annotation_text"
},
{
"type": "STRING",
"value": "]"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "%a|"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_annotation_text_without_bar"
},
"named": true,
"value": "annotation_text"
},
{
"type": "STRING",
"value": "|"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "%a<"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_annotation_text_without_angle_bracket"
},
"named": true,
"value": "annotation_text"
},
{
"type": "STRING",
"value": ">"
}
]
}
]
},
"decl": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "annotations",
"content": {
"type": "ALIAS",
"content": {
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "annotation"
}
},
"named": true,
"value": "annotations"
}
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "class_decl"
},
{
"type": "SYMBOL",
"name": "module_decl"
},
{
"type": "SYMBOL",
"name": "class_alias_decl"
},
{
"type": "SYMBOL",
"name": "module_alias_decl"
},
{
"type": "SYMBOL",
"name": "interface_decl"
},
{
"type": "SYMBOL",
"name": "type_alias_decl"
},
{
"type": "SYMBOL",
"name": "const_decl"
},
{
"type": "SYMBOL",
"name": "global_decl"
}
]
}
}
]
},
"_nestable_decls": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "class_decl"
},
{
"type": "SYMBOL",
"name": "module_decl"
},
{
"type": "SYMBOL",
"name": "class_alias_decl"
},
{
"type": "SYMBOL",
"name": "module_alias_decl"
},
{
"type": "SYMBOL",
"name": "interface_decl"
},
{
"type": "SYMBOL",
"name": "type_alias_decl"
},
{
"type": "SYMBOL",
"name": "const_decl"
}
]
},
"class_decl": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "class"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "class_name"
}
},
{
"type": "FIELD",
"name": "type_parameters",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "module_type_parameters"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "FIELD",
"name": "superclass",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "superclass"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "ALIAS",
"content": {
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "member"
},
{
"type": "SYMBOL",
"name": "_nestable_decls"
}
]
}
},
"named": true,
"value": "members"
}
},
{
"type": "STRING",
"value": "end"
}
]
}
]
},
"superclass": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "class_name"
}
},
{
"type": "FIELD",
"name": "type_arguments",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "type_arguments"
},
{
"type": "BLANK"
}
]
}
}
]
},
"module_decl": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "module"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "class_name"
},
"named": true,
"value": "module_name"
}
},
{
"type": "FIELD",
"name": "type_parameters",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "module_type_parameters"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "FIELD",
"name": "self_type_binds",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "module_self_type_binds"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "ALIAS",
"content": {
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "member"
},
{
"type": "SYMBOL",
"name": "_nestable_decls"
}
]
}
},
"named": true,
"value": "members"
}
},
{
"type": "STRING",
"value": "end"
}
]
}
]
},
"module_self_type_binds": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "module_self_types"
}
]
},
"class_alias_decl": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "class"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "class_name"
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "origin_name",
"content": {
"type": "SYMBOL",
"name": "class_name"
}
}
]
},
"module_alias_decl": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "module"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "class_name"
},
"named": true,
"value": "module_name"
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "origin_name",
"content": {
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "class_name"
},
"named": true,
"value": "module_name"
}
}
]
},
"module_self_types": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "class_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "type_arguments"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "module_self_types"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "interface_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "type_arguments"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "module_self_types"
}
]
},
{
"type": "BLANK"
}
]
}
]
}
]
},
"interface_decl": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "interface"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "interface_name"
}
},
{
"type": "FIELD",
"name": "type_parameters",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "module_type_parameters"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "ALIAS",
"content": {
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "interface_member"
}
},
"named": true,
"value": "interface_members"
}
},
{
"type": "STRING",
"value": "end"
}
]
},
"interface_member": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "annotations",
"content": {
"type": "ALIAS",
"content": {
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "annotation"
}
},
"named": true,
"value": "annotations"
}
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "method_member"
},
{
"type": "SYMBOL",
"name": "include_member"
},
{
"type": "SYMBOL",
"name": "alias_member"
}
]
}
}
]
},
"type_alias_decl": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "type"
},
{
"type": "SYMBOL",
"name": "alias_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "module_type_parameters"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "type"
}
]
},
"const_decl": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "const_name"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
}
]
},
"const_name": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "namespace"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "constant"
}
]
},
"global_decl": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "global_name"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
}
]
},
"global_name": {
"type": "PATTERN",
"value": "\\$[a-zA-Z]\\w+"
},
"module_type_parameters": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "module_type_parameter"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "module_type_parameter"
}
]
}
}
]
},
{
"type": "STRING",
"value": "]"
}
]
},
"module_type_parameter": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "generics_unchecked"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "generics_variance"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "type_variable"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "generics_bound"
},
{
"type": "BLANK"
}
]
}
]
},
"generics_bound": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "SYMBOL",
"name": "bound_type"
}
]
},
"bound_type": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "class_type"
},
{
"type": "SYMBOL",
"name": "interface_type"
},
{
"type": "SYMBOL",
"name": "singleton_type"
}
]
},
"generics_unchecked": {
"type": "STRING",
"value": "unchecked"
},
"generics_variance": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "out"
},
{
"type": "STRING",
"value": "in"
}
]
},
"method_type_body": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "parameters"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "block"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "->"
},
{
"type": "SYMBOL",
"name": "type"
}
]
},
"parameters": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "?"
},
"named": true,
"value": "unnamed_parameter"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "required_positionals"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "required_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "optional_positionals"
},
{
"type": "SYMBOL",
"name": "rest_positional"
},
{
"type": "SYMBOL",
"name": "keywords"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "required_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "optional_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "rest_positional"
},
{
"type": "SYMBOL",
"name": "trailing_positionals"
},
{
"type": "SYMBOL",
"name": "keywords"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "required_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "optional_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "rest_positional"
},
{
"type": "STRING",
"value": ","
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "trailing_positionals"
},
{
"type": "SYMBOL",
"name": "keywords"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "required_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "optional_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "rest_positional"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "trailing_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "keywords"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "required_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "optional_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "trailing_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "keywords"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "required_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "rest_positional"
},
{
"type": "STRING",
"value": ","
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "trailing_positionals"
},
{
"type": "SYMBOL",
"name": "keywords"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "required_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "rest_positional"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "trailing_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "keywords"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "optional_positionals"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "optional_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "rest_positional"
},
{
"type": "SYMBOL",
"name": "trailing_positionals"
},
{
"type": "SYMBOL",
"name": "keywords"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "optional_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "rest_positional"
},
{
"type": "STRING",
"value": ","
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "trailing_positionals"
},
{
"type": "SYMBOL",
"name": "keywords"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "optional_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "rest_positional"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "trailing_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "keywords"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "optional_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "trailing_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "keywords"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "rest_positional"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "rest_positional"
},
{
"type": "STRING",
"value": ","
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "trailing_positionals"
},
{
"type": "SYMBOL",
"name": "keywords"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "rest_positional"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "trailing_positionals"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "keywords"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "keywords"
}
]
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"parameter": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "var_name"
},
{
"type": "BLANK"
}
]
}
]
}
},
"required_positionals": {
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "parameter"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "parameter"
}
]
}
}
]
}
]
},
"optional_positionals": {
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "?"
},
{
"type": "SYMBOL",
"name": "parameter"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "?"
},
{
"type": "SYMBOL",
"name": "parameter"
}
]
}
]
}
}
]
}
]
},
"rest_positional": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "*"
},
{
"type": "SYMBOL",
"name": "parameter"
}
]
},
"trailing_positionals": {
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "parameter"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "parameter"
}
]
}
}
]
}
]
},
"keywords": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "splat_keyword"
},
{
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SYMBOL",
"name": "required_keywords"
}
},
{
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SYMBOL",
"name": "optional_keywords"
}
}
]
},
"splat_keyword": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "**"
},
{
"type": "SYMBOL",
"name": "parameter"
}
]
},
"required_keywords": {
"type": "SEQ",
"members": [
{
"type": "PREC_RIGHT",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "var_name"
},
"named": true,
"value": "keyword"
},
{
"type": "STRING",
"value": ":"
}
]
}
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "keywords"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"optional_keywords": {
"type": "SEQ",
"members": [
{
"type": "PREC_RIGHT",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "?"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "var_name"
},
"named": true,
"value": "keyword"
},
{
"type": "STRING",
"value": ":"
}
]
}
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "keywords"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"var_name": {
"type": "SYMBOL",
"name": "identifier"
},
"self_type_binding": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "SYMBOL",
"name": "self"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "STRING",
"value": "]"
}
]
},
"block": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "SYMBOL",
"name": "parameters"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "self_type_binding"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "->"
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "STRING",
"value": "}"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "?"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "SYMBOL",
"name": "parameters"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "self_type_binding"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "->"
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "STRING",
"value": "}"
}
]
}
]
},
"member": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "annotations",
"content": {
"type": "ALIAS",
"content": {
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "annotation"
}
},
"named": true,
"value": "annotations"
}
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "ivar_member"
},
{
"type": "SYMBOL",
"name": "method_member"
},
{
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SYMBOL",
"name": "attribute_member"
}
},
{
"type": "SYMBOL",
"name": "include_member"
},
{
"type": "SYMBOL",
"name": "extend_member"
},
{
"type": "SYMBOL",
"name": "prepend_member"
},
{
"type": "SYMBOL",
"name": "alias_member"
},
{
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SYMBOL",
"name": "visibility_member"
}
}
]
}
}
]
},
"ivar_member": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "ivar_name"
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "self"
},
{
"type": "STRING",
"value": "."
},
{
"type": "SYMBOL",
"name": "ivar_name"
}
]
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "cvar_name"
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
}
]
}
]
},
"method_member": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "visibility"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "def"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "method_name"
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "method_types"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "visibility"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "def"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "self"
},
{
"type": "STRING",
"value": "."
},
{
"type": "SYMBOL",
"name": "method_name"
}
]
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "method_types"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "def"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "self"
},
{
"type": "STRING",
"value": "?."
},
{
"type": "SYMBOL",
"name": "method_name"
}
]
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "method_types"
}
]
}
]
},
"method_type": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "type_parameters",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "method_type_parameters"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "FIELD",
"name": "annotations",
"content": {
"type": "ALIAS",
"content": {
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "annotation"
}
},
"named": true,
"value": "annotations"
}
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "method_type_body"
}
}
]
},
"method_types": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "method_type"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "|"
},
{
"type": "SYMBOL",
"name": "method_type"
}
]
}
}
]
},
{
"type": "STRING",
"value": "..."
}
]
},
"method_type_parameters": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "type_variable"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "type_variable"
}
]
}
}
]
},
{
"type": "STRING",
"value": "]"
}
]
},
"attribute_member": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "visibility"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "attribyte_type"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_attribute_name"
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "visibility"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "attribyte_type"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_attribute_name"
}
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "ivar_name"
},
{
"type": "STRING",
"value": ")"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "visibility"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "attribyte_type"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_attribute_name"
}
},
{
"type": "STRING",
"value": "()"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
}
]
}
]
},
"_attribute_name": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "self"
},
{
"type": "STRING",
"value": "."
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "method_name"
}
]
},
"visibility_member": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "visibility"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "\\n"
}
}
]
},
"visibility": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "public"
},
{
"type": "STRING",
"value": "private"
}
]
},
"attribyte_type": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "attr_reader"
},
{
"type": "STRING",
"value": "attr_writer"
},
{
"type": "STRING",
"value": "attr_accessor"
}
]
},
"include_member": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "include"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "class_name"
},
{
"type": "SYMBOL",
"name": "interface_name"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "type_arguments"
},
{
"type": "BLANK"
}
]
}
]
},
"extend_member": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "extend"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "class_name"
},
{
"type": "SYMBOL",
"name": "interface_name"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "type_arguments"
},
{
"type": "BLANK"
}
]
}
]
},
"prepend_member": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "prepend"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "class_name"
},
{
"type": "SYMBOL",
"name": "interface_name"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "type_arguments"
},
{
"type": "BLANK"
}
]
}
]
},
"singleton_method_name": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "self"
},
{
"type": "STRING",
"value": "."
},
{
"type": "SYMBOL",
"name": "method_name"
}
]
},
"alias_member": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "alias"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "method_name"
}
},
{
"type": "FIELD",
"name": "origin_name",
"content": {
"type": "SYMBOL",
"name": "method_name"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "alias"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "singleton_method_name"
}
},
{
"type": "FIELD",
"name": "origin_name",
"content": {
"type": "SYMBOL",
"name": "singleton_method_name"
}
}
]
}
]
},
"ivar_name": {
"type": "PATTERN",
"value": "@[a-zA-Z]\\w*"
},
"cvar_name": {
"type": "PATTERN",
"value": "@@[a-zA-Z]\\w+"
},
"operator": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ".."
},
{
"type": "STRING",
"value": "|"
},
{
"type": "STRING",
"value": "^"
},
{
"type": "STRING",
"value": "&"
},
{
"type": "STRING",
"value": "<=>"
},
{
"type": "STRING",
"value": "=="
},
{
"type": "STRING",
"value": "==="
},
{
"type": "STRING",
"value": "=~"
},
{
"type": "STRING",
"value": ">"
},
{
"type": "STRING",
"value": ">="
},
{
"type": "STRING",
"value": "<"
},
{
"type": "STRING",
"value": "<="
},
{
"type": "STRING",
"value": "+"
},
{
"type": "STRING",
"value": "-"
},
{
"type": "STRING",
"value": "*"
},
{
"type": "STRING",
"value": "/"
},
{
"type": "STRING",
"value": "%"
},
{
"type": "STRING",
"value": "!"
},
{
"type": "STRING",
"value": "!~"
},
{
"type": "STRING",
"value": "**"
},
{
"type": "STRING",
"value": "<<"
},
{
"type": "STRING",
"value": ">>"
},
{
"type": "STRING",
"value": "~"
},
{
"type": "STRING",
"value": "+@"
},
{
"type": "STRING",
"value": "-@"
},
{
"type": "STRING",
"value": "~@"
},
{
"type": "STRING",
"value": "[]"
},
{
"type": "STRING",
"value": "[]="
},
{
"type": "STRING",
"value": "`"
}
]
},
"setter": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "="
}
}
]
},
"constant_setter": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "constant"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "="
}
}
]
},
"identifier_suffix": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "?"
}
}
]
},
"constant_suffix": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "constant"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "?"
}
}
]
},
"method_name": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "identifier_suffix"
},
{
"type": "SYMBOL",
"name": "constant"
},
{
"type": "SYMBOL",
"name": "constant_suffix"
},
{
"type": "SYMBOL",
"name": "setter"
},
{
"type": "SYMBOL",
"name": "constant_setter"
},
{
"type": "SYMBOL",
"name": "operator"
},
{
"type": "PATTERN",
"value": "`[^`]+`"
}
]
},
"identifier": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "[^\\x00-\\x1F\\sA-Z0-9:;`\"'@$#.,|^&<=>+\\-*/\\\\%?!~()\\[\\]{}]"
},
{
"type": "PATTERN",
"value": "[^\\x00-\\x1F\\s:;`\"'@$#.,|^&<=>+\\-*/\\\\%?!~()\\[\\]{}]*"
}
]
}
}
},
"extras": [
{
"type": "SYMBOL",
"name": "comment"
},
{
"type": "PATTERN",
"value": "\\s"
},
{
"type": "PATTERN",
"value": "\\\\\\r?\\n"
}
],
"conflicts": [
[
"required_positionals"
],
[
"optional_positionals"
],
[
"trailing_positionals"
],
[
"type"
],
[
"class_name",
"type_variable"
],
[
"inline_class_annotation",
"class_decl",
"class_alias_decl"
],
[
"inline_class_annotation",
"module_decl",
"module_alias_decl"
]
],
"precedences": [],
"externals": [],
"inline": [
"_no_parantheses_type",
"_parantheses_type",
"_nestable_decls",
"_attribute_name",
"inline_body"
],
"supertypes": [],
"reserved": {}
}