UNPKG

tree-sitter-hare

Version:
2,152 lines (2,151 loc) 114 kB
{ "name": "hare", "word": "identifier", "rules": { "module": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "imports" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "declarations" }, { "type": "BLANK" } ] } ] }, "imports": { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "use_statement" } }, "use_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "use" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "identifier" } ] }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "scoped_type_identifier" } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "::" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "identifier" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "STRING", "value": "}" } ] }, { "type": "STRING", "value": "*" } ] } ] }, { "type": "BLANK" } ] } ] } ] }, { "type": "STRING", "value": ";" } ] }, "name_list": { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "identifier" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, "declarations": { "type": "REPEAT1", "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "export" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "declaration" }, { "type": "STRING", "value": ";" } ] } }, "declaration": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "global_declaration" }, { "type": "SYMBOL", "name": "constant_declaration" }, { "type": "SYMBOL", "name": "type_declaration" }, { "type": "SYMBOL", "name": "function_declaration" } ] }, "global_declaration": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "const" }, { "type": "STRING", "value": "let" } ] }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "global_binding" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "global_binding" } ] } } ] } ] }, "global_binding": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "declaration_attribute" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "identifier" }, { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "type" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "BLANK" } ] } ] }, "declaration_attribute": { "type": "SEQ", "members": [ { "type": "STRING", "value": "@symbol" }, { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "string" }, { "type": "STRING", "value": ")" } ] }, "constant_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "def" }, { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "type" }, { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "type" }, { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] } ] } } ] } ] }, "type_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "type" }, { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "type" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "type" } ] } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] } ] }, "function_declaration": { "type": "SEQ", "members": [ { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "function_attribute" } }, { "type": "STRING", "value": "fn" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "STRING", "value": "(" }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "parameter" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "parameter" } ] } } ] }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "STRING", "value": ")" }, { "type": "FIELD", "name": "returns", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "type" }, { "type": "BLANK" } ] } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "expression" } } ] }, { "type": "BLANK" } ] } ] }, "function_attribute": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "@fini" }, { "type": "STRING", "value": "@init" }, { "type": "STRING", "value": "@test" }, { "type": "STRING", "value": "@noreturn" }, { "type": "SYMBOL", "name": "declaration_attribute" } ] }, "struct_attribute": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "@packed" } ] }, "parameter": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "STRING", "value": "_" } ] }, { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "type" }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "..." }, { "type": "BLANK" } ] } ] }, "type": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "scoped_type_identifier" }, { "type": "SYMBOL", "name": "builtin_type" }, { "type": "SYMBOL", "name": "pointer_type" }, { "type": "SYMBOL", "name": "const_type" }, { "type": "SYMBOL", "name": "error_type" }, { "type": "SYMBOL", "name": "array_type" }, { "type": "SYMBOL", "name": "enum_type" }, { "type": "SYMBOL", "name": "slice_type" }, { "type": "SYMBOL", "name": "struct_type" }, { "type": "SYMBOL", "name": "tuple_type" }, { "type": "SYMBOL", "name": "union_type" }, { "type": "SYMBOL", "name": "tagged_union_type" }, { "type": "SYMBOL", "name": "function_type" }, { "type": "SYMBOL", "name": "unwrapped_type" } ] }, "builtin_type": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "i8" }, { "type": "STRING", "value": "i16" }, { "type": "STRING", "value": "i32" }, { "type": "STRING", "value": "i64" }, { "type": "STRING", "value": "u8" }, { "type": "STRING", "value": "u16" }, { "type": "STRING", "value": "u32" }, { "type": "STRING", "value": "u64" }, { "type": "STRING", "value": "int" }, { "type": "STRING", "value": "uint" }, { "type": "STRING", "value": "size" }, { "type": "STRING", "value": "uintptr" }, { "type": "STRING", "value": "char" }, { "type": "STRING", "value": "f32" }, { "type": "STRING", "value": "f64" }, { "type": "STRING", "value": "rune" }, { "type": "STRING", "value": "str" }, { "type": "STRING", "value": "bool" }, { "type": "STRING", "value": "void" } ] }, "pointer_type": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "nullable" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "*" }, { "type": "SYMBOL", "name": "type" } ] }, "const_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "const" }, { "type": "SYMBOL", "name": "type" } ] }, "error_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "!" }, { "type": "SYMBOL", "name": "type" } ] }, "array_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "[" }, { "type": "STRING", "value": "]" }, { "type": "SYMBOL", "name": "type" } ] }, "enum_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "enum" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "builtin_type" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "{" }, { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "enum_field" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "enum_field" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "STRING", "value": "}" } ] }, "slice_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "[" }, { "type": "FIELD", "name": "size", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "_" }, { "type": "STRING", "value": "*" }, { "type": "SYMBOL", "name": "expression" } ] } }, { "type": "STRING", "value": "]" }, { "type": "SYMBOL", "name": "type" } ] }, "struct_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "struct" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "struct_attribute" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "{" }, { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "field" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "field" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "STRING", "value": "}" } ] }, "tuple_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "type" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "type" } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ")" } ] }, "union_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "union" }, { "type": "STRING", "value": "{" }, { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "field" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "field" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "STRING", "value": "}" } ] }, "tagged_union_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "type" }, { "type": "REPEAT1", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "|" }, { "type": "SYMBOL", "name": "type" } ] } }, { "type": "STRING", "value": ")" } ] }, "function_type": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "function_attribute" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "fn" }, { "type": "STRING", "value": "(" }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "parameter" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "parameter" } ] } } ] }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "STRING", "value": ")" }, { "type": "FIELD", "name": "returns", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "type" }, { "type": "BLANK" } ] } } ] } }, "unwrapped_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "..." }, { "type": "SYMBOL", "name": "type" } ] }, "enum_field": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "BLANK" } ] } ] }, "field": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "offset_specifier" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "type" } ] }, { "type": "SYMBOL", "name": "struct_type" }, { "type": "SYMBOL", "name": "union_type" }, { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "scoped_type_identifier" } ] } ] }, "offset_specifier": { "type": "SEQ", "members": [ { "type": "STRING", "value": "@offset" }, { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": ")" } ] }, "statement": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "break_statement" }, { "type": "SYMBOL", "name": "defer_statement" }, { "type": "SYMBOL", "name": "yield_statement" }, { "type": "SYMBOL", "name": "static_operation" }, { "type": "SYMBOL", "name": "let_declaration" }, { "type": "SYMBOL", "name": "const_declaration" }, { "type": "SYMBOL", "name": "expression_statement" } ] }, "expression_statement": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": ";" } ] }, "block": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "label" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "{" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "statement" } }, { "type": "STRING", "value": "}" } ] }, "if_statement": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "if" }, { "type": "STRING", "value": "(" }, { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "STRING", "value": ")" }, { "type": "FIELD", "name": "consequence", "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "else_statement" }, { "type": "BLANK" } ] } ] } }, "else_statement": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "else" }, { "type": "FIELD", "name": "alternative", "content": { "type": "SYMBOL", "name": "expression" } } ] } }, "for_statement": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "for" }, { "type": "STRING", "value": "(" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "let_expression" }, { "type": "STRING", "value": ";" } ] }, { "type": "BLANK" } ] }, { "type": "SEQ", "members": [ { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": ";" }, { "type": "FIELD", "name": "afterthought", "content": { "type": "SYMBOL", "name": "expression" } } ] }, { "type": "BLANK" } ] } ] }, { "type": "STRING", "value": ")" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "expression" } } ] } }, "label": { "type": "SEQ", "members": [ { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "label", "content": { "type": "SYMBOL", "name": "identifier" } } ] }, "break_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "break" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "label" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ";" } ] }, "defer_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "defer" }, { "type": "SYMBOL", "name": "statement" } ] }, "return_statement": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "return" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "BLANK" } ] } ] } }, "yield_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "yield" }, { "type": "CHOICE", "members": [ { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "label" }, { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ";" } ] }, "static_operation": { "type": "SEQ", "members": [ { "type": "STRING", "value": "static" }, { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": ";" } ] }, "let_declaration": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "static" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "let" }, { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "tuple_literal" } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "type" } ] }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "BLANK" } ] } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "tuple_literal" } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "type" } ] }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "BLANK" } ] } ] } ] } } ] }, { "type": "STRING", "value": ";" } ] }, "const_declaration": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "static" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "const" }, { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "tuple_literal" } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "type" } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "tuple_literal" } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "type" } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] } ] } } ] }, { "type": "STRING",