{ "name": "Haxe", "scopeName": "source.hx", "patterns": [ { "include": "#all" } ], "repository": { "abstract": { "name": "meta.abstract.hx", "begin": "(?=abstract)", "end": "(?\u003c=\\})|(;)", "patterns": [ { "include": "#abstract-name" }, { "include": "#abstract-name-post" }, { "include": "#abstract-block" } ], "endCaptures": { "1": { "name": "punctuation.terminator.hx" } } }, "abstract-block": { "name": "meta.block.hx", "begin": "(?\u003c=\\{)", "end": "(\\})", "patterns": [ { "include": "#method" }, { "include": "#modifiers" }, { "include": "#variable" }, { "include": "#block" }, { "include": "#block-contents" } ], "endCaptures": { "1": { "name": "punctuation.definition.block.end.hx" } } }, "abstract-name": { "begin": "\\b(abstract)\\b", "end": "([_A-Za-z]\\w*)", "patterns": [ { "include": "#global" } ], "beginCaptures": { "1": { "name": "storage.type.class.hx" } }, "endCaptures": { "1": { "name": "entity.name.type.class.hx" } } }, "abstract-name-post": { "begin": "(?\u003c=\\w)", "end": "([\\{;])", "patterns": [ { "include": "#global" }, { "name": "keyword.other.hx", "match": "\\b(from|to)\\b" }, { "include": "#type" }, { "name": "punctuation.definition.other.hx", "match": "[\\(\\)]" } ], "endCaptures": { "1": { "name": "punctuation.definition.block.begin.hx" } } }, "accessor-method": { "patterns": [ { "name": "entity.name.function.hx", "match": "\\b(get|set)_[_A-Za-z]\\w*\\b" } ] }, "all": { "patterns": [ { "include": "#global" }, { "include": "#package" }, { "include": "#import" }, { "include": "#using" }, { "name": "storage.modifier.hx", "match": "\\b(final)\\b(?=\\s+(class|interface|extern|private))" }, { "include": "#abstract" }, { "include": "#class" }, { "include": "#enum" }, { "include": "#interface" }, { "include": "#typedef" }, { "include": "#block" }, { "include": "#block-contents" } ] }, "array": { "name": "meta.array.literal.hx", "begin": "\\[", "end": "\\]", "patterns": [ { "include": "#block" }, { "include": "#block-contents" } ], "beginCaptures": { "0": { "name": "punctuation.definition.array.begin.hx" } }, "endCaptures": { "0": { "name": "punctuation.definition.array.end.hx" } } }, "arrow-function": { "name": "meta.method.arrow.hx", "begin": "(\\()(?=[^(]*?\\)\\s*-\u003e)", "end": "(\\))\\s*(-\u003e)", "patterns": [ { "include": "#arrow-function-parameter" } ], "beginCaptures": { "1": { "name": "punctuation.definition.parameters.begin.hx" } }, "endCaptures": { "1": { "name": "punctuation.definition.parameters.end.hx" }, "2": { "name": "storage.type.function.arrow.hx" } } }, "arrow-function-parameter": { "begin": "(?\u003c=\\(|,)", "end": "(?=\\)|,)", "patterns": [ { "include": "#parameter-name" }, { "include": "#arrow-function-parameter-type-hint" }, { "include": "#parameter-assign" }, { "include": "#punctuation-comma" }, { "include": "#global" } ] }, "arrow-function-parameter-type-hint": { "begin": ":", "end": "(?=\\)|,|=)", "patterns": [ { "include": "#type" } ], "beginCaptures": { "0": { "name": "keyword.operator.type.annotation.hx" } } }, "block": { "begin": "\\{", "end": "\\}", "patterns": [ { "include": "#block" }, { "include": "#block-contents" } ], "beginCaptures": { "0": { "name": "punctuation.definition.block.begin.hx" } }, "endCaptures": { "0": { "name": "punctuation.definition.block.end.hx" } } }, "block-contents": { "patterns": [ { "include": "#global" }, { "include": "#regex" }, { "include": "#array" }, { "include": "#constants" }, { "include": "#strings" }, { "include": "#metadata" }, { "include": "#method" }, { "include": "#variable" }, { "include": "#modifiers" }, { "include": "#new-expr" }, { "include": "#for-loop" }, { "include": "#keywords" }, { "include": "#arrow-function" }, { "include": "#method-call" }, { "include": "#enum-constructor-call" }, { "include": "#punctuation-braces" }, { "include": "#macro-reification" }, { "include": "#operators" }, { "include": "#operator-assignment" }, { "include": "#punctuation-terminator" }, { "include": "#punctuation-comma" }, { "include": "#punctuation-accessor" }, { "include": "#identifiers" } ] }, "class": { "name": "meta.class.hx", "begin": "(?=class)", "end": "(?\u003c=\\})|(;)", "patterns": [ { "include": "#class-name" }, { "include": "#class-name-post" }, { "include": "#class-block" } ], "endCaptures": { "1": { "name": "punctuation.terminator.hx" } } }, "class-block": { "name": "meta.block.hx", "begin": "(?\u003c=\\{)", "end": "(\\})", "patterns": [ { "include": "#method" }, { "include": "#modifiers" }, { "include": "#variable" }, { "include": "#block" }, { "include": "#block-contents" } ], "endCaptures": { "1": { "name": "punctuation.definition.block.end.hx" } } }, "class-name": { "name": "meta.class.identifier.hx", "begin": "\\b(class)\\b", "end": "([_A-Za-z]\\w*)", "patterns": [ { "include": "#global" } ], "beginCaptures": { "1": { "name": "storage.type.class.hx" } }, "endCaptures": { "1": { "name": "entity.name.type.class.hx" } } }, "class-name-post": { "begin": "(?\u003c=\\w)", "end": "([\\{;])", "patterns": [ { "include": "#modifiers-inheritance" }, { "include": "#type" } ], "endCaptures": { "1": { "name": "punctuation.definition.block.begin.hx" } } }, "comments": { "patterns": [ { "name": "comment.block.documentation.hx", "begin": "/\\*\\*(?!/)", "end": "\\*/", "patterns": [ { "include": "#javadoc-tags" } ], "beginCaptures": { "0": { "name": "punctuation.definition.comment.hx" } }, "endCaptures": { "0": { "name": "punctuation.definition.comment.hx" } } }, { "name": "comment.block.hx", "begin": "/\\*", "end": "\\*/", "patterns": [ { "include": "#javadoc-tags" } ], "beginCaptures": { "0": { "name": "punctuation.definition.comment.hx" } }, "endCaptures": { "0": { "name": "punctuation.definition.comment.hx" } } }, { "name": "comment.line.double-slash.hx", "match": "(//).*$\\n?", "captures": { "1": { "name": "punctuation.definition.comment.hx" } } } ] }, "conditional-compilation": { "patterns": [ { "match": "((#(if|elseif))[\\s!]+([a-zA-Z_][a-zA-Z0-9_]*(\\.[a-zA-Z_][a-zA-Z0-9_]*)*)(?=\\s|/\\*|//))", "captures": { "0": { "name": "punctuation.definition.tag" } } }, { "name": "punctuation.definition.tag", "begin": "((#(if|elseif))[\\s!]*)(?=\\()", "end": "(?\u003c=\\)|\\n)", "patterns": [ { "include": "#conditional-compilation-parens" } ], "beginCaptures": { "0": { "name": "punctuation.definition.tag" } }, "endCaptures": { "0": { "name": "punctuation.definition.tag" } } }, { "name": "punctuation.definition.tag", "match": "(#(end|else|error|line))" }, { "name": "punctuation.definition.tag", "match": "(#([a-zA-Z0-9_]*))\\s" } ] }, "conditional-compilation-parens": { "begin": "\\(", "end": "\\)", "patterns": [ { "include": "#conditional-compilation-parens" } ] }, "constant-name": { "name": "variable.other.hx", "match": "\\b([_A-Z][_A-Z0-9]*)\\b" }, "constants": { "patterns": [ { "name": "constant.language.hx", "match": "\\b(true|false|null)\\b" }, { "name": "constant.numeric.hex.hx", "match": "\\b(0(x|X)[0-9a-fA-F]*)\\b" }, { "match": "(?x)\n(?\u003c!\\$)(?:\n (?:\\b[0-9]+(\\.)[0-9]+[eE][+-]?[0-9]+\\b)| # 1.1E+3\n (?:\\b[0-9]+(\\.)[eE][+-]?[0-9]+\\b)| # 1.E+3\n (?:\\B(\\.)[0-9]+[eE][+-]?[0-9]+\\b)| # .1E+3\n (?:\\b[0-9]+[eE][+-]?[0-9]+\\b)| # 1E+3\n (?:\\b[0-9]+(\\.)[0-9]+\\b)| # 1.1\n (?:\\b[0-9]+(\\.)(?!\\.)\\B)| # 1.\n (?:\\B(\\.)[0-9]+\\b)| # .1\n (?:\\b[0-9]+\\b) # 1\n)(?!\\$)", "captures": { "0": { "name": "constant.numeric.decimal.hx" }, "1": { "name": "meta.delimiter.decimal.period.hx" }, "2": { "name": "meta.delimiter.decimal.period.hx" }, "3": { "name": "meta.delimiter.decimal.period.hx" }, "4": { "name": "meta.delimiter.decimal.period.hx" }, "5": { "name": "meta.delimiter.decimal.period.hx" }, "6": { "name": "meta.delimiter.decimal.period.hx" } } } ] }, "enum": { "name": "meta.enum.hx", "begin": "(?=enum\\s+[A-Z])", "end": "(?\u003c=\\})|(;)", "patterns": [ { "include": "#enum-name" }, { "include": "#enum-name-post" }, { "include": "#enum-block" } ], "endCaptures": { "1": { "name": "punctuation.terminator.hx" } } }, "enum-block": { "name": "meta.block.hx", "begin": "(?\u003c=\\{)", "end": "(\\})", "patterns": [ { "include": "#global" }, { "include": "#metadata" }, { "include": "#parameters" }, { "include": "#identifiers" } ], "endCaptures": { "1": { "name": "punctuation.definition.block.end.hx" } } }, "enum-constructor-call": { "begin": "\\b(?\u003c!\\.)((_*[a-z]\\w*\\.)*)(_*[A-Z]\\w*)(?:(\\.)(_*[A-Z]\\w*[a-z]\\w*))*\\s*(\\()", "end": "(\\))", "patterns": [ { "include": "#block" }, { "include": "#block-contents" } ], "beginCaptures": { "1": { "name": "support.package.hx" }, "3": { "name": "entity.name.type.hx" }, "4": { "name": "support.package.hx" }, "5": { "name": "entity.name.type.hx" }, "6": { "name": "meta.brace.round.hx" } }, "endCaptures": { "1": { "name": "meta.brace.round.hx" } } }, "enum-name": { "begin": "\\b(enum)\\b", "end": "([_A-Za-z]\\w*)", "patterns": [ { "include": "#global" } ], "beginCaptures": { "1": { "name": "storage.type.class.hx" } }, "endCaptures": { "1": { "name": "entity.name.type.class.hx" } } }, "enum-name-post": { "begin": "(?\u003c=\\w)", "end": "([\\{;])", "patterns": [ { "include": "#type" } ], "endCaptures": { "1": { "name": "punctuation.definition.block.begin.hx" } } }, "for-loop": { "begin": "\\b(for)\\b\\s*(\\()", "end": "(\\))", "patterns": [ { "name": "keyword.other.in.hx", "match": "\\b(in)\\b" }, { "include": "#block" }, { "include": "#block-contents" } ], "beginCaptures": { "1": { "name": "keyword.control.flow-control.hx" }, "2": { "name": "meta.brace.round.hx" } }, "endCaptures": { "1": { "name": "meta.brace.round.hx" } } }, "function-type": { "begin": "\\(", "end": "\\)", "patterns": [ { "include": "#function-type-parameter" } ], "beginCaptures": { "0": { "name": "punctuation.definition.parameters.begin.hx" } }, "endCaptures": { "0": { "name": "punctuation.definition.parameters.end.hx" } } }, "function-type-parameter": { "begin": "(?\u003c=\\(|,)", "end": "(?=\\)|,)", "patterns": [ { "include": "#global" }, { "include": "#metadata" }, { "include": "#operator-optional" }, { "include": "#punctuation-comma" }, { "include": "#function-type-parameter-name" }, { "include": "#function-type-parameter-type-hint" }, { "include": "#parameter-assign" }, { "include": "#type" }, { "include": "#global" } ] }, "function-type-parameter-name": { "match": "([_a-zA-Z]\\w*)(?=\\s*:)", "captures": { "1": { "name": "variable.parameter.hx" } } }, "function-type-parameter-type-hint": { "begin": ":", "end": "(?=\\)|,|=)", "patterns": [ { "include": "#type" } ], "beginCaptures": { "0": { "name": "keyword.operator.type.annotation.hx" } } }, "global": { "patterns": [ { "include": "#comments" }, { "include": "#conditional-compilation" } ] }, "identifier-name": { "name": "variable.other.hx", "match": "\\b([_A-Za-z]\\w*)\\b" }, "identifiers": { "patterns": [ { "include": "#constant-name" }, { "include": "#type-name" }, { "include": "#identifier-name" } ] }, "import": { "begin": "import\\b", "end": "$|(;)", "patterns": [ { "include": "#type-path" }, { "name": "keyword.control.as.hx", "match": "\\b(as)\\b" }, { "name": "keyword.control.in.hx", "match": "\\b(in)\\b" }, { "name": "constant.language.import-all.hx", "match": "\\*" }, { "name": "variable.other.hxt", "match": "\\b([_A-Za-z]\\w*)\\b(?=\\s*(as|in|$|(;)))" }, { "include": "#type-path-package-name" } ], "beginCaptures": { "0": { "name": "keyword.control.import.hx" } }, "endCaptures": { "1": { "name": "punctuation.terminator.hx" } } }, "interface": { "name": "meta.interface.hx", "begin": "(?=interface)", "end": "(?\u003c=\\})|(;)", "patterns": [ { "include": "#interface-name" }, { "include": "#interface-name-post" }, { "include": "#interface-block" } ], "endCaptures": { "1": { "name": "punctuation.terminator.hx" } } }, "interface-block": { "name": "meta.block.hx", "begin": "(?\u003c=\\{)", "end": "(\\})", "patterns": [ { "include": "#method" }, { "include": "#variable" }, { "include": "#block" }, { "include": "#block-contents" } ], "endCaptures": { "1": { "name": "punctuation.definition.block.end.hx" } } }, "interface-name": { "begin": "\\b(interface)\\b", "end": "([_A-Za-z]\\w*)", "patterns": [ { "include": "#global" } ], "beginCaptures": { "1": { "name": "storage.type.class.hx" } }, "endCaptures": { "1": { "name": "entity.name.type.class.hx" } } }, "interface-name-post": { "begin": "(?\u003c=\\w)", "end": "([\\{;])", "patterns": [ { "include": "#global" }, { "include": "#modifiers-inheritance" }, { "include": "#type" } ], "endCaptures": { "1": { "name": "punctuation.definition.block.begin.hx" } } }, "javadoc-tags": { "patterns": [ { "match": "(@(?:param|exception|throws|event))\\s+([_A-Za-z]\\w*)\\s+", "captures": { "1": { "name": "storage.type.class.javadoc" }, "2": { "name": "variable.other.javadoc" } } }, { "match": "(@since)\\s+([\\w\\.-]+)\\s+", "captures": { "1": { "name": "storage.type.class.javadoc" }, "2": { "name": "constant.numeric.javadoc" } } }, { "match": "@(param|exception|throws|deprecated|returns?|since|default|see|event)", "captures": { "0": { "name": "storage.type.class.javadoc" } } } ] }, "keywords": { "patterns": [ { "begin": "(?\u003c=trace|$type|if|while|for|super)\\s*(\\()", "end": "\\)", "patterns": [ { "include": "#block-contents" } ], "beginCaptures": { "2": { "name": "meta.brace.round.hx" } }, "endCaptures": { "0": { "name": "meta.brace.round.hx" } } }, { "begin": "(?\u003c=catch)\\s*(\\()", "end": "\\)", "patterns": [ { "include": "#block-contents" }, { "include": "#type-check" } ], "beginCaptures": { "2": { "name": "meta.brace.round.hx" } }, "endCaptures": { "0": { "name": "meta.brace.round.hx" } } }, { "begin": "(?\u003c=cast)\\s*(\\()", "end": "\\)", "patterns": [ { "begin": "(?=,)", "end": "(?=\\))", "patterns": [ { "include": "#type" } ] }, { "include": "#block-contents" } ], "beginCaptures": { "2": { "name": "meta.brace.round.hx" } }, "endCaptures": { "0": { "name": "meta.brace.round.hx" } } }, { "name": "keyword.control.catch-exception.hx", "match": "\\b(try|catch|throw)\\b" }, { "begin": "\\b(case|default)\\b", "end": ":|(?=if)|$", "patterns": [ { "include": "#global" }, { "include": "#metadata" }, { "match": "\\b(var|final)\\b\\s*([_a-zA-Z]\\w*)\\b", "captures": { "1": { "name": "storage.type.variable.hx" }, "2": { "name": "variable.other.hx" } } }, { "include": "#array" }, { "include": "#constants" }, { "include": "#strings" }, { "name": "meta.brace.round.hx", "match": "\\(" }, { "name": "meta.brace.round.hx", "match": "\\)" }, { "include": "#macro-reification" }, { "name": "keyword.operator.extractor.hx", "match": "=\u003e" }, { "include": "#operator-assignment" }, { "include": "#punctuation-comma" }, { "include": "#keywords" }, { "include": "#method-call" }, { "include": "#identifiers" } ], "beginCaptures": { "1": { "name": "keyword.control.flow-control.hx" } } }, { "name": "keyword.control.flow-control.hx", "match": "\\b(if|else|return|do|while|for|break|continue|switch|case|default)\\b" }, { "name": "keyword.other.untyped.hx", "match": "\\b(cast|untyped)\\b" }, { "name": "keyword.other.trace.hx", "match": "\\btrace\\b" }, { "name": "keyword.other.type.hx", "match": "\\$type\\b" }, { "name": "keyword.other.untyped-property.hx", "match": "\\__(global|this)__\\b" }, { "name": "variable.language.hx", "match": "\\b(this|super)\\b" }, { "name": "keyword.operator.new.hx", "match": "\\bnew\\b" }, { "name": "storage.type.hx", "match": "\\b(abstract|class|enum|interface|typedef)\\b" }, { "name": "storage.type.function.arrow.hx", "match": "-\u003e" }, { "include": "#modifiers" }, { "include": "#modifiers-inheritance" } ] }, "keywords-accessor": { "name": "storage.type.property.hx", "match": "\\b(default|get|set|dynamic|never|null)\\b" }, "macro-reification": { "patterns": [ { "match": "(\\$)([eabipv])\\{", "captures": { "1": { "name": "punctuation.definition.reification.hx" }, "2": { "name": "keyword.reification.hx" } } }, { "match": "((\\$)([a-zA-Z]*))", "captures": { "2": { "name": "punctuation.definition.reification.hx" }, "3": { "name": "variable.reification.hx" } } } ] }, "metadata": { "patterns": [ { "begin": "(@)(:(abi|abstract|access|allow|analyzer|annotation|arrayAccess|astSource|autoBuild|bind|bitmap|bridgeProperties|build|buildXml|bypassAccessor|callable|classCode|commutative|compilerGenerated|const|coreApi|coreType|cppFileCode|cppInclude|cppNamespaceCode|cs.assemblyMeta|cs.assemblyStrict|cs.using|dce|debug|decl|delegate|depend|deprecated|eager|enum|event|expose|extern|file|fileXml|final|fixed|flash.property|font|forward|forwardStatics|from|functionCode|functionTailCode|generic|genericBuild|genericClassPerMethod|getter|hack|headerClassCode|headerCode|headerInclude|headerNamespaceCode|hlNative|hxGen|ifFeature|include|inline|internal|isVar|java.native|javaCanonical|jsRequire|jvm.synthetic|keep|keepInit|keepSub|luaDotMethod|luaRequire|macro|markup|mergeBlock|multiReturn|multiType|native|nativeChildren|nativeGen|nativeProperty|nativeStaticExtension|noClosure|noCompletion|noDebug|noDoc|noImportGlobal|noPrivateAccess|noStack|noUsing|nonVirtual|notNull|nullSafety|objc|objcProtocol|op|optional|overload|persistent|phpClassConst|phpGlobal|phpMagic|phpNoConstructor|pos|private|privateAccess|property|protected|publicFields|pure|pythonImport|readOnly|remove|require|resolve|rtti|runtimeValue|scalar|selfCall|semantics|setter|sound|sourceFile|stackOnly|strict|struct|structAccess|structInit|suppressWarnings|templatedCall|throws|to|transient|unifyMinDynamic|unreflective|unsafe|using|void|volatile)\\b)\\s*(\\()", "end": "\\)", "patterns": [ { "include": "#block-contents" } ], "beginCaptures": { "1": { "name": "punctuation.metadata.hx" }, "2": { "name": "storage.modifier.metadata.hx" }, "3": { "name": "meta.brace.round.hx" } }, "endCaptures": { "0": { "name": "meta.brace.round.hx" } } }, { "match": "((@)(:(abi|abstract|access|allow|analyzer|annotation|arrayAccess|astSource|autoBuild|bind|bitmap|bridgeProperties|build|buildXml|bypassAccessor|callable|classCode|commutative|compilerGenerated|const|coreApi|coreType|cppFileCode|cppInclude|cppNamespaceCode|cs.assemblyMeta|cs.assemblyStrict|cs.using|dce|debug|decl|delegate|depend|deprecated|eager|enum|event|expose|extern|file|fileXml|final|fixed|flash.property|font|forward|forwardStatics|from|functionCode|functionTailCode|generic|genericBuild|genericClassPerMethod|getter|hack|headerClassCode|headerCode|headerInclude|headerNamespaceCode|hlNative|hxGen|ifFeature|include|inline|internal|isVar|java.native|javaCanonical|jsRequire|jvm.synthetic|keep|keepInit|keepSub|luaDotMethod|luaRequire|macro|markup|mergeBlock|multiReturn|multiType|native|nativeChildren|nativeGen|nativeProperty|nativeStaticExtension|noClosure|noCompletion|noDebug|noDoc|noImportGlobal|noPrivateAccess|noStack|noUsing|nonVirtual|notNull|nullSafety|objc|objcProtocol|op|optional|overload|persistent|phpClassConst|phpGlobal|phpMagic|phpNoConstructor|pos|private|privateAccess|property|protected|publicFields|pure|pythonImport|readOnly|remove|require|resolve|rtti|runtimeValue|scalar|selfCall|semantics|setter|sound|sourceFile|stackOnly|strict|struct|structAccess|structInit|suppressWarnings|templatedCall|throws|to|transient|unifyMinDynamic|unreflective|unsafe|using|void|volatile)\\b))", "captures": { "2": { "name": "punctuation.metadata.hx" }, "3": { "name": "storage.modifier.metadata.hx" } } }, { "begin": "(@)(:?[a-zA-Z_]*)\\s*(\\()", "end": "\\)", "patterns": [ { "include": "#block-contents" } ], "beginCaptures": { "1": { "name": "punctuation.metadata.hx" }, "2": { "name": "variable.metadata.hx" }, "3": { "name": "meta.brace.round.hx" } }, "endCaptures": { "0": { "name": "meta.brace.round.hx" } } }, { "match": "(@)(:?)([a-zA-Z_]*(\\.))*([a-zA-Z_]*)?", "captures": { "1": { "name": "punctuation.metadata.hx" }, "2": { "name": "variable.metadata.hx" }, "3": { "name": "variable.metadata.hx" }, "4": { "name": "punctuation.accessor.hx" }, "5": { "name": "variable.metadata.hx" } } } ] }, "method": { "name": "meta.method.hx", "begin": "(?=\\bfunction\\b)", "end": "(?\u003c=[\\};])", "patterns": [ { "include": "#macro-reification" }, { "include": "#method-name" }, { "include": "#method-name-post" }, { "include": "#method-block" } ] }, "method-block": { "name": "meta.method.block.hx", "begin": "(?\u003c=\\{)", "end": "(\\})", "patterns": [ { "include": "#block" }, { "include": "#block-contents" } ], "beginCaptures": { "1": { "name": "punctuation.definition.block.begin.hx" } }, "endCaptures": { "1": { "name": "punctuation.definition.block.end.hx" } } }, "method-call": { "begin": "\\b(?:(__(?:addressOf|as|call|checked|cpp|cs|define_feature|delete|feature|field|fixed|foreach|forin|has_next|hkeys|in|int|is|java|js|keys|lock|lua|lua_table|new|php|physeq|prefix|ptr|resources|rethrow|set|setfield|sizeof|type|typeof|unprotect|unsafe|valueOf|var|vector|vmem_get|vmem_set|vmem_sign|instanceof|strict_eq|strict_neq)__)|([_a-z]\\w*))\\s*(\\()", "end": "(\\))", "patterns": [ { "include": "#block" }, { "include": "#block-contents" } ], "beginCaptures": { "1": { "name": "keyword.other.untyped-function.hx" }, "2": { "name": "entity.name.function.hx" }, "3": { "name": "meta.brace.round.hx" } }, "endCaptures": { "1": { "name": "meta.brace.round.hx" } } }, "method-name": { "begin": "\\b(function)\\b\\s*\\b(?:(new)|([_A-Za-z]\\w*))?\\b", "end": "(?=$|\\()", "patterns": [ { "include": "#macro-reification" }, { "include": "#type-parameters" } ], "beginCaptures": { "1": { "name": "storage.type.function.hx" }, "2": { "name": "storage.type.hx" }, "3": { "name": "entity.name.function.hx" } } }, "method-name-post": { "begin": "(?\u003c=[\\w\\s\u003e])", "end": "(\\{)|(;)", "patterns": [ { "include": "#parameters" }, { "include": "#method-return-type-hint" }, { "include": "#block" }, { "include": "#block-contents" } ], "endCaptures": { "1": { "name": "punctuation.definition.block.begin.hx" }, "2": { "name": "punctuation.terminator.hx" } } }, "method-return-type-hint": { "begin": "(?\u003c=\\))\\s*(:)", "end": "(?=\\{|;|[a-z0-9])", "patterns": [ { "include": "#type" } ], "beginCaptures": { "1": { "name": "keyword.operator.type.annotation.hx" } } }, "modifiers": { "patterns": [ { "name": "storage.type.class", "match": "\\b(enum)\\b" }, { "name": "storage.modifier.hx", "match": "\\b(public|private|static|dynamic|inline|macro|extern|override)\\b" }, { "name": "storage.modifier.hx", "match": "\\b(final)\\b(?=\\s+(public|private|static|dynamic|inline|macro|extern|override|function))" } ] }, "modifiers-inheritance": { "name": "storage.modifier.hx", "match": "\\b(implements|extends)\\b" }, "new-expr": { "name": "new.expr.hx", "begin": "(?\u003c!\\.)\\b(new)\\b", "end": "(?=$|\\()", "patterns": [ { "include": "#type" } ], "beginCaptures": { "1": { "name": "keyword.operator.new.hx" } } }, "operator-assignment": { "name": "keyword.operator.assignment.hx", "match": "(=)" }, "operator-optional": { "name": "keyword.operator.optional.hx", "match": "(\\?)(?!\\s)" }, "operator-type-hint": { "name": "keyword.operator.type.annotation.hx", "match": "(:)" }, "operators": { "patterns": [ { "name": "keyword.operator.logical.hx", "match": "(\u0026\u0026|\\|\\|)" }, { "name": "keyword.operator.bitwise.hx", "match": "(~|\u0026|\\||\\^|\u003e\u003e\u003e|\u003c\u003c|\u003e\u003e)" }, { "name": "keyword.operator.comparison.hx", "match": "(==|!=|\u003c=|\u003e=|\u003c|\u003e)" }, { "name": "keyword.operator.logical.hx", "match": "(!)" }, { "name": "keyword.operator.increment-decrement.hx", "match": "(\\-\\-|\\+\\+)" }, { "name": "keyword.operator.arithmetic.hx", "match": "(\\-|\\+|\\*|\\/|%)" }, { "name": "keyword.operator.intiterator.hx", "match": "\\.\\.\\." }, { "name": "keyword.operator.arrow.hx", "match": "=\u003e" }, { "begin": "\\?", "end": ":", "patterns": [ { "include": "#block-contents" } ], "beginCaptures": { "0": { "name": "keyword.operator.ternary.hx" } }, "endCaptures": { "0": { "name": "keyword.operator.ternary.hx" } } } ] }, "package": { "begin": "package\\b", "end": "$|(;)", "patterns": [ { "include": "#type-path" }, { "include": "#type-path-package-name" } ], "beginCaptures": { "0": { "name": "keyword.other.package.hx" } }, "endCaptures": { "1": { "name": "punctuation.terminator.hx" } } }, "parameter": { "begin": "(?\u003c=\\(|,)", "end": "(?=\\)(?!\\s*-\u003e)|,)", "patterns": [ { "include": "#parameter-name" }, { "include": "#parameter-type-hint" }, { "include": "#parameter-assign" }, { "include": "#punctuation-comma" }, { "include": "#global" } ] }, "parameter-assign": { "begin": "=", "end": "(?=\\)|,)", "patterns": [ { "include": "#block" }, { "include": "#block-contents" } ], "beginCaptures": { "0": { "name": "keyword.operator.assignment.hx" } } }, "parameter-name": { "begin": "(?\u003c=\\(|,)", "end": "([_a-zA-Z]\\w*)", "patterns": [ { "include": "#global" }, { "include": "#metadata" }, { "include": "#operator-optional" } ], "endCaptures": { "1": { "name": "variable.parameter.hx" } } }, "parameter-type-hint": { "begin": ":", "end": "(?=\\)(?!\\s*-\u003e)|,|=)", "patterns": [ { "include": "#type" } ], "beginCaptures": { "0": { "name": "keyword.operator.type.annotation.hx" } } }, "parameters": { "name": "meta.parameters.hx", "begin": "\\(", "end": "\\s*(\\)(?!\\s*-\u003e))", "patterns": [ { "include": "#parameter" } ], "beginCaptures": { "0": { "name": "punctuation.definition.parameters.begin.hx" } }, "endCaptures": { "1": { "name": "punctuation.definition.parameters.end.hx" } } }, "punctuation-accessor": { "name": "punctuation.accessor.hx", "match": "\\." }, "punctuation-braces": { "begin": "\\(", "end": "\\)", "patterns": [ { "include": "#keywords" }, { "name": "keyword.other.hx", "match": "\\bis\\b(?!\\()" }, { "include": "#block" }, { "include": "#block-contents" }, { "include": "#type-check" } ], "beginCaptures": { "0": { "name": "meta.brace.round.hx" } }, "endCaptures": { "0": { "name": "meta.brace.round.hx" } } }, "punctuation-comma": { "name": "punctuation.separator.comma.hx", "match": "," }, "punctuation-terminator": { "name": "punctuation.terminator.hx", "match": ";" }, "regex": { "name": "string.regexp.hx", "begin": "(~/)", "end": "(/)([gimsu]*)", "patterns": [ { "include": "#regexp" } ], "beginCaptures": { "1": { "name": "punctuation.definition.string.begin.hx" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.hx" }, "2": { "name": "keyword.other.hx" } } }, "regex-character-class": { "patterns": [ { "name": "constant.other.character-class.regexp", "match": "\\\\[wWsSdDtrnvf]|\\." }, { "name": "constant.character.numeric.regexp", "match": "\\\\([0-7]{3}|x[[:xdigit:]][[:xdigit:]]|u[[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]])" }, { "name": "constant.character.control.regexp", "match": "\\\\c[A-Z]" }, { "name": "constant.character.escape.backslash.regexp", "match": "\\\\." } ] }, "regexp": { "patterns": [ { "name": "keyword.control.anchor.regexp", "match": "\\\\[bB]|\\^|\\$" }, { "name": "keyword.other.back-reference.regexp", "match": "\\\\[1-9]\\d*" }, { "name": "keyword.operator.quantifier.regexp", "match": "[?+*]|\\{(\\d+,\\d+|\\d+,|,\\d+|\\d+)\\}\\??" }, { "name": "keyword.operator.or.regexp", "match": "\\|" }, { "name": "meta.group.assertion.regexp", "begin": "(\\()((\\?=)|(\\?!))", "end": "(\\))", "patterns": [ { "include": "#regexp" } ], "beginCaptures": { "1": { "name": "punctuation.definition.group.regexp" }, "2": { "name": "punctuation.definition.group.assertion.regexp" }, "3": { "name": "meta.assertion.look-ahead.regexp" }, "4": { "name": "meta.assertion.negative-look-ahead.regexp" } }, "endCaptures": { "1": { "name": "punctuation.definition.group.regexp" } } }, { "name": "meta.group.regexp", "begin": "\\((\\?:)?", "end": "\\)", "patterns": [ { "include": "#regexp" } ], "beginCaptures": { "0": { "name": "punctuation.definition.group.regexp" }, "1": { "name": "punctuation.definition.group.capture.regexp" } }, "endCaptures": { "0": { "name": "punctuation.definition.group.regexp" } } }, { "name": "constant.other.character-class.set.regexp", "begin": "(\\[)(\\^)?", "end": "(\\])", "patterns": [ { "name": "constant.other.character-class.range.regexp", "match": "(?:.|(\\\\(?:[0-7]{3}|x[[:xdigit:]][[:xdigit:]]|u[[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]]))|(\\\\c[A-Z])|(\\\\.))\\-(?:[^\\]\\\\]|(\\\\(?:[0-7]{3}|x[[:xdigit:]][[:xdigit:]]|u[[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]]))|(\\\\c[A-Z])|(\\\\.))", "captures": { "1": { "name": "constant.character.numeric.regexp" }, "2": { "name": "constant.character.control.regexp" }, "3": { "name": "constant.character.escape.backslash.regexp" }, "4": { "name": "constant.character.numeric.regexp" }, "5": { "name": "constant.character.control.regexp" }, "6": { "name": "constant.character.escape.backslash.regexp" } } }, { "include": "#regex-character-class" } ], "beginCaptures": { "1": { "name": "punctuation.definition.character-class.regexp" }, "2": { "name": "keyword.operator.negation.regexp" } }, "endCaptures": { "1": { "name": "punctuation.definition.character-class.regexp" } } }, { "include": "#regex-character-class" } ] }, "string-escape-sequences": { "patterns": [ { "name": "constant.character.escape.hx", "match": "\\\\[0-3][0-9]{2}" }, { "name": "constant.character.escape.hx", "match": "\\\\x[0-9A-Fa-f]{2}" }, { "name": "constant.character.escape.hx", "match": "\\\\u[0-9]{4}" }, { "name": "constant.character.escape.hx", "match": "\\\\u\\{[0-9A-Fa-f]{1,}\\}" }, { "name": "constant.character.escape.hx", "match": "\\\\[nrt\"'\\\\]" }, { "name": "invalid.escape.sequence.hx", "match": "\\\\." } ] }, "strings": { "patterns": [ { "name": "string.quoted.double.hx", "begin": "\"", "end": "\"", "patterns": [ { "include": "#string-escape-sequences" } ], "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.hx" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end.hx" } } }, { "begin": "(')", "end": "(')", "patterns": [ { "name": "string.quoted.single.hx", "begin": "\\$(?=\\$)", "end": "\\$", "beginCaptures": { "0": { "name": "constant.character.escape.hx" } }, "endCaptures": { "0": { "name": "constant.character.escape.hx" } } }, { "include": "#string-escape-sequences" }, { "begin": "(\\${)", "end": "(})", "patterns": [ { "include": "#block-contents" } ], "beginCaptures": { "0": { "name": "punctuation.definition.block.begin.hx" } }, "endCaptures": { "0": { "name": "punctuation.definition.block.end.hx" } } }, { "match": "(\\$)([_a-zA-Z]\\w*)", "captures": { "1": { "name": "punctuation.definition.block.begin.hx" }, "2": { "name": "variable.other.hx" } } }, { "name": "constant.character.escape.hx" }, { "name": "string.quoted.single.hx", "match": "." } ], "beginCaptures": { "0": { "name": "string.quoted.single.hx" }, "1": { "name": "punctuation.definition.string.begin.hx" } }, "endCaptures": { "0": { "name": "string.quoted.single.hx" }, "1": { "name": "punctuation.definition.string.end.hx" } } } ] }, "type": { "patterns": [ { "include": "#global" }, { "include": "#macro-reification" }, { "include": "#type-name" }, { "include": "#type-parameters" }, { "name": "keyword.operator.type.function.hx", "match": "-\u003e" }, { "name": "keyword.operator.type.intersection.hx", "match": "\u0026" }, { "name": "keyword.operator.optional", "match": "\\?(?=\\s*[_A-Z])" }, { "name": "punctuation.definition.tag", "match": "\\?(?!\\s*[_A-Z])" }, { "begin": "(\\{)", "end": "(?\u003c=\\})", "patterns": [ { "include": "#typedef-block" } ], "beginCaptures": { "0": { "name": "punctuation.definition.block.begin.hx" } } }, { "include": "#function-type" } ] }, "type-check": { "begin": "(?\u003c!macro)(?=:)", "end": "(?=\\))", "patterns": [ { "include": "#operator-type-hint" }, { "include": "#type" } ] }, "type-name": { "patterns": [ { "match": "\\b(Any|Array|ArrayAccess|Bool|Class|Date|DateTools|Dynamic|Enum|EnumValue|EReg|Float|IMap|Int|IntIterator|Iterable|Iterator|KeyValueIterator|KeyValueIterable|Lambda|List|ListIterator|ListNode|Map|Math|Null|Reflect|Single|Std|String|StringBuf|StringTools|Sys|Type|UInt|UnicodeString|ValueType|Void|Xml|XmlType)(?:(\\.)(_*[A-Z]\\w*[a-z]\\w*))*\\b", "captures": { "1": { "name": "support.class.builtin.hx" }, "2": { "name": "support.package.hx" }, "3": { "name": "entity.name.type.hx" } } }, { "match": "\\b(?\u003c![^.]\\.)((_*[a-z]\\w*\\.)*)(_*[A-Z]\\w*)(?:(\\.)(_*[A-Z]\\w*[a-z]\\w*))*\\b", "captures": { "1": { "name": "support.package.hx" }, "3": { "name": "entity.name.type.hx" }, "4": { "name": "support.package.hx" }, "5": { "name": "entity.name.type.hx" } } } ] }, "type-parameter-constraint-new": { "name": "keyword.operator.type.annotation.hxt", "match": ":" }, "type-parameter-constraint-old": { "begin": "(:)\\s*(\\()", "end": "\\)", "patterns": [ { "include": "#type" }, { "include": "#punctuation-comma" } ], "beginCaptures": { "1": { "name": "keyword.operator.type.annotation.hx" }, "2": { "name": "punctuation.definition.constraint.begin.hx" } }, "endCaptures": { "0": { "name": "punctuation.definition.constraint.end.hx" } } }, "type-parameters": { "name": "meta.type-parameters.hx", "begin": "(\u003c)", "end": "(?=$)|(\u003e)", "patterns": [ { "include": "#type" }, { "include": "#type-parameter-constraint-old" }, { "include": "#type-parameter-constraint-new" }, { "include": "#global" }, { "include": "#regex" }, { "include": "#array" }, { "include": "#constants" }, { "include": "#strings" }, { "include": "#metadata" }, { "include": "#punctuation-comma" } ], "beginCaptures": { "1": { "name": "punctuation.definition.typeparameters.begin.hx" } }, "endCaptures": { "1": { "name": "punctuation.definition.typeparameters.end.hx" } } }, "type-path": { "patterns": [ { "include": "#global" }, { "include": "#punctuation-accessor" }, { "include": "#type-path-type-name" } ] }, "type-path-package-name": { "name": "support.package.hx", "match": "\\b([_A-Za-z]\\w*)\\b" }, "type-path-type-name": { "name": "entity.name.type.hx", "match": "\\b(_*[A-Z]\\w*)\\b" }, "typedef": { "name": "meta.typedef.hx", "begin": "(?=typedef)", "end": "(?\u003c=\\})|(;)", "patterns": [ { "include": "#typedef-name" }, { "include": "#typedef-name-post" }, { "include": "#typedef-block" } ], "endCaptures": { "1": { "name": "punctuation.terminator.hx" } } }, "typedef-block": { "name": "meta.block.hx", "begin": "(?\u003c=\\{)", "end": "(\\})", "patterns": [ { "include": "#global" }, { "include": "#metadata" }, { "include": "#method" }, { "include": "#variable" }, { "include": "#modifiers" }, { "include": "#punctuation-comma" }, { "include": "#operator-optional" }, { "include": "#typedef-extension" }, { "include": "#typedef-simple-field-type-hint" }, { "include": "#identifier-name" }, { "include": "#strings" } ], "endCaptures": { "1": { "name": "punctuation.definition.block.end.hx" } } }, "typedef-extension": { "begin": "\u003e", "end": ",|$", "patterns": [ { "include": "#type" } ] }, "typedef-name": { "begin": "\\b(typedef)\\b", "end": "([_A-Za-z]\\w*)", "patterns": [ { "include": "#global" } ], "beginCaptures": { "1": { "name": "storage.type.class.hx" } }, "endCaptures": { "1": { "name": "entity.name.type.class.hx" } } }, "typedef-name-post": { "begin": "(?\u003c=\\w)", "end": "(\\{)|(?=;)", "patterns": [ { "include": "#global" }, { "include": "#punctuation-brackets" }, { "include": "#punctuation-separator" }, { "include": "#operator-assignment" }, { "include": "#type" } ], "endCaptures": { "1": { "name": "punctuation.definition.block.begin.hx" } } }, "typedef-simple-field-type-hint": { "begin": ":", "end": "(?=\\}|,|;)", "patterns": [ { "include": "#type" } ], "beginCaptures": { "0": { "name": "keyword.operator.type.annotation.hx" } } }, "using": { "begin": "using\\b", "end": "$|(;)", "patterns": [ { "include": "#type-path" }, { "include": "#type-path-package-name" } ], "beginCaptures": { "0": { "name": "keyword.other.using.hx" } }, "endCaptures": { "1": { "name": "punctuation.terminator.hx" } } }, "variable": { "begin": "(?=\\b(var|final)\\b)", "end": "(?=$)|(;)", "patterns": [ { "include": "#variable-name" }, { "include": "#variable-name-next" }, { "include": "#variable-assign" }, { "include": "#variable-name-post" } ], "endCaptures": { "1": { "name": "punctuation.terminator.hx" } } }, "variable-accessors": { "name": "meta.parameters.hx", "begin": "\\(", "end": "\\)", "patterns": [ { "include": "#global" }, { "include": "#keywords-accessor" }, { "include": "#accessor-method" }, { "include": "#punctuation-comma" } ], "beginCaptures": { "0": { "name": "punctuation.definition.parameters.begin.hx" } }, "endCaptures": { "0": { "name": "punctuation.definition.parameters.end.hx" } } }, "variable-assign": { "begin": "=", "end": "(?=;|,)", "patterns": [ { "include": "#block" }, { "include": "#block-contents" } ], "beginCaptures": { "0": { "name": "keyword.operator.assignment.hx" } } }, "variable-name": { "begin": "\\b(var|final)\\b", "end": "(?=$)|([_a-zA-Z]\\w*)", "patterns": [ { "include": "#operator-optional" } ], "beginCaptures": { "1": { "name": "storage.type.variable.hx" } }, "endCaptures": { "1": { "name": "variable.other.hx" } } }, "variable-name-next": { "begin": ",", "end": "([_a-zA-Z]\\w*)", "patterns": [ { "include": "#global" } ], "beginCaptures": { "0": { "name": "punctuation.separator.comma.hx" } }, "endCaptures": { "1": { "name": "variable.other.hx" } } }, "variable-name-post": { "begin": "(?\u003c=\\w)", "end": "(?=;)|(?==)", "patterns": [ { "include": "#variable-accessors" }, { "include": "#variable-type-hint" }, { "include": "#block-contents" } ] }, "variable-type-hint": { "begin": ":", "end": "(?=$|;|,|=)", "patterns": [ { "include": "#type" } ], "beginCaptures": { "0": { "name": "keyword.operator.type.annotation.hx" } } } } }