{ "name": "Opa", "scopeName": "source.opa", "patterns": [ { "include": "#code" } ], "repository": { "code": { "patterns": [ { "include": "#xml-literal" }, { "include": "#strings" }, { "include": "#comments" }, { "include": "#declarations" }, { "include": "#keywords" }, { "include": "#constants" }, { "include": "#directive" } ] }, "comments": { "patterns": [ { "name": "comment.block.opa", "begin": "/\\*(\\*)?", "end": "\\*/", "patterns": [ { "name": "keyword.annotation.opa", "match": "@\\w*" }, { "include": "#comments" } ] }, { "name": "comment.single.opa", "match": "\\/\\/.*$" } ] }, "constants": { "patterns": [ { "name": "constant.language", "match": "\\b(void|false|true)\\b" }, { "name": "constant.numeric.opa", "match": "\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)([LlFfUuDd]|UL|ul)?\\b" } ] }, "declarations": { "patterns": [ { "match": "([\\w_]*)\\s*=\\s*{{", "captures": { "1": { "name": "entity.name.module" } } }, { "match": "\\b(type)\\b\\s*([a-zA-Z_][a-zA-Z0-9_]*|`[^`\\n\\r]`)", "captures": { "1": { "name": "keyword.opa" }, "2": { "name": "entity.name.type" } } }, { "begin": "^\\s*(@[\\w_]*)?\\s*([\\w_]*)\\((?=.*\\)\\s*(:\\s(\\w*))?\\s*=)", "end": "\\)\\s*(:\\s(\\w*))?\\s*=", "beginCaptures": { "1": { "name": "keyword.directive.opa" }, "2": { "name": "entity.name.function" } } }, { "match": "(\\w*)(:.*)?\\s*=[^=]", "captures": { "1": { "name": "variable.other.opa" } } } ] }, "directive": { "name": "keyword.directive.opa", "match": "@[\\w_]*" }, "embedded-source": { "patterns": [ { "name": "source.opa.embeded.block", "begin": "{", "end": "}", "patterns": [ { "include": "#code" }, { "include": "#embedded-source" } ] } ] }, "keywords": { "name": "keyword.opa", "match": "\\b(_|as|do|else|if|match|then|type|with|and|begin|css|db|end|external|forall|import|package|parser|rec|server|val|xml_parser)\\b" }, "strings": { "patterns": [ { "name": "string.quoted.double.scala", "begin": "(?\u003c!\\\\)\"", "end": "\"", "patterns": [ { "name": "constant.character.escape.scala", "match": "\\\\." } ] } ] }, "xml-attribute": { "patterns": [ { "match": "(\\w+)=((\"[^\"]*\")|(#\\w*))", "captures": { "1": { "name": "entity.other.attribute-name" }, "3": { "name": "string.quoted.double" }, "4": { "name": "variable.other.opa" } } } ] }, "xml-literal": { "patterns": [ { "name": "text.xml", "begin": "\u003c/?([a-zA-Z0-9]+)", "end": "/?\u003e", "patterns": [ { "include": "#xml-literal" }, { "include": "#xml-attribute" }, { "include": "#embedded-source" } ], "beginCaptures": { "1": { "name": "entity.name.tag" } } } ] } } }