{
"$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
"name": "modulemap",
"word": "identifier",
"rules": {
"source_file": {
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_module_declaration"
}
},
"_module_declaration": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "module_declaration"
},
{
"type": "SYMBOL",
"name": "extern_module_declaration"
}
]
},
"module_declaration": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "explicit"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "framework"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "module"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "module_id"
}
},
{
"type": "FIELD",
"name": "attributes",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attributes"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "module_body"
}
}
]
},
"extern_module_declaration": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "extern"
},
{
"type": "STRING",
"value": "module"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "module_id"
}
},
{
"type": "FIELD",
"name": "path",
"content": {
"type": "SYMBOL",
"name": "string_literal"
}
}
]
},
"module_body": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "module_member"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"module_member": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "requires_declaration"
},
{
"type": "SYMBOL",
"name": "header_declaration"
},
{
"type": "SYMBOL",
"name": "umbrella_dir_declaration"
},
{
"type": "SYMBOL",
"name": "submodule_declaration"
},
{
"type": "SYMBOL",
"name": "export_declaration"
},
{
"type": "SYMBOL",
"name": "export_as_declaration"
},
{
"type": "SYMBOL",
"name": "use_declaration"
},
{
"type": "SYMBOL",
"name": "link_declaration"
},
{
"type": "SYMBOL",
"name": "config_macros_declaration"
},
{
"type": "SYMBOL",
"name": "conflict_declaration"
}
]
},
"requires_declaration": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "requires"
},
{
"type": "SYMBOL",
"name": "feature_list"
}
]
},
"feature_list": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "feature"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "feature"
}
]
}
}
]
},
"feature": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "!"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
"header_declaration": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "private"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "textual"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "STRING",
"value": "umbrella"
},
{
"type": "STRING",
"value": "exclude"
}
]
},
{
"type": "STRING",
"value": "header"
},
{
"type": "FIELD",
"name": "path",
"content": {
"type": "SYMBOL",
"name": "string_literal"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "header_attributes"
},
{
"type": "BLANK"
}
]
}
]
},
"header_attributes": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "header_attribute"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"header_attribute": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "size"
},
{
"type": "STRING",
"value": "mtime"
}
]
},
{
"type": "SYMBOL",
"name": "integer_literal"
}
]
},
"umbrella_dir_declaration": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "umbrella"
},
{
"type": "FIELD",
"name": "path",
"content": {
"type": "SYMBOL",
"name": "string_literal"
}
}
]
},
"submodule_declaration": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_module_declaration"
},
{
"type": "SYMBOL",
"name": "inferred_submodule_declaration"
}
]
},
"inferred_submodule_declaration": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "explicit"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "framework"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "module"
},
{
"type": "STRING",
"value": "*"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attributes"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "inferred_submodule_member"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"inferred_submodule_member": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "export"
},
{
"type": "STRING",
"value": "*"
}
]
},
"export_declaration": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "export"
},
{
"type": "SYMBOL",
"name": "wildcard_module_id"
}
]
},
"export_as_declaration": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "export_as"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
"use_declaration": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "use"
},
{
"type": "SYMBOL",
"name": "module_id"
}
]
},
"link_declaration": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "link"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "framework"
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "library",
"content": {
"type": "SYMBOL",
"name": "string_literal"
}
}
]
},
"config_macros_declaration": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "config_macros"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attributes"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "config_macro_list"
},
{
"type": "BLANK"
}
]
}
]
},
"config_macro_list": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
}
]
},
"conflict_declaration": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "conflict"
},
{
"type": "FIELD",
"name": "module",
"content": {
"type": "SYMBOL",
"name": "module_id"
}
},
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "message",
"content": {
"type": "SYMBOL",
"name": "string_literal"
}
}
]
},
"attributes": {
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
"attribute": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": "]"
}
]
},
"module_id": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
}
]
},
"wildcard_module_id": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": "*"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": "*"
}
]
}
]
}
}
]
},
"identifier": {
"type": "PATTERN",
"value": "[a-zA-Z_]\\w*"
},
"string_literal": {
"type": "PATTERN",
"value": "\"[^\"\\n]*\""
},
"integer_literal": {
"type": "PATTERN",
"value": "\\d+"
},
"comment": {
"type": "TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "//"
},
{
"type": "PATTERN",
"value": ".*"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "/*"
},
{
"type": "PATTERN",
"value": "[^*]*\\*+([^/*][^*]*\\*+)*"
},
{
"type": "STRING",
"value": "/"
}
]
}
]
}
}
},
"extras": [
{
"type": "PATTERN",
"value": "\\s"
},
{
"type": "SYMBOL",
"name": "comment"
}
],
"conflicts": [],
"precedences": [],
"externals": [],
"inline": [],
"supertypes": [],
"reserved": {}
}