{
"$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
"name": "blazor",
"rules": {
"source_file": {
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_node"
}
},
"_node": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "element"
},
{
"type": "SYMBOL",
"name": "self_closing_element"
},
{
"type": "SYMBOL",
"name": "code_block"
},
{
"type": "SYMBOL",
"name": "directive"
},
{
"type": "SYMBOL",
"name": "inline_expression"
},
{
"type": "SYMBOL",
"name": "text"
}
]
},
"element": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "FIELD",
"name": "tag_name",
"content": {
"type": "SYMBOL",
"name": "tag_name"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
{
"type": "STRING",
"value": ">"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_node"
}
},
{
"type": "STRING",
"value": "</"
},
{
"type": "FIELD",
"name": "closing_tag_name",
"content": {
"type": "SYMBOL",
"name": "tag_name"
}
},
{
"type": "STRING",
"value": ">"
}
]
},
"self_closing_element": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "FIELD",
"name": "tag_name",
"content": {
"type": "SYMBOL",
"name": "tag_name"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
{
"type": "STRING",
"value": "/>"
}
]
},
"attribute": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "attribute_name"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "attribute_value"
}
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"attribute_name": {
"type": "PATTERN",
"value": "[A-Za-z_:][A-Za-z0-9_:\\-]*"
},
"attribute_value": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "quoted_attribute_value"
},
{
"type": "SYMBOL",
"name": "unquoted_attribute_value"
}
]
},
"quoted_attribute_value": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\""
},
{
"type": "PATTERN",
"value": "[^\\\"\\n]*"
},
{
"type": "STRING",
"value": "\""
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "PATTERN",
"value": "[^'\\n]*"
},
{
"type": "STRING",
"value": "'"
}
]
}
]
},
"unquoted_attribute_value": {
"type": "PATTERN",
"value": "[^\\s>]+"
},
"tag_name": {
"type": "PATTERN",
"value": "[A-Za-z][A-Za-z0-9\\-:]*"
},
"directive": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "directive_body"
},
{
"type": "BLANK"
}
]
}
]
},
"directive_body": {
"type": "PATTERN",
"value": "[^\\n]*"
},
"code_block": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@code"
},
{
"type": "SYMBOL",
"name": "block_expression"
}
]
},
"inline_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "member_access"
},
{
"type": "SYMBOL",
"name": "parenthesized_expression"
},
{
"type": "SYMBOL",
"name": "block_expression"
}
]
}
]
},
"member_access": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "REPEAT1",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
}
]
},
"parenthesized_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "csharp_content"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"block_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "csharp_content"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "}"
}
]
},
"csharp_content": {
"type": "PATTERN",
"value": "[^}]+"
},
"identifier": {
"type": "PATTERN",
"value": "[A-Za-z_][A-Za-z0-9_]*"
},
"text": {
"type": "PATTERN",
"value": "[^<@\\n][^<@]*"
},
"comment": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "html_comment"
},
{
"type": "SYMBOL",
"name": "razor_comment"
}
]
},
"html_comment": {
"type": "PATTERN",
"value": "<!--[^-]*-?->"
},
"razor_comment": {
"type": "PATTERN",
"value": "@\\*[^*]*\\*\\@"
}
},
"extras": [
{
"type": "PATTERN",
"value": "\\s+"
},
{
"type": "SYMBOL",
"name": "comment"
}
],
"conflicts": [],
"precedences": [],
"externals": [],
"inline": [],
"supertypes": [],
"reserved": {}
}