524 lines · json
1{2 "name": "PDLL",3 "fileTypes": [4 "pdll"5 ],6 "patterns": [7 {8 "include": "#comment"9 },10 {11 "include": "#string"12 },13 {14 "include": "#string_block"15 },16 {17 "include": "#integer"18 },19 {20 "include": "#include"21 },22 {23 "include": "#user_constraint"24 },25 {26 "include": "#user_rewrite"27 },28 {29 "include": "#pattern"30 },31 {32 "include": "#inside_pattern"33 }34 ],35 "repository": {36 "comment": {37 "match": "\/\/.*$",38 "name": "comment.line.double-slash.pdll"39 },40 "string": {41 "name": "string.quoted.double.pdll",42 "begin": "\"",43 "end": "\"",44 "beginCaptures": {45 "0": {46 "name": "punctuation.definition.string.begin.pdll"47 }48 },49 "patterns": [50 {51 "match": "\\\\[nt\"]",52 "name": "constant.character.escape.pdll"53 },54 {55 "match": "\\\\.",56 "name": "invalid.illegal.pdll"57 }58 ],59 "endCaptures": {60 "0": {61 "name": "punctuation.definition.string.end.pdll"62 }63 }64 },65 "string_block": {66 "name": "string.quoted.triple.pdll",67 "begin": "\\[{",68 "end": "}]",69 "beginCaptures": {70 "0": {71 "name": "punctuation.definition.string.begin.pdll"72 }73 },74 "patterns": [75 {76 "match": "\\\\[nt\"]",77 "name": "constant.character.escape.pdll"78 },79 {80 "match": "\\\\.",81 "name": "invalid.illegal.pdll"82 }83 ],84 "endCaptures": {85 "0": {86 "name": "punctuation.definition.string.end.pdll"87 }88 }89 },90 "integer": {91 "match": "[0-9]+",92 "name": "constant.numeric.pdll"93 },94 "include": {95 "patterns": [96 {97 "match": "(#include)",98 "name": "keyword.control.pdll"99 }100 ]101 },102 "argument_or_result_list": {103 "patterns": [104 {105 "match": "\\b([aA-zZ_0-9]*)\\b\\s*:\\s*([aA-zZ_0-9]+)\\b(\\<([^\\>]+)\\>)?",106 "captures": {107 "1": {108 "name": "variable.parameter.pdll"109 },110 "2": {111 "name": "entity.name.type.pdll"112 },113 "4": {114 "name": "variable.other.enummember.pdll"115 }116 }117 },118 {119 "match": "(\\(|\\>|,)\\s*([aA-zZ_0-9]+)\\b(\\<([^\\>]+)\\>)?\\s*(?=[^:])",120 "captures": {121 "2": {122 "name": "entity.name.type.pdll"123 },124 "4": {125 "name": "variable.other.enummember.pdll"126 }127 }128 }129 ]130 },131 "user_constraint": {132 "patterns": [133 {134 "begin": "\\b(Constraint)\\b\\s*(\\b[aA-zZ_0-9]*\\b)?",135 "beginCaptures": {136 "1": {137 "name": "keyword.other.pdll"138 },139 "2": {140 "name": "entity.name.type.pdll"141 }142 },143 "patterns": [144 {145 "begin": "(\\[{)",146 "patterns": [147 {148 "include": "source.cpp"149 }150 ],151 "end": "(}])"152 },153 {154 "begin": "(?=\\()",155 "patterns": [156 {157 "include": "#argument_or_result_list"158 }159 ],160 "end": "\\)"161 },162 {163 "include": "#argument_or_result_list"164 },165 {166 "begin": "{",167 "patterns": [168 {169 "include": "#inside_pattern"170 }171 ],172 "end": "(?=})"173 },174 {175 "begin": "=>",176 "patterns": [177 {178 "include": "#inside_pattern"179 }180 ],181 "end": "(?=;|,|\\))"182 }183 ],184 "end": "(}|;|,)|(?=\\))"185 }186 ]187 },188 "user_rewrite": {189 "patterns": [190 {191 "begin": "\\b(Rewrite)\\b\\s*(\\b[aA-zZ_0-9]*\\b)?",192 "beginCaptures": {193 "1": {194 "name": "keyword.other.pdll"195 },196 "2": {197 "name": "entity.name.function.pdll"198 }199 },200 "patterns": [201 {202 "begin": "(\\[{)",203 "patterns": [204 {205 "include": "source.cpp"206 }207 ],208 "end": "(}])"209 },210 {211 "begin": "(?=\\()",212 "patterns": [213 {214 "include": "#argument_or_result_list"215 }216 ],217 "end": "\\)"218 },219 {220 "include": "#argument_or_result_list"221 },222 {223 "begin": "{",224 "patterns": [225 {226 "include": "#inside_pattern"227 }228 ],229 "end": "(?=})"230 },231 {232 "begin": "=>",233 "patterns": [234 {235 "include": "#inside_pattern"236 }237 ],238 "end": "(?=;|,|\\))"239 }240 ],241 "end": "(}|;|,)|(?=\\))"242 }243 ]244 },245 "pattern_metadata": {246 "patterns": [247 {248 "match": "\\b(with)\\b",249 "name": "keyword.other.pdll"250 },251 {252 "match": "\\b(benefit)\\b\\(([0-9]+)\\)",253 "captures": {254 "1": {255 "name": "entity.name.variable.pdll"256 },257 "2": {258 "name": "constant.numeric.pdll"259 }260 }261 },262 {263 "match": "\\b(recursion)\\b",264 "name": "entity.name.variable.pdll"265 }266 ]267 },268 "pattern": {269 "patterns": [270 {271 "begin": "\\b(Pattern)\\b\\s*(\\b[aA-zZ_0-9]*\\b)?\\s*(\\bwith\\b\\s*[^\\{]*)?\\s*({)",272 "beginCaptures": {273 "1": {274 "name": "keyword.other.pdll"275 },276 "2": {277 "name": "entity.name.function.pdll"278 },279 "3": {280 "patterns": [281 {282 "include": "#pattern_metadata"283 }284 ]285 }286 },287 "patterns": [288 {289 "include": "#inside_pattern"290 }291 ],292 "end": "(})"293 },294 {295 "begin": "\\b(Pattern)\\b\\s*(\\b[aA-zZ_0-9]*\\b)?\\s*(\\bwith\\b\\s*[^\\=]*)?\\s*(=>)",296 "beginCaptures": {297 "1": {298 "name": "keyword.other.pdll"299 },300 "2": {301 "name": "entity.name.function.pdll"302 },303 "3": {304 "patterns": [305 {306 "include": "#pattern_metadata"307 }308 ]309 }310 },311 "patterns": [312 {313 "include": "#inside_pattern"314 }315 ],316 "end": ";"317 }318 ]319 },320 "inside_pattern": {321 "patterns": [322 {323 "match": "\\b(erase|let|replace|return|rewrite|with)\\b",324 "captures": {325 "1": {326 "name": "keyword.control.pdll"327 }328 }329 },330 {331 "include": "#expressions"332 }333 ]334 },335 "variable_constraint": {336 "patterns": [337 {338 "match": "\\b(Op)<([a-zA-Z0-9_\\.$-]*)>",339 "captures": {340 "1": {341 "name": "entity.name.type.pdll"342 },343 "2": {344 "name": "variable.other.enummember.pdll"345 }346 }347 },348 {349 "begin": "<",350 "patterns": [351 {352 "include": "#expressions"353 }354 ],355 "end": ">"356 },357 {358 "match": "[a-zA-Z_0-9]+",359 "name": "entity.name.type.pdll"360 }361 ]362 },363 "variable_definition": {364 "patterns": [365 {366 "begin": "\\b([aA-zZ_0-9]*)\\b\\s*:\\s*\\[",367 "beginCaptures": {368 "1": {369 "name": "entity.name.variable.pdll"370 }371 },372 "patterns": [373 {374 "include": "#variable_constraint"375 }376 ],377 "end": "\\]"378 },379 {380 "match": "\\b([aA-zZ_0-9]*)\\b\\s*:\\s*([aA-zZ_0-9]+(\\<([^\\>]+)\\>)?)",381 "captures": {382 "1": {383 "name": "entity.name.variable.pdll"384 },385 "2": {386 "patterns": [387 {388 "include": "#variable_constraint"389 }390 ]391 }392 }393 }394 ]395 },396 "expressions": {397 "patterns": [398 {399 "include": "#user_constraint"400 },401 {402 "include": "#user_rewrite"403 },404 {405 "include": "#attr_expr"406 },407 {408 "include": "#op_expr"409 },410 {411 "include": "#type_expr"412 },413 {414 "include": "#call_expr"415 },416 {417 "include": "#variable_definition"418 },419 {420 "include": "#identifier_expr"421 },422 {423 "include": "#string"424 },425 {426 "include": "#string_block"427 },428 {429 "include": "#comment"430 },431 {432 "begin": "{",433 "patterns": [434 {435 "include": "#inside_pattern"436 }437 ],438 "end": "}"439 },440 {441 "begin": "\\(",442 "patterns": [443 {444 "include": "#expressions"445 }446 ],447 "end": "\\)"448 }449 ]450 },451 "attr_expr": {452 "patterns": [453 {454 "begin": "(attr)<",455 "beginCaptures": {456 "1": {457 "name": "keyword.other.pdll"458 }459 },460 "patterns": [461 {462 "include": "#string"463 },464 {465 "include": "#string_block"466 }467 ],468 "end": ">"469 }470 ]471 },472 "call_expr": {473 "begin": "\\b([a-zA-Z0-9_]+)\\(",474 "beginCaptures": {475 "1": {476 "name": "entity.name.variable.pdll"477 }478 },479 "patterns": [480 {481 "include": "#expressions"482 }483 ],484 "end": "\\)"485 },486 "identifier_expr": {487 "match": "\\b([a-zA-Z0-9_]+)\\b",488 "name": "entity.name.variable.pdll"489 },490 "op_expr": {491 "match": "\\b(op)<([0-9a-zA-Z_\\.]*)>",492 "captures": {493 "1": {494 "name": "keyword.other.pdll"495 },496 "2": {497 "name": "variable.other.enummember.pdll"498 }499 }500 },501 "type_expr": {502 "patterns": [503 {504 "begin": "\\b(type)<",505 "beginCaptures": {506 "1": {507 "name": "keyword.other.pdll"508 }509 },510 "patterns": [511 {512 "include": "#string"513 },514 {515 "include": "#string_block"516 }517 ],518 "end": ">"519 }520 ]521 }522 },523 "scopeName": "source.pdll"524}