{
"$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
"name": "cfengine",
"word": "identifier",
"rules": {
"source_file": {
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_block"
}
},
"_block": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "bundle_block"
},
{
"type": "SYMBOL",
"name": "body_block"
},
{
"type": "SYMBOL",
"name": "promise_block"
}
]
},
"body_block": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "body_block_keyword"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "identifier"
},
"named": true,
"value": "body_block_type"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "identifier"
},
"named": true,
"value": "body_block_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "parameter_list"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "body_block_body"
}
]
},
"body_block_keyword": {
"type": "STRING",
"value": "body"
},
"body_block_body": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_body_attribute"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "class_guarded_body_attributes"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"_body_attribute": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "attribute"
},
{
"type": "STRING",
"value": ";"
}
]
},
"promise_block": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "promise_block_keyword"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "identifier"
},
"named": true,
"value": "promise_block_type"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "identifier"
},
"named": true,
"value": "promise_block_name"
},
{
"type": "SYMBOL",
"name": "promise_block_body"
}
]
},
"promise_block_keyword": {
"type": "STRING",
"value": "promise"
},
"promise_block_body": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_body_attribute"
}
},
{
"type": "REPEAT",
"content": {
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "class_guarded_body_attributes"
},
"named": true,
"value": "class_guarded_promise_block_attributes"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"class_guarded_body_attributes": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "class_guard"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_body_attribute"
}
}
]
},
"bundle_block": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "bundle_block_keyword"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "identifier"
},
"named": true,
"value": "bundle_block_type"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "identifier"
},
"named": true,
"value": "bundle_block_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "parameter_list"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "bundle_block_body"
}
]
},
"bundle_block_keyword": {
"type": "STRING",
"value": "bundle"
},
"parameter_list": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "identifier"
},
"named": true,
"value": "parameter"
},
{
"type": "STRING",
"value": ","
}
]
}
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "identifier"
},
"named": true,
"value": "parameter"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"bundle_block_body": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "bundle_section"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"bundle_section": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "promise_guard"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_promises"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "class_guarded_promises"
}
}
]
},
"_right_value": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "quoted_string"
},
{
"type": "SYMBOL",
"name": "qualified_identifier"
},
{
"type": "SYMBOL",
"name": "list"
},
{
"type": "SYMBOL",
"name": "call"
},
{
"type": "SYMBOL",
"name": "dollar_expression"
},
{
"type": "SYMBOL",
"name": "at_expression"
}
]
},
"_variable_reference": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "qualified_identifier"
},
{
"type": "SYMBOL",
"name": "indexed_identifier"
}
]
},
"dollar_expression": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "$"
},
"named": true,
"value": "dollar_expression_operator"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "("
},
"named": true,
"value": "dollar_expression_start"
},
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "qualified_identifier"
},
"named": true,
"value": "dollar_expression_identifier"
},
{
"type": "SYMBOL",
"name": "dollar_expression"
}
]
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": ")"
},
"named": true,
"value": "dollar_expression_end"
}
]
},
"at_expression": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "@"
},
"named": true,
"value": "at_expression_operator"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "("
},
"named": true,
"value": "at_expression_start"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_variable_reference"
},
"named": true,
"value": "at_expression_reference"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": ")"
},
"named": true,
"value": "at_expression_end"
}
]
},
"calling_identifier": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "qualified_identifier"
},
{
"type": "SYMBOL",
"name": "dollar_expression"
}
]
},
"call": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "calling_identifier"
},
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_value_list"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"list": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_value_list"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "}"
}
]
},
"_value_list": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_right_value"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "_right_value"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
"class_guarded_promises": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "class_guard"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_promises"
},
{
"type": "BLANK"
}
]
}
]
},
"_promises": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "promise"
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "promise"
},
{
"type": "SYMBOL",
"name": "half_promise"
}
]
}
}
]
},
"promise": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "quoted_string"
},
"named": true,
"value": "promiser"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "->"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_right_value"
},
"named": true,
"value": "stakeholder"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "attribute"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ";"
}
]
},
"half_promise": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "attribute"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "attribute"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ";"
}
]
},
"attribute": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "identifier"
},
"named": true,
"value": "attribute_name"
},
{
"type": "STRING",
"value": "=>"
},
{
"type": "SYMBOL",
"name": "_right_value"
}
]
},
"quoted_string": {
"type": "PATTERN",
"value": "(\\'((\\\\(.|\\n))|[^'\\\\])*\\')|(\\\"((\\\\(.|\\n))|[^\"\\\\])*\\\")|(`[^`]*`)"
},
"identifier": {
"type": "PATTERN",
"value": "[a-zA-Z0-9_]+"
},
"qualified_identifier": {
"type": "PATTERN",
"value": "([a-zA-Z0-9_]+\\:)?([a-zA-Z0-9_]+\\.)?[a-zA-Z0-9_]+"
},
"indexed_identifier": {
"type": "PATTERN",
"value": "(([a-zA-Z0-9_]+\\:)?([a-zA-Z0-9_]+\\.)?[a-zA-Z0-9_]+)(\\[([a-zA-Z0-9_]+\\:)?([a-zA-Z0-9_]+\\.)?[a-zA-Z0-9_]+\\])+"
},
"promise_guard": {
"type": "PATTERN",
"value": "[a-zA-Z_]+:"
},
"class_guard": {
"type": "PATTERN",
"value": "(((\\'((\\\\(.|\\n))|[^'\\\\])*\\')|(\\\"((\\\\(.|\\n))|[^\"\\\\])*\\\")|(`[^`]*`))|([.|&!()a-zA-Z0-9_:][\\t .|&!()a-zA-Z0-9_:]*))::"
},
"comment": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "#"
},
{
"type": "PATTERN",
"value": ".*"
}
]
}
},
"macro": {
"type": "TOKEN",
"content": {
"type": "PATTERN",
"value": "@(if |else|endif)[^\\n]*"
}
}
},
"extras": [
{
"type": "SYMBOL",
"name": "comment"
},
{
"type": "SYMBOL",
"name": "macro"
},
{
"type": "PATTERN",
"value": "[\\s]+"
}
],
"conflicts": [],
"precedences": [],
"externals": [],
"inline": [],
"supertypes": [],
"reserved": {}
}