tree-sitter-angular
Version:
Tree-sitter grammar for the Angular framework
2,291 lines (2,290 loc) • 76.5 kB
JSON
{
"$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
"name": "angular",
"inherits": "html",
"rules": {
"document": {
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_node"
}
},
"doctype": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<!"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_doctype"
},
"named": false,
"value": "doctype"
},
{
"type": "PATTERN",
"value": "[^>]+"
},
{
"type": "STRING",
"value": ">"
}
]
},
"_doctype": {
"type": "PATTERN",
"value": "[Dd][Oo][Cc][Tt][Yy][Pp][Ee]"
},
"_node": {
"type": "CHOICE",
"members": [
{
"type": "PREC",
"value": 1,
"content": {
"type": "SYMBOL",
"name": "icu_expression"
}
},
{
"type": "PREC",
"value": 1,
"content": {
"type": "SYMBOL",
"name": "interpolation"
}
},
{
"type": "PREC",
"value": 1,
"content": {
"type": "SYMBOL",
"name": "_any_statement"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "doctype"
},
{
"type": "SYMBOL",
"name": "entity"
},
{
"type": "SYMBOL",
"name": "text"
},
{
"type": "SYMBOL",
"name": "element"
},
{
"type": "SYMBOL",
"name": "script_element"
},
{
"type": "SYMBOL",
"name": "style_element"
},
{
"type": "SYMBOL",
"name": "erroneous_end_tag"
}
]
}
]
},
"element": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "start_tag"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_node"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "end_tag"
},
{
"type": "SYMBOL",
"name": "_implicit_end_tag"
}
]
}
]
},
{
"type": "SYMBOL",
"name": "self_closing_tag"
}
]
},
"script_element": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "script_start_tag"
},
"named": true,
"value": "start_tag"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "raw_text"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "end_tag"
}
]
},
"style_element": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "style_start_tag"
},
"named": true,
"value": "start_tag"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "raw_text"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "end_tag"
}
]
},
"start_tag": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_start_tag_name"
},
"named": true,
"value": "tag_name"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
{
"type": "STRING",
"value": ">"
}
]
},
"script_start_tag": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_script_start_tag_name"
},
"named": true,
"value": "tag_name"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
{
"type": "STRING",
"value": ">"
}
]
},
"style_start_tag": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_style_start_tag_name"
},
"named": true,
"value": "tag_name"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
{
"type": "STRING",
"value": ">"
}
]
},
"self_closing_tag": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_start_tag_name"
},
"named": true,
"value": "tag_name"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
{
"type": "STRING",
"value": "/>"
}
]
},
"end_tag": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "</"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_end_tag_name"
},
"named": true,
"value": "tag_name"
},
{
"type": "STRING",
"value": ">"
}
]
},
"erroneous_end_tag": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "</"
},
{
"type": "SYMBOL",
"name": "erroneous_end_tag_name"
},
{
"type": "STRING",
"value": ">"
}
]
},
"attribute": {
"type": "CHOICE",
"members": [
{
"type": "PREC",
"value": 1,
"content": {
"type": "SYMBOL",
"name": "property_binding"
}
},
{
"type": "PREC",
"value": 1,
"content": {
"type": "SYMBOL",
"name": "two_way_binding"
}
},
{
"type": "PREC",
"value": 1,
"content": {
"type": "SYMBOL",
"name": "animation_binding"
}
},
{
"type": "PREC",
"value": 1,
"content": {
"type": "SYMBOL",
"name": "event_binding"
}
},
{
"type": "PREC",
"value": 1,
"content": {
"type": "SYMBOL",
"name": "structural_directive"
}
},
{
"type": "SYMBOL",
"name": "_normal_attribute"
}
]
},
"attribute_name": {
"type": "PATTERN",
"value": "[^<>\\*.\\[\\]\\(\\)\"'=\\s]+"
},
"attribute_value": {
"type": "PATTERN",
"value": "[^<>\"'=\\s]+"
},
"entity": {
"type": "PATTERN",
"value": "&(#([xX][0-9a-fA-F]{1,6}|[0-9]{1,5})|[A-Za-z]{1,30});?"
},
"quoted_attribute_value": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[^']+"
},
"named": true,
"value": "attribute_value"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "'"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\""
},
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[^\"]+"
},
"named": true,
"value": "attribute_value"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "\""
}
]
}
]
},
"text": {
"type": "PATTERN",
"value": "[^<>@{}&\\s]([^<>@{}&]*[^<>@{}&\\s])?"
},
"statement_block": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_node"
}
},
{
"type": "STRING",
"value": "}"
}
]
}
},
"_any_statement": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "if_statement"
},
{
"type": "SYMBOL",
"name": "for_statement"
},
{
"type": "SYMBOL",
"name": "defer_statement"
},
{
"type": "SYMBOL",
"name": "switch_statement"
},
{
"type": "SYMBOL",
"name": "let_statement"
},
{
"type": "SYMBOL",
"name": "_alternative_statement"
}
]
},
"_alternative_statement": {
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "alternative",
"content": {
"type": "SYMBOL",
"name": "else_statement"
}
},
{
"type": "FIELD",
"name": "alternative_condition",
"content": {
"type": "SYMBOL",
"name": "else_if_statement"
}
},
{
"type": "FIELD",
"name": "empty",
"content": {
"type": "SYMBOL",
"name": "empty_statement"
}
},
{
"type": "FIELD",
"name": "placeholder",
"content": {
"type": "SYMBOL",
"name": "placeholder_statement"
}
},
{
"type": "FIELD",
"name": "loading",
"content": {
"type": "SYMBOL",
"name": "loading_statement"
}
},
{
"type": "FIELD",
"name": "error",
"content": {
"type": "SYMBOL",
"name": "error_statement"
}
}
]
},
"let_statement": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_control_flow_start"
},
"named": false,
"value": "@"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "let"
},
"named": true,
"value": "control_keyword"
},
{
"type": "SYMBOL",
"name": "assignment_expression"
},
{
"type": "STRING",
"value": ";"
}
]
}
},
"switch_statement": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_control_flow_start"
},
"named": false,
"value": "@"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "switch"
},
"named": true,
"value": "control_keyword"
},
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "expression"
}
},
{
"type": "STRING",
"value": ")"
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "switch_body"
}
}
]
}
},
"switch_body": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "case_statement"
},
{
"type": "SYMBOL",
"name": "default_statement"
}
]
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"case_statement": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_control_flow_start"
},
"named": false,
"value": "@"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "case"
},
"named": true,
"value": "control_keyword"
},
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_any_expression"
}
},
{
"type": "STRING",
"value": ")"
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "statement_block"
}
}
]
},
"default_statement": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_control_flow_start"
},
"named": false,
"value": "@"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "default"
},
"named": true,
"value": "control_keyword"
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "statement_block"
}
}
]
},
"defer_statement": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_control_flow_start"
},
"named": false,
"value": "@"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "defer"
},
"named": true,
"value": "control_keyword"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "defer_trigger"
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "statement_block"
}
}
]
}
},
"placeholder_statement": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_control_flow_start"
},
"named": false,
"value": "@"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "placeholder"
},
"named": true,
"value": "control_keyword"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "placeholder_minimum"
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "statement_block"
}
}
]
}
},
"loading_statement": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_control_flow_start"
},
"named": false,
"value": "@"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "loading"
},
"named": true,
"value": "control_keyword"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "loading_condition"
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "statement_block"
}
}
]
}
},
"error_statement": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_control_flow_start"
},
"named": false,
"value": "@"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "error"
},
"named": true,
"value": "control_keyword"
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "statement_block"
}
}
]
},
"defer_trigger": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "defer_trigger_condition"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ";"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "defer_trigger_condition"
}
}
]
}
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"placeholder_minimum": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "minimum",
"content": {
"type": "SYMBOL",
"name": "timed_expression"
}
},
{
"type": "STRING",
"value": ")"
}
]
},
"loading_condition": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "timed_expression"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ";"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "timed_expression"
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"defer_trigger_condition": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "prefetch"
},
"named": true,
"value": "prefetch_keyword"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "when"
},
"named": true,
"value": "special_keyword"
},
{
"type": "FIELD",
"name": "trigger",
"content": {
"type": "SYMBOL",
"name": "_any_expression"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "on"
},
"named": true,
"value": "special_keyword"
},
{
"type": "FIELD",
"name": "trigger",
"content": {
"type": "SYMBOL",
"name": "_primitive"
}
}
]
}
]
}
]
},
"timed_expression": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "after"
},
{
"type": "STRING",
"value": "minimum"
}
]
},
"named": true,
"value": "special_keyword"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "number"
}
},
{
"type": "ALIAS",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "ms"
},
{
"type": "STRING",
"value": "s"
}
]
},
"named": true,
"value": "unit"
}
]
},
"for_statement": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_control_flow_start"
},
"named": false,
"value": "@"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "for"
},
"named": true,
"value": "control_keyword"
},
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "declaration",
"content": {
"type": "SYMBOL",
"name": "for_declaration"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "reference",
"content": {
"type": "SYMBOL",
"name": "for_reference"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "statement_block"
}
}
]
}
},
"empty_statement": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_control_flow_start"
},
"named": false,
"value": "@"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "empty"
},
"named": true,
"value": "control_keyword"
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "statement_block"
}
}
]
},
"for_declaration": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "of"
},
"named": true,
"value": "special_keyword"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "expression"
}
},
{
"type": "STRING",
"value": ";"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "track"
},
"named": true,
"value": "special_keyword"
},
{
"type": "FIELD",
"name": "track",
"content": {
"type": "SYMBOL",
"name": "expression"
}
}
]
},
"for_reference": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ";"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "let"
},
"named": true,
"value": "special_keyword"
},
{
"type": "FIELD",
"name": "alias",
"content": {
"type": "SYMBOL",
"name": "assignment_expression"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ";"
},
{
"type": "STRING",
"value": ","
}
]
},
{
"type": "FIELD",
"name": "alias",
"content": {
"type": "SYMBOL",
"name": "assignment_expression"
}
}
]
}
}
]
},
"if_statement": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_if_start_expression"
},
{
"type": "SYMBOL",
"name": "_if_body_expression"
}
]
}
},
"else_if_statement": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_else_if_start_expression"
},
{
"type": "SYMBOL",
"name": "_if_body_expression"
}
]
}
},
"else_statement": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_control_flow_start"
},
"named": false,
"value": "@"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "else"
},
"named": true,
"value": "control_keyword"
},
{
"type": "SYMBOL",
"name": "statement_block"
}
]
}
},
"_if_start_expression": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_control_flow_start"
},
"named": false,
"value": "@"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "if"
},
"named": true,
"value": "control_keyword"
}
]
},
"_else_if_start_expression": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_control_flow_start"
},
"named": false,
"value": "@"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "else"
},
"named": true,
"value": "control_keyword"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "if"
},
"named": true,
"value": "control_keyword"
}
]
},
"_if_body_expression": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "if_condition"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "reference",
"content": {
"type": "SYMBOL",
"name": "if_reference"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
},
{
"type": "FIELD",
"name": "consequence",
"content": {
"type": "SYMBOL",
"name": "statement_block"
}
}
]
}
},
"if_condition": {
"type": "PREC_RIGHT",
"value": 1,
"content": {
"type": "SYMBOL",
"name": "_any_expression"
}
},
"if_reference": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ";"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "as"
},
"named": true,
"value": "special_keyword"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
"_any_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "binary_expression"
},
{
"type": "SYMBOL",
"name": "unary_expression"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "ternary_expression"
},
{
"type": "SYMBOL",
"name": "nullish_coalescing_expression"
},
{
"type": "SYMBOL",
"name": "template_string"
},
{
"type": "PREC",
"value": 3,
"content": {
"type": "SYMBOL",
"name": "conditional_expression"
}
}
]
},
"assignment_expression": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_any_expression"
}
}
]
},
"icu_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_any_expression"
},
{
"type": "SYMBOL",
"name": "concatenation_expression"
}
]
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "icu_clause"
},
{
"type": "STRING",
"value": ","
},
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "icu_case"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"icu_clause": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "plural"
},
{
"type": "STRING",
"value": "select"
}
]
},
"icu_case": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "icu_category"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "_node"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"icu_category": {
"type": "PATTERN",
"value": "[^{}]+",
"flags": "i"
},
"interpolation": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_interpolation_start"
},
"named": false,
"value": "{{"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_any_expression"
},
{
"type": "SYMBOL",
"name": "concatenation_expression"
}
]
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_interpolation_end"
},
"named": false,
"value": "}}"
}
]
},
"concatenation_expression": {
"type": "PREC",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_primitive"
},
{
"type": "STRING",
"value": "+"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "+"
},
{
"type": "SYMBOL",
"name": "_primitive"
}
]
}
},
{
"type": "BLANK"
}
]
}
]
}
},
"structural_directive": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "*"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "="
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_double_quote"
},
{
"type": "SYMBOL",
"name": "_single_quote"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "structural_expression"
},
{
"type": "SYMBOL",
"name": "structural_declaration"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_double_quote"
},
{
"type": "SYMBOL",
"name": "_single_quote"
}
]
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"structural_expression": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_any_expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_alias"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_else_template_expression"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_context_expression"
},
{
"type": "BLANK"
}
]
}
]
},
"structural_declaration": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "let"
},
"named": true,
"value": "special_keyword"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "structural_assignment"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ";"
},
{
"type": "STRING",
"value": ","
}
]
},
{
"type": "SYMBOL",
"name": "structural_assignment"
}
]
}
}
]
}
]
},
"structural_assignment": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
}
]
},
{
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "let"
},
"named": true,
"value": "special_keyword"
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": "="
}
]
}
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "expression"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_alias"
},
{
"type": "BLANK"
}
]
}
]
}
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_alias"
},
{
"type": "BLANK"
}
]
}
]
}
]
},
"_alias": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "as"
},
"named": true,
"value": "special_keyword"
},
{
"type": "FIELD",
"name": "alias",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
}
]
},
"_else_template_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ";"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "else"
},
"named": true,
"value": "special_keyword"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
"_context_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ";"
},
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "context"
},
"named": true,
"value": "special_keyword"
},
{
"type": "FIELD",
"name": "named",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
}
]
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "_any_expression"
}
]
},
"property_binding": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "SYMBOL",
"name": "binding_name"
},
{
"type": "STRING",
"value": "]"
},
{
"type": "SYMBOL",
"name": "_binding_assignment"
}
]
},
"event_binding": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "binding_name"
},
{
"type": "STRING",
"value": ")"
},
{
"type": "SYMBOL",
"name": "_binding_assignment"
}
]
},
"two_way_binding": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "[("
},
{
"type": "SYMBOL",
"name": "binding_name"
},
{
"type": "STRING",
"value": ")]"
},
{
"type": "SYMBOL",
"name": "_binding_assignment"
}
]
},
"animation_binding": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "[@"
},
{
"type": "SYMBOL",
"name": "binding_name"
},
{
"type": "STRING",
"value": "]"
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "trigger",
"content": {
"type": "SYMBOL",
"name": "_binding_assignment"
}
},
{
"type": "BLANK"
}