UNPKG

tm-grammars

Version:
396 lines (395 loc) 8.41 kB
{ "displayName": "Polar", "name": "polar", "patterns": [ { "include": "#comment" }, { "include": "#rule" }, { "include": "#rule-type" }, { "include": "#inline-query" }, { "include": "#resource-block" }, { "include": "#test-block" }, { "include": "#fixture" } ], "repository": { "boolean": { "match": "\\b(true|false)\\b", "name": "constant.language.boolean" }, "comment": { "match": "#.*", "name": "comment.line.number-sign" }, "fixture": { "patterns": [ { "match": "\\bfixture\\b", "name": "keyword.control" }, { "begin": "\\btest\\b", "beginCaptures": { "0": { "name": "keyword.control" } }, "end": "\\bfixture\\b", "endCaptures": { "0": { "name": "keyword.control" } } } ] }, "inline-query": { "begin": "\\?=", "beginCaptures": { "0": { "name": "keyword.control" } }, "end": ";", "name": "meta.inline-query", "patterns": [ { "include": "#term" } ] }, "keyword": { "patterns": [ { "match": "\\b(cut|or|debug|print|in|forall|if|and|of|not|matches|type|on|global)\\b", "name": "constant.character" } ] }, "number": { "patterns": [ { "match": "\\b[-+]?\\d+(?:(\\.)\\d+(?:e[-+]?\\d+)?|e[-+]?\\d+)\\b", "name": "constant.numeric.float" }, { "match": "\\b([-+])\\d+\\b", "name": "constant.numeric.integer" }, { "match": "\\b\\d+\\b", "name": "constant.numeric.natural" } ] }, "object-literal": { "begin": "([A-Z_a-z][0-9A-Z_a-z]*(?:::[0-9A-Z_a-z]+)*)\\s*\\{", "beginCaptures": { "1": { "name": "entity.name.type.resource" } }, "end": "}", "name": "constant.other.object-literal", "patterns": [ { "include": "#string" }, { "include": "#number" }, { "include": "#boolean" } ] }, "operator": { "captures": { "1": { "name": "keyword.control" } }, "match": "([-!*+/<=>])" }, "resource-block": { "begin": "(?<resourceType>[A-Z_a-z][0-9A-Z_a-z]*(?:::[0-9A-Z_a-z]+)*){0}((resource|actor)\\s+(\\g<resourceType>)(?:\\s+(extends)\\s+(\\g<resourceType>(?:\\s*,\\s*\\g<resourceType>)*)\\s*,?\\s*)?|(global))\\s*\\{", "beginCaptures": { "3": { "name": "keyword.control" }, "4": { "name": "entity.name.type" }, "5": { "name": "keyword.control" }, "6": { "patterns": [ { "match": "([A-Z_a-z][0-9A-Z_a-z]*(?:::[0-9A-Z_a-z]+)*)", "name": "entity.name.type" } ] }, "7": { "name": "keyword.control" } }, "end": "}", "name": "meta.resource-block", "patterns": [ { "match": ";", "name": "punctuation.separator.sequence.declarations" }, { "begin": "\\{", "end": "}", "name": "meta.relation-declaration", "patterns": [ { "include": "#specializer" }, { "include": "#comment" }, { "match": ",", "name": "punctuation.separator.sequence.dict" } ] }, { "include": "#term" } ] }, "rule": { "name": "meta.rule", "patterns": [ { "include": "#rule-functor" }, { "begin": "\\bif\\b", "beginCaptures": { "0": { "name": "keyword.control.if" } }, "end": ";", "patterns": [ { "include": "#term" } ] }, { "match": ";" } ] }, "rule-functor": { "begin": "([A-Z_a-z][0-9A-Z_a-z]*(?:::[0-9A-Z_a-z]+)*)\\s*\\(", "beginCaptures": { "1": { "name": "support.function.rule" } }, "end": "\\)", "patterns": [ { "include": "#specializer" }, { "match": ",", "name": "punctuation.separator.sequence.list" }, { "include": "#term" } ] }, "rule-type": { "begin": "\\btype\\b", "beginCaptures": { "0": { "name": "keyword.other.type-decl" } }, "end": ";", "name": "meta.rule-type", "patterns": [ { "include": "#rule-functor" } ] }, "specializer": { "captures": { "1": { "name": "entity.name.type.resource" } }, "match": "[A-Z_a-z][0-9A-Z_a-z]*(?:::[0-9A-Z_a-z]+)*\\s*:\\s*([A-Z_a-z][0-9A-Z_a-z]*(?:::[0-9A-Z_a-z]+)*)" }, "string": { "begin": "\"", "end": "\"", "name": "string.quoted.double", "patterns": [ { "match": "\\\\.", "name": "constant.character.escape" } ] }, "term": { "patterns": [ { "include": "#comment" }, { "include": "#string" }, { "include": "#number" }, { "include": "#keyword" }, { "include": "#operator" }, { "include": "#boolean" }, { "include": "#object-literal" }, { "begin": "\\[", "end": "]", "name": "meta.bracket.list", "patterns": [ { "include": "#term" }, { "match": ",", "name": "punctuation.separator.sequence.list" } ] }, { "begin": "\\{", "end": "}", "name": "meta.bracket.dict", "patterns": [ { "include": "#term" }, { "match": ",", "name": "punctuation.separator.sequence.dict" } ] }, { "begin": "\\(", "end": "\\)", "name": "meta.parens", "patterns": [ { "include": "#term" } ] } ] }, "test-block": { "begin": "(test)\\s+(\"[^\"]*\")\\s*\\{", "beginCaptures": { "1": { "name": "keyword.control" }, "2": { "name": "string.quoted.double" } }, "end": "}", "name": "meta.test-block", "patterns": [ { "begin": "(setup)\\s*\\{", "beginCaptures": { "1": { "name": "keyword.control" } }, "end": "}", "name": "meta.test-setup", "patterns": [ { "include": "#rule" }, { "include": "#comment" }, { "include": "#fixture" } ] }, { "include": "#rule" }, { "match": "\\b(assert(?:|_not))\\b", "name": "keyword.other" }, { "include": "#comment" }, { "name": "meta.iff-rule", "patterns": [ { "include": "#rule-functor" }, { "begin": "\\biff\\b", "beginCaptures": { "0": { "name": "keyword.control" } }, "end": ";", "patterns": [ { "include": "#term" } ] }, { "match": ";" } ] } ] } }, "scopeName": "source.polar" }