tm-grammars
Version:
Collecton of TextMate grammars in JSON
1,833 lines (1,832 loc) • 114 kB
JSON
{
"displayName": "Vyper",
"name": "vyper",
"patterns": [
{
"include": "#statement"
},
{
"include": "#expression"
},
{
"include": "#reserved-names-vyper"
}
],
"repository": {
"annotated-parameter": {
"begin": "\\b([_[:alpha:]]\\w*)\\s*(:)",
"beginCaptures": {
"1": {
"name": "variable.parameter.function.language.python"
},
"2": {
"name": "punctuation.separator.annotation.python"
}
},
"end": "(,)|(?=\\))",
"endCaptures": {
"1": {
"name": "punctuation.separator.parameters.python"
}
},
"patterns": [
{
"include": "#expression"
},
{
"match": "=(?!=)",
"name": "keyword.operator.assignment.python"
}
]
},
"assignment-operator": {
"match": "<<=|>>=|//=|\\*\\*=|\\+=|-=|/=|@=|\\*=|%=|~=|\\^=|&=|\\|=|=(?!=)",
"name": "keyword.operator.assignment.python"
},
"backticks": {
"begin": "`",
"end": "`|(?<!\\\\)(\\n)",
"name": "invalid.deprecated.backtick.python",
"patterns": [
{
"include": "#expression"
}
]
},
"builtin-callables": {
"patterns": [
{
"include": "#illegal-names"
},
{
"include": "#illegal-object-name"
},
{
"include": "#builtin-exceptions"
},
{
"include": "#builtin-functions"
},
{
"include": "#builtin-types"
}
]
},
"builtin-exceptions": {
"match": "(?<!\\.)\\b((Arithmetic|Assertion|Attribute|Buffer|BlockingIO|BrokenPipe|ChildProcess|(Connection(Aborted|Refused|Reset)?)|EOF|Environment|FileExists|FileNotFound|FloatingPoint|IO|Import|Indentation|Index|Interrupted|IsADirectory|NotADirectory|Permission|ProcessLookup|Timeout|Key|Lookup|Memory|Name|NotImplemented|OS|Overflow|Reference|Runtime|Recursion|Syntax|System|Tab|Type|UnboundLocal|Unicode(Encode|Decode|Translate)?|Value|Windows|ZeroDivision|ModuleNotFound)Error|((Pending)?Deprecation|Runtime|Syntax|User|Future|Import|Unicode|Bytes|Resource)?Warning|SystemExit|Stop(Async)?Iteration|KeyboardInterrupt|GeneratorExit|(Base)?Exception)\\b",
"name": "support.type.exception.python"
},
"builtin-functions": {
"patterns": [
{
"match": "(?<!\\.)\\b(__import__|abs|aiter|all|any|anext|ascii|bin|breakpoint|callable|chr|compile|copyright|credits|delattr|dir|divmod|enumerate|eval|exec|exit|filter|format|getattr|globals|hasattr|hash|help|hex|id|input|isinstance|issubclass|iter|len|license|locals|map|max|memoryview|min|next|oct|open|ord|pow|print|quit|range|reload|repr|reversed|round|setattr|sorted|sum|vars|zip)\\b",
"name": "support.function.builtin.python"
},
{
"match": "(?<!\\.)\\b(file|reduce|intern|raw_input|unicode|cmp|basestring|execfile|long|xrange)\\b",
"name": "variable.legacy.builtin.python"
},
{
"match": "(?<!\\.)\\b(abi_encode|abi_decode|_abi_encode|_abi_decode|floor|ceil|convert|slice|len|concat|sha256|method_id|keccak256|ecrecover|ecadd|ecmul|extract32|as_wei_value|raw_call|blockhash|blobhash|bitwise_and|bitwise_or|bitwise_xor|bitwise_not|uint256_addmod|uint256_mulmod|unsafe_add|unsafe_sub|unsafe_mul|unsafe_div|pow_mod256|uint2str|isqrt|sqrt|shift|create_minimal_proxy_to|create_forwarder_to|create_copy_of|create_from_blueprint|min|max|empty|abs|min_value|max_value|epsilon)\\b",
"name": "support.function.builtin.vyper"
},
{
"match": "(?<!\\.)\\b(send|print|breakpoint|selfdestruct|raw_call|raw_log|raw_revert|create_minimal_proxy_to|create_forwarder_to|create_copy_of|create_from_blueprint)\\b",
"name": "support.function.builtin.lowlevel.vyper"
},
{
"match": "(?<!\\.)\\b(struct|enum|flag|event|interface|HashMap|DynArray|Bytes|String)\\b",
"name": "support.type.reference.vyper"
},
{
"match": "(?<!\\.)\\b(nonreentrant|internal|view|pure|private|immutable|constant)\\b",
"name": "support.function.builtin.modifiers.safe.vyper"
},
{
"match": "(?<!\\.)\\b(deploy|nonpayable|payable|external|modifying)\\b",
"name": "support.function.builtin.modifiers.unsafe.vyper"
}
]
},
"builtin-possible-callables": {
"patterns": [
{
"include": "#builtin-callables"
},
{
"include": "#magic-names"
}
]
},
"builtin-types": {
"patterns": [
{
"match": "(?<!\\.)\\b(bool|bytearray|bytes|classmethod|complex|dict|float|frozenset|int|list|object|property|set|slice|staticmethod|str|tuple|type|super)\\b",
"name": "support.type.python"
},
{
"match": "(?<!\\.)\\b(uint248|HashMap|bytes22|int88|bytes24|bytes11|int24|bytes28|bytes19|uint136|decimal|uint40|uint168|uint120|int112|bytes4|uint192|String|int104|bytes29|int120|uint232|bytes8|bool|bytes14|int56|uint32|int232|uint48|bytes17|bytes12|uint24|int160|int72|int256|uint56|uint80|uint104|uint144|uint200|bytes20|uint160|bytes18|bytes16|uint8|int40|Bytes|uint72|bytes23??|int48|bytes6|bytes13|int192|bytes15|uint96|address|uint64|uint88|bytes7|int64|bytes32|bytes30|int176|int248|uint128|int8|int136|int216|bytes31|int144|bytes1|int168|bytes5|uint216|int200|bytes25|uint112|int128|bytes10|uint16|DynArray|int16|int32|int208|int184|bytes9|int224|bytes3|int80|uint152|bytes21|int96|uint256|uint176|uint240|bytes27|bytes26|int240|uint224|uint184|uint208|int152)\\b",
"name": "support.type.basetype.vyper"
},
{
"match": "(?<!\\.)\\b(max_int128|min_int128|nonlocal|babbage|_default_|___init___|await|indexed|____init____|true|constant|with|from|nonpayable|finally|enum|zero_wei|del|for|____default____|if|none|or|global|def|not|class|twei|struct|mwei|empty_bytes32|nonreentrant|transient|false|assert|event|pass|finney|init|lovelace|min_decimal|shannon|public|external|internal|flagunreachable|_init_|return|in|and|raise|try|gwei|break|zero_address|pwei|range|wei|while|ada|yield|as|immutable|continue|async|lambda|default|is|szabo|kwei|import|max_uint256|elif|___default___|else|except|max_decimal|interface|payable|ether)\\b",
"name": "support.type.keywords.vyper"
},
{
"match": "(?<!\\.)\\b(ZERO_ADDRESS|EMPTY_BYTES32|MAX_INT128|MIN_INT128|MAX_DECIMAL|MIN_DECIMAL|MIN_UINT256|MAX_UINT256|super)\\b",
"name": "support.type.constant.vyper"
},
{
"match": "(?<!\\.)\\b(implements|uses|initializes|exports)\\b",
"name": "entity.other.inherited-class.modules.vyper"
}
]
},
"call-wrapper-inheritance": {
"begin": "\\b(?=([_[:alpha:]]\\w*)\\s*(\\())",
"end": "(\\))",
"endCaptures": {
"1": {
"name": "punctuation.definition.arguments.end.python"
}
},
"name": "meta.function-call.python",
"patterns": [
{
"include": "#inheritance-name"
},
{
"include": "#function-arguments"
}
]
},
"class-declaration": {
"patterns": [
{
"begin": "\\s*(class)\\s+(?=[_[:alpha:]]\\w*\\s*([(:]))",
"beginCaptures": {
"1": {
"name": "storage.type.class.python"
}
},
"end": "(:)",
"endCaptures": {
"1": {
"name": "punctuation.section.class.begin.python"
}
},
"name": "meta.class.python",
"patterns": [
{
"include": "#class-name"
},
{
"include": "#class-inheritance"
}
]
}
]
},
"class-inheritance": {
"begin": "(\\()",
"beginCaptures": {
"1": {
"name": "punctuation.definition.inheritance.begin.python"
}
},
"end": "(\\))",
"endCaptures": {
"1": {
"name": "punctuation.definition.inheritance.end.python"
}
},
"name": "meta.class.inheritance.python",
"patterns": [
{
"match": "(\\*\\*?)",
"name": "keyword.operator.unpacking.arguments.python"
},
{
"match": ",",
"name": "punctuation.separator.inheritance.python"
},
{
"match": "=(?!=)",
"name": "keyword.operator.assignment.python"
},
{
"match": "\\bmetaclass\\b",
"name": "support.type.metaclass.python"
},
{
"include": "#illegal-names"
},
{
"include": "#class-kwarg"
},
{
"include": "#call-wrapper-inheritance"
},
{
"include": "#expression-base"
},
{
"include": "#member-access-class"
},
{
"include": "#inheritance-identifier"
}
]
},
"class-kwarg": {
"captures": {
"1": {
"name": "entity.other.inherited-class.python variable.parameter.class.python"
},
"2": {
"name": "keyword.operator.assignment.python"
}
},
"match": "\\b([_[:alpha:]]\\w*)\\s*(=)(?!=)"
},
"class-name": {
"patterns": [
{
"include": "#illegal-object-name"
},
{
"include": "#builtin-possible-callables"
},
{
"match": "\\b([_[:alpha:]]\\w*)\\b",
"name": "entity.name.type.class.python"
}
]
},
"codetags": {
"captures": {
"1": {
"name": "keyword.codetag.notation.python"
}
},
"match": "\\b(NOTE|XXX|HACK|FIXME|BUG|TODO)\\b"
},
"comments": {
"patterns": [
{
"begin": "#\\s*(type:)\\s*+(?!$|#)",
"beginCaptures": {
"0": {
"name": "meta.typehint.comment.python"
},
"1": {
"name": "comment.typehint.directive.notation.python"
}
},
"contentName": "meta.typehint.comment.python",
"end": "$|(?=#)",
"name": "comment.line.number-sign.python",
"patterns": [
{
"match": "\\Gignore(?=\\s*(?:$|#))",
"name": "comment.typehint.ignore.notation.python"
},
{
"match": "(?<!\\.)\\b(bool|bytes|float|int|object|str|List|Dict|Iterable|Sequence|Set|FrozenSet|Callable|Union|Tuple|Any|None)\\b",
"name": "comment.typehint.type.notation.python"
},
{
"match": "([]()*,.=\\[]|(->))",
"name": "comment.typehint.punctuation.notation.python"
},
{
"match": "([_[:alpha:]]\\w*)",
"name": "comment.typehint.variable.notation.python"
}
]
},
{
"include": "#comments-base"
}
]
},
"comments-base": {
"begin": "(#)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.comment.python"
}
},
"end": "$()",
"name": "comment.line.number-sign.python",
"patterns": [
{
"include": "#codetags"
}
]
},
"comments-string-double-three": {
"begin": "(#)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.comment.python"
}
},
"end": "($|(?=\"\"\"))",
"name": "comment.line.number-sign.python",
"patterns": [
{
"include": "#codetags"
}
]
},
"comments-string-single-three": {
"begin": "(#)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.comment.python"
}
},
"end": "($|(?='''))",
"name": "comment.line.number-sign.python",
"patterns": [
{
"include": "#codetags"
}
]
},
"curly-braces": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.dict.begin.python"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.definition.dict.end.python"
}
},
"patterns": [
{
"match": ":",
"name": "punctuation.separator.dict.python"
},
{
"include": "#expression"
}
]
},
"decorator": {
"begin": "^\\s*((@))\\s*(?=[_[:alpha:]]\\w*)",
"beginCaptures": {
"1": {
"name": "entity.name.function.decorator.python"
},
"2": {
"name": "punctuation.definition.decorator.python"
}
},
"end": "(\\))(.*?)(?=\\s*(?:#|$))|(?=[\\n#])",
"endCaptures": {
"1": {
"name": "punctuation.definition.arguments.end.python"
},
"2": {
"name": "invalid.illegal.decorator.python"
}
},
"name": "meta.function.decorator.python",
"patterns": [
{
"include": "#decorator-name"
},
{
"include": "#function-arguments"
}
]
},
"decorator-name": {
"patterns": [
{
"include": "#builtin-callables"
},
{
"include": "#illegal-object-name"
},
{
"captures": {
"2": {
"name": "punctuation.separator.period.python"
}
},
"match": "([_[:alpha:]]\\w*)|(\\.)",
"name": "entity.name.function.decorator.python"
},
{
"include": "#line-continuation"
},
{
"captures": {
"1": {
"name": "invalid.illegal.decorator.python"
}
},
"match": "\\s*([^#(.\\\\_[:alpha:]\\s].*?)(?=#|$)",
"name": "invalid.illegal.decorator.python"
}
]
},
"docstring": {
"patterns": [
{
"begin": "('''|\"\"\")",
"beginCaptures": {
"1": {
"name": "punctuation.definition.string.begin.python"
}
},
"end": "(\\1)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
}
},
"name": "string.quoted.docstring.multi.python",
"patterns": [
{
"include": "#docstring-prompt"
},
{
"include": "#codetags"
},
{
"include": "#docstring-guts-unicode"
}
]
},
{
"begin": "([Rr])('''|\"\"\")",
"beginCaptures": {
"1": {
"name": "storage.type.string.python"
},
"2": {
"name": "punctuation.definition.string.begin.python"
}
},
"end": "(\\2)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
}
},
"name": "string.quoted.docstring.raw.multi.python",
"patterns": [
{
"include": "#string-consume-escape"
},
{
"include": "#docstring-prompt"
},
{
"include": "#codetags"
}
]
},
{
"begin": "([\"'])",
"beginCaptures": {
"1": {
"name": "punctuation.definition.string.begin.python"
}
},
"end": "(\\1)|(\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "string.quoted.docstring.single.python",
"patterns": [
{
"include": "#codetags"
},
{
"include": "#docstring-guts-unicode"
}
]
},
{
"begin": "([Rr])([\"'])",
"beginCaptures": {
"1": {
"name": "storage.type.string.python"
},
"2": {
"name": "punctuation.definition.string.begin.python"
}
},
"end": "(\\2)|(\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "string.quoted.docstring.raw.single.python",
"patterns": [
{
"include": "#string-consume-escape"
},
{
"include": "#codetags"
}
]
}
]
},
"docstring-guts-unicode": {
"patterns": [
{
"include": "#escape-sequence-unicode"
},
{
"include": "#escape-sequence"
},
{
"include": "#string-line-continuation"
}
]
},
"docstring-prompt": {
"captures": {
"1": {
"name": "keyword.control.flow.python"
}
},
"match": "(?:^|\\G)\\s*((?:>>>|\\.\\.\\.)\\s)(?=\\s*\\S)"
},
"docstring-statement": {
"begin": "^(?=\\s*[Rr]?('''|\"\"\"|[\"']))",
"end": "((?<=\\1)|^)(?!\\s*[Rr]?('''|\"\"\"|[\"']))",
"patterns": [
{
"include": "#docstring"
}
]
},
"double-one-regexp-character-set": {
"patterns": [
{
"match": "\\[\\^?](?!.*?])"
},
{
"begin": "(\\[)(\\^)?(])?",
"beginCaptures": {
"1": {
"name": "punctuation.character.set.begin.regexp constant.other.set.regexp"
},
"2": {
"name": "keyword.operator.negation.regexp"
},
"3": {
"name": "constant.character.set.regexp"
}
},
"end": "(]|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "punctuation.character.set.end.regexp constant.other.set.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.character.set.regexp",
"patterns": [
{
"include": "#regexp-charecter-set-escapes"
},
{
"match": "\\N",
"name": "constant.character.set.regexp"
}
]
}
]
},
"double-one-regexp-comments": {
"begin": "\\(\\?#",
"beginCaptures": {
"0": {
"name": "punctuation.comment.begin.regexp"
}
},
"end": "(\\)|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "punctuation.comment.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "comment.regexp",
"patterns": [
{
"include": "#codetags"
}
]
},
"double-one-regexp-conditional": {
"begin": "(\\()\\?\\((\\w+(?:\\s+\\p{alnum}+)?|\\d+)\\)",
"beginCaptures": {
"0": {
"name": "keyword.operator.conditional.regexp"
},
"1": {
"name": "punctuation.parenthesis.conditional.begin.regexp"
}
},
"end": "(\\)|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-one-regexp-expression"
}
]
},
"double-one-regexp-expression": {
"patterns": [
{
"include": "#regexp-base-expression"
},
{
"include": "#double-one-regexp-character-set"
},
{
"include": "#double-one-regexp-comments"
},
{
"include": "#regexp-flags"
},
{
"include": "#double-one-regexp-named-group"
},
{
"include": "#regexp-backreference"
},
{
"include": "#double-one-regexp-lookahead"
},
{
"include": "#double-one-regexp-lookahead-negative"
},
{
"include": "#double-one-regexp-lookbehind"
},
{
"include": "#double-one-regexp-lookbehind-negative"
},
{
"include": "#double-one-regexp-conditional"
},
{
"include": "#double-one-regexp-parentheses-non-capturing"
},
{
"include": "#double-one-regexp-parentheses"
}
]
},
"double-one-regexp-lookahead": {
"begin": "(\\()\\?=",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookahead.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookahead.begin.regexp"
}
},
"end": "(\\)|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-one-regexp-expression"
}
]
},
"double-one-regexp-lookahead-negative": {
"begin": "(\\()\\?!",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookahead.negative.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookahead.begin.regexp"
}
},
"end": "(\\)|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-one-regexp-expression"
}
]
},
"double-one-regexp-lookbehind": {
"begin": "(\\()\\?<=",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookbehind.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookbehind.begin.regexp"
}
},
"end": "(\\)|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-one-regexp-expression"
}
]
},
"double-one-regexp-lookbehind-negative": {
"begin": "(\\()\\?<!",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookbehind.negative.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookbehind.begin.regexp"
}
},
"end": "(\\)|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-one-regexp-expression"
}
]
},
"double-one-regexp-named-group": {
"begin": "(\\()(\\?P<\\w+(?:\\s+\\p{alnum}+)?>)",
"beginCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp"
},
"2": {
"name": "entity.name.tag.named.group.regexp"
}
},
"end": "(\\)|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.named.regexp",
"patterns": [
{
"include": "#double-one-regexp-expression"
}
]
},
"double-one-regexp-parentheses": {
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp"
}
},
"end": "(\\)|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-one-regexp-expression"
}
]
},
"double-one-regexp-parentheses-non-capturing": {
"begin": "\\(\\?:",
"beginCaptures": {
"0": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp"
}
},
"end": "(\\)|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-one-regexp-expression"
}
]
},
"double-three-regexp-character-set": {
"patterns": [
{
"match": "\\[\\^?](?!.*?])"
},
{
"begin": "(\\[)(\\^)?(])?",
"beginCaptures": {
"1": {
"name": "punctuation.character.set.begin.regexp constant.other.set.regexp"
},
"2": {
"name": "keyword.operator.negation.regexp"
},
"3": {
"name": "constant.character.set.regexp"
}
},
"end": "(]|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "punctuation.character.set.end.regexp constant.other.set.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.character.set.regexp",
"patterns": [
{
"include": "#regexp-charecter-set-escapes"
},
{
"match": "\\N",
"name": "constant.character.set.regexp"
}
]
}
]
},
"double-three-regexp-comments": {
"begin": "\\(\\?#",
"beginCaptures": {
"0": {
"name": "punctuation.comment.begin.regexp"
}
},
"end": "(\\)|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "punctuation.comment.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "comment.regexp",
"patterns": [
{
"include": "#codetags"
}
]
},
"double-three-regexp-conditional": {
"begin": "(\\()\\?\\((\\w+(?:\\s+\\p{alnum}+)?|\\d+)\\)",
"beginCaptures": {
"0": {
"name": "keyword.operator.conditional.regexp"
},
"1": {
"name": "punctuation.parenthesis.conditional.begin.regexp"
}
},
"end": "(\\)|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-three-regexp-expression"
},
{
"include": "#comments-string-double-three"
}
]
},
"double-three-regexp-expression": {
"patterns": [
{
"include": "#regexp-base-expression"
},
{
"include": "#double-three-regexp-character-set"
},
{
"include": "#double-three-regexp-comments"
},
{
"include": "#regexp-flags"
},
{
"include": "#double-three-regexp-named-group"
},
{
"include": "#regexp-backreference"
},
{
"include": "#double-three-regexp-lookahead"
},
{
"include": "#double-three-regexp-lookahead-negative"
},
{
"include": "#double-three-regexp-lookbehind"
},
{
"include": "#double-three-regexp-lookbehind-negative"
},
{
"include": "#double-three-regexp-conditional"
},
{
"include": "#double-three-regexp-parentheses-non-capturing"
},
{
"include": "#double-three-regexp-parentheses"
},
{
"include": "#comments-string-double-three"
}
]
},
"double-three-regexp-lookahead": {
"begin": "(\\()\\?=",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookahead.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookahead.begin.regexp"
}
},
"end": "(\\)|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-three-regexp-expression"
},
{
"include": "#comments-string-double-three"
}
]
},
"double-three-regexp-lookahead-negative": {
"begin": "(\\()\\?!",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookahead.negative.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookahead.begin.regexp"
}
},
"end": "(\\)|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-three-regexp-expression"
},
{
"include": "#comments-string-double-three"
}
]
},
"double-three-regexp-lookbehind": {
"begin": "(\\()\\?<=",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookbehind.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookbehind.begin.regexp"
}
},
"end": "(\\)|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-three-regexp-expression"
},
{
"include": "#comments-string-double-three"
}
]
},
"double-three-regexp-lookbehind-negative": {
"begin": "(\\()\\?<!",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookbehind.negative.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookbehind.begin.regexp"
}
},
"end": "(\\)|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-three-regexp-expression"
},
{
"include": "#comments-string-double-three"
}
]
},
"double-three-regexp-named-group": {
"begin": "(\\()(\\?P<\\w+(?:\\s+\\p{alnum}+)?>)",
"beginCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp"
},
"2": {
"name": "entity.name.tag.named.group.regexp"
}
},
"end": "(\\)|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.named.regexp",
"patterns": [
{
"include": "#double-three-regexp-expression"
},
{
"include": "#comments-string-double-three"
}
]
},
"double-three-regexp-parentheses": {
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp"
}
},
"end": "(\\)|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-three-regexp-expression"
},
{
"include": "#comments-string-double-three"
}
]
},
"double-three-regexp-parentheses-non-capturing": {
"begin": "\\(\\?:",
"beginCaptures": {
"0": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp"
}
},
"end": "(\\)|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-three-regexp-expression"
},
{
"include": "#comments-string-double-three"
}
]
},
"ellipsis": {
"match": "\\.\\.\\.",
"name": "constant.other.ellipsis.python"
},
"escape-sequence": {
"match": "\\\\(x\\h{2}|[0-7]{1,3}|[\"'\\\\abfnrtv])",
"name": "constant.character.escape.python"
},
"escape-sequence-unicode": {
"patterns": [
{
"match": "\\\\(u\\h{4}|U\\h{8}|N\\{[\\w\\s]+?})",
"name": "constant.character.escape.python"
}
]
},
"expression": {
"patterns": [
{
"include": "#expression-base"
},
{
"include": "#member-access"
},
{
"match": "\\b([_[:alpha:]]\\w*)\\b"
}
]
},
"expression-bare": {
"patterns": [
{
"include": "#backticks"
},
{
"include": "#illegal-anno"
},
{
"include": "#literal"
},
{
"include": "#regexp"
},
{
"include": "#string"
},
{
"include": "#lambda"
},
{
"include": "#generator"
},
{
"include": "#illegal-operator"
},
{
"include": "#operator"
},
{
"include": "#curly-braces"
},
{
"include": "#item-access"
},
{
"include": "#list"
},
{
"include": "#odd-function-call"
},
{
"include": "#round-braces"
},
{
"include": "#function-call"
},
{
"include": "#builtin-functions"
},
{
"include": "#builtin-types"
},
{
"include": "#builtin-exceptions"
},
{
"include": "#magic-names"
},
{
"include": "#special-names"
},
{
"include": "#illegal-names"
},
{
"include": "#special-variables"
},
{
"include": "#ellipsis"
},
{
"include": "#punctuation"
},
{
"include": "#line-continuation"
},
{
"include": "#special-variables-types"
}
]
},
"expression-base": {
"patterns": [
{
"include": "#comments"
},
{
"include": "#expression-bare"
},
{
"include": "#line-continuation"
}
]
},
"f-expression": {
"patterns": [
{
"include": "#expression-bare"
},
{
"include": "#member-access"
},
{
"match": "\\b([_[:alpha:]]\\w*)\\b"
}
]
},
"fregexp-base-expression": {
"patterns": [
{
"include": "#fregexp-quantifier"
},
{
"include": "#fstring-formatting-braces"
},
{
"match": "\\{.*?}"
},
{
"include": "#regexp-base-common"
}
]
},
"fregexp-quantifier": {
"match": "\\{\\{(\\d+|\\d+,(\\d+)?|,\\d+)}}",
"name": "keyword.operator.quantifier.regexp"
},
"fstring-fnorm-quoted-multi-line": {
"begin": "\\b([Ff])([BUbu])?('''|\"\"\")",
"beginCaptures": {
"1": {
"name": "string.interpolated.python string.quoted.multi.python storage.type.string.python"
},
"2": {
"name": "invalid.illegal.prefix.python"
},
"3": {
"name": "punctuation.definition.string.begin.python string.interpolated.python string.quoted.multi.python"
}
},
"end": "(\\3)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.multi.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.fstring.python",
"patterns": [
{
"include": "#fstring-guts"
},
{
"include": "#fstring-illegal-multi-brace"
},
{
"include": "#fstring-multi-brace"
},
{
"include": "#fstring-multi-core"
}
]
},
"fstring-fnorm-quoted-single-line": {
"begin": "\\b([Ff])([BUbu])?(([\"']))",
"beginCaptures": {
"1": {
"name": "string.interpolated.python string.quoted.single.python storage.type.string.python"
},
"2": {
"name": "invalid.illegal.prefix.python"
},
"3": {
"name": "punctuation.definition.string.begin.python string.interpolated.python string.quoted.single.python"
}
},
"end": "(\\3)|((?<!\\\\)\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.single.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.fstring.python",
"patterns": [
{
"include": "#fstring-guts"
},
{
"include": "#fstring-illegal-single-brace"
},
{
"include": "#fstring-single-brace"
},
{
"include": "#fstring-single-core"
}
]
},
"fstring-formatting": {
"patterns": [
{
"include": "#fstring-formatting-braces"
},
{
"include": "#fstring-formatting-singe-brace"
}
]
},
"fstring-formatting-braces": {
"patterns": [
{
"captures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
},
"2": {
"name": "invalid.illegal.brace.python"
},
"3": {
"name": "constant.character.format.placeholder.other.python"
}
},
"match": "(\\{)(\\s*?)(})"
},
{
"match": "(\\{\\{|}})",
"name": "constant.character.escape.python"
}
]
},
"fstring-formatting-singe-brace": {
"match": "(}(?!}))",
"name": "invalid.illegal.brace.python"
},
"fstring-guts": {
"patterns": [
{
"include": "#escape-sequence-unicode"
},
{
"include": "#escape-sequence"
},
{
"include": "#string-line-continuation"
},
{
"include": "#fstring-formatting"
}
]
},
"fstring-illegal-multi-brace": {
"patterns": [
{
"include": "#impossible"
}
]
},
"fstring-illegal-single-brace": {
"begin": "(\\{)(?=[^\\n}]*$\\n?)",
"beginCaptures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"end": "(})|(?=\\n)",
"endCaptures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"patterns": [
{
"include": "#fstring-terminator-single"
},
{
"include": "#f-expression"
}
]
},
"fstring-multi-brace": {
"begin": "(\\{)",
"beginCaptures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"end": "(})",
"endCaptures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"patterns": [
{
"include": "#fstring-terminator-multi"
},
{
"include": "#f-expression"
}
]
},
"fstring-multi-core": {
"match": "(.+?)($(\\n?)|(?=[\\\\{}]|'''|\"\"\"))|\\n",
"name": "string.interpolated.python string.quoted.multi.python"
},
"fstring-normf-quoted-multi-line": {
"begin": "\\b([BUbu])([Ff])('''|\"\"\")",
"beginCaptures": {
"1": {
"name": "invalid.illegal.prefix.python"
},
"2": {
"name": "string.interpolated.python string.quoted.multi.python storage.type.string.python"
},
"3": {
"name": "punctuation.definition.string.begin.python string.quoted.multi.python"
}
},
"end": "(\\3)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.multi.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.fstring.python",
"patterns": [
{
"include": "#fstring-guts"
},
{
"include": "#fstring-illegal-multi-brace"
},
{
"include": "#fstring-multi-brace"
},
{
"include": "#fstring-multi-core"
}
]
},
"fstring-normf-quoted-single-line": {
"begin": "\\b([BUbu])([Ff])(([\"']))",
"beginCaptures": {
"1": {
"name": "invalid.illegal.prefix.python"
},
"2": {
"name": "string.interpolated.python string.quoted.single.python storage.type.string.python"
},
"3": {
"name": "punctuation.definition.string.begin.python string.quoted.single.python"
}
},
"end": "(\\3)|((?<!\\\\)\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.single.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.fstring.python",
"patterns": [
{
"include": "#fstring-guts"
},
{
"include": "#fstring-illegal-single-brace"
},
{
"include": "#fstring-single-brace"
},
{
"include": "#fstring-single-core"
}
]
},
"fstring-raw-guts": {
"patterns": [
{
"include": "#string-consume-escape"
},
{
"include": "#fstring-formatting"
}
]
},
"fstring-raw-multi-core": {
"match": "(.+?)($(\\n?)|(?=[\\\\{}]|'''|\"\"\"))|\\n",
"name": "string.interpolated.python string.quoted.raw.multi.python"
},
"fstring-raw-quoted-multi-line": {
"begin": "\\b([Rr][Ff]|[Ff][Rr])('''|\"\"\")",
"beginCaptures": {
"1": {
"name": "string.interpolated.python string.quoted.raw.multi.python storage.type.string.python"
},
"2": {
"name": "punctuation.definition.string.begin.python string.quoted.raw.multi.python"
}
},
"end": "(\\2)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.raw.multi.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.fstring.python",
"patterns": [
{
"include": "#fstring-raw-guts"
},
{
"include": "#fstring-illegal-multi-brace"
},
{
"include": "#fstring-multi-brace"
},
{
"include": "#fstring-raw-multi-core"
}
]
},
"fstring-raw-quoted-single-line": {
"begin": "\\b([Rr][Ff]|[Ff][Rr])(([\"']))",
"beginCaptures": {
"1": {
"name": "string.interpolated.python string.quoted.raw.single.python storage.type.string.python"
},
"2": {
"name": "punctuation.definition.string.begin.python string.quoted.raw.single.python"
}
},
"end": "(\\2)|((?<!\\\\)\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.raw.single.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.fstring.python",
"patterns": [
{
"include": "#fstring-raw-guts"
},
{
"include": "#fstring-illegal-single-brace"
},
{
"include": "#fstring-single-brace"
},
{
"include": "#fstring-raw-single-core"
}
]
},
"fstring-raw-single-core": {
"match": "(.+?)($(\\n?)|(?=[\\\\{}]|([\"'])|((?<!\\\\)\\n)))|\\n",
"name": "string.interpolated.python string.quoted.raw.single.python"
},
"fstring-single-brace": {
"begin": "(\\{)",
"beginCaptures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"end": "(})|(?=\\n)",
"endCaptures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"patterns": [
{
"include": "#fstring-terminator-single"
},
{
"include": "#f-expression"
}
]
},
"fstring-single-core": {
"match": "(.+?)($(\\n?)|(?=[\\\\{}]|([\"'])|((?<!\\\\)\\n)))|\\n",
"name": "string.interpolated.python string.quoted.single.python"
},
"fstring-terminator-multi": {
"patterns": [
{
"match": "(=(![ars])?)(?=})",
"name": "storage.type.format.python"
},
{
"match": "(=?![ars])(?=})",
"name": "storage.type.format.python"
},
{
"captures": {
"1": {
"name": "storage.type.format.python"
},
"2": {
"name": "storage.type.format.python"
}
},
"match": "(=?(?:![ars])?)(:\\w?[<=>^]?[- +]?#?\\d*,?(\\.\\d+)?[%EFGXb-gnosx]?)(?=})"
},
{
"include": "#fstring-terminator-multi-tail"
}
]
},
"fstring-terminator-multi-tail": {
"begin": "(=?(?:![ars])?)(:)(?=.*?\\{)",
"beginCaptures": {
"1": {
"name": "storage.type.format.python"
},
"2": {
"name": "storage.type.format.python"
}
},
"end": "(?=})",
"patterns": [
{
"include": "#fstring-illegal-multi-brace"
},
{
"include": "#fstring-multi-brace"
},
{
"match": "([%EFGXb-gnosx])(?=})",
"name": "storage.type.format.python"
},
{
"match": "(\\.\\d+)",
"name": "storage.type.format.python"
},
{
"match": "(,)",
"name": "storage.type.format.python"
},
{
"match": "(\\d+)",
"name": "storage.type.format.python"
},
{
"match": "(#)",
"name": "storage.type.format.python"
},
{
"match": "([- +])",
"name": "storage.type.format.python"
},
{
"match": "([<=>^])",
"name": "storage.type.format.python"
},
{
"match": "(\\w)",
"name": "storage.type.format.python"
}
]
},
"fstring-terminator-single": {
"patterns": [
{
"match": "(=(![ars])?)(?=})",
"name": "storage.type.format.python"
},
{
"match": "(=?![ars])(?=})",
"name": "storage.type.format.python"
},
{