feat: add TYPE/STRUCT and DATA_BLOCK support to tree-sitter grammar

- Add type_definition rule for UDT files (TYPE/STRUCT/END_STRUCT/END_TYPE)
- Add data_block rule for DB files (DATA_BLOCK/BEGIN/END_DATA_BLOCK)
- Add NON_RETAIN and RETAIN modifiers support in data blocks
- Keywords now highlighted correctly in .udt and .db files
This commit is contained in:
2026-02-20 23:42:28 +01:00
parent 553192e7a1
commit 7b25cf6202
4 changed files with 62784 additions and 53370 deletions
+343
View File
@@ -19,6 +19,14 @@
"type": "SYMBOL",
"name": "function"
},
{
"type": "SYMBOL",
"name": "type_definition"
},
{
"type": "SYMBOL",
"name": "data_block"
},
{
"type": "SYMBOL",
"name": "statement"
@@ -26,6 +34,341 @@
]
}
},
"type_definition": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "TYPE"
},
"named": true,
"value": "keyword"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "TITLE"
},
"named": true,
"value": "keyword"
},
{
"type": "STRING",
"value": "="
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_list"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "VERSION"
},
"named": true,
"value": "keyword"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "number"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "STRUCT"
},
"named": true,
"value": "keyword"
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "var_item"
},
{
"type": "SYMBOL",
"name": "block_comment"
}
]
}
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "END_STRUCT"
},
"named": true,
"value": "keyword"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "END_TYPE"
},
"named": true,
"value": "keyword"
}
]
},
"data_block": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "DATA_BLOCK"
},
"named": true,
"value": "keyword"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "TITLE"
},
"named": true,
"value": "keyword"
},
{
"type": "STRING",
"value": "="
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_list"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "VERSION"
},
"named": true,
"value": "keyword"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "number"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "NON_RETAIN"
},
"named": true,
"value": "keyword"
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "RETAIN"
},
"named": true,
"value": "keyword"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "var_declaration"
},
{
"type": "BLANK"
}
]
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "BEGIN"
},
"named": true,
"value": "keyword"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "statement"
}
},
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "END_DATA_BLOCK"
},
"named": true,
"value": "keyword"
}
]
},
"organization_block": {
"type": "SEQ",
"members": [