{ "name": "MagicPython", "scopeName": "source.python", "patterns": [ { "include": "#statement" }, { "include": "#expression" } ], "repository": { "annotated-parameter": { "begin": "(?x)\n \\b\n ([[:alpha:]_]\\w*) \\s* (:)\n", "end": "(,)|(?=\\))", "patterns": [ { "include": "#expression" }, { "name": "keyword.operator.assignment.python", "match": "=(?!=)" } ], "beginCaptures": { "1": { "name": "variable.parameter.function.language.python" }, "2": { "name": "punctuation.separator.annotation.python" } }, "endCaptures": { "1": { "name": "punctuation.separator.parameters.python" } } }, "assignment-operator": { "name": "keyword.operator.assignment.python", "match": "(?x)\n \u003c\u003c= | \u003e\u003e= | //= | \\*\\*=\n | \\+= | -= | /= | @=\n | \\*= | %= | ~= | \\^= | \u0026= | \\|=\n | =(?!=)\n" }, "backticks": { "name": "invalid.deprecated.backtick.python", "begin": "\\`", "end": "(?:\\`|(?\u003c!\\\\)(\\n))", "patterns": [ { "include": "#expression" } ] }, "builtin-callables": { "patterns": [ { "include": "#illegal-names" }, { "include": "#illegal-object-name" }, { "include": "#builtin-exceptions" }, { "include": "#builtin-functions" }, { "include": "#builtin-types" } ] }, "builtin-exceptions": { "name": "support.type.exception.python", "match": "(?x) (?\u003c!\\.) \\b(\n (\n Arithmetic | Assertion | Attribute | Buffer | BlockingIO\n | BrokenPipe | ChildProcess\n | (Connection (Aborted | Refused | Reset)?)\n | EOF | Environment | FileExists | FileNotFound\n | FloatingPoint | IO | Import | Indentation | Index | Interrupted\n | IsADirectory | NotADirectory | Permission | ProcessLookup\n | Timeout\n | Key | Lookup | Memory | Name | NotImplemented | OS | Overflow\n | Reference | Runtime | Recursion | Syntax | System\n | Tab | Type | UnboundLocal | Unicode(Encode|Decode|Translate)?\n | Value | Windows | ZeroDivision | ModuleNotFound\n ) Error\n|\n ((Pending)?Deprecation | Runtime | Syntax | User | Future | Import\n | Unicode | Bytes | Resource\n )? Warning\n|\n SystemExit | Stop(Async)?Iteration\n | KeyboardInterrupt\n | GeneratorExit | (Base)?Exception\n)\\b\n" }, "builtin-functions": { "patterns": [ { "name": "support.function.builtin.python", "match": "(?x)\n (?\u003c!\\.) \\b(\n __import__ | abs | all | any | ascii | bin | callable\n | chr | compile | copyright | credits | delattr | dir | divmod\n | enumerate | eval | exec | exit | filter | format | getattr\n | globals | hasattr | hash | help | hex | id | input\n | isinstance | issubclass | iter | len | license | locals | map\n | max | memoryview | min | next | oct | open | ord | pow | print\n | quit | range | reload | repr | reversed | round\n | setattr | sorted | sum | vars | zip\n )\\b\n" }, { "name": "variable.legacy.builtin.python", "match": "(?x)\n (?\u003c!\\.) \\b(\n file | reduce | intern | raw_input | unicode | cmp | basestring\n | execfile | long | xrange\n )\\b\n" } ] }, "builtin-possible-callables": { "patterns": [ { "include": "#builtin-callables" }, { "include": "#magic-names" } ] }, "builtin-types": { "name": "support.type.python", "match": "(?x)\n (?\u003c!\\.) \\b(\n bool | bytearray | bytes | classmethod | complex | dict\n | float | frozenset | int | list | object | property\n | set | slice | staticmethod | str | tuple | type\n\n (?# Although 'super' is not a type, it's related to types,\n and is special enough to be highlighted differently from\n other built-ins)\n | super\n )\\b\n" }, "call-wrapper-inheritance": { "name": "meta.function-call.python", "begin": "(?x)\n \\b(?=\n ([[:alpha:]_]\\w*) \\s* (\\()\n )\n", "end": "(\\))", "patterns": [ { "include": "#inheritance-name" }, { "include": "#function-arguments" } ], "endCaptures": { "1": { "name": "punctuation.definition.arguments.end.python" } } }, "class-declaration": { "patterns": [ { "name": "meta.class.python", "begin": "(?x)\n \\s*(class)\\s+\n (?=\n [[:alpha:]_]\\w* \\s* (:|\\()\n )\n", "end": "(:)", "patterns": [ { "include": "#class-name" }, { "include": "#class-inheritance" } ], "beginCaptures": { "1": { "name": "storage.type.class.python" } }, "endCaptures": { "1": { "name": "punctuation.section.class.begin.python" } } } ] }, "class-inheritance": { "name": "meta.class.inheritance.python", "begin": "(\\()", "end": "(\\))", "patterns": [ { "name": "keyword.operator.unpacking.arguments.python", "match": "(\\*\\*|\\*)" }, { "name": "punctuation.separator.inheritance.python", "match": "," }, { "name": "keyword.operator.assignment.python", "match": "=(?!=)" }, { "name": "support.type.metaclass.python", "match": "\\bmetaclass\\b" }, { "include": "#illegal-names" }, { "include": "#class-kwarg" }, { "include": "#call-wrapper-inheritance" }, { "include": "#expression-base" }, { "include": "#member-access-class" }, { "include": "#inheritance-identifier" } ], "beginCaptures": { "1": { "name": "punctuation.definition.inheritance.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.inheritance.end.python" } } }, "class-kwarg": { "match": "(?x)\n \\b ([[:alpha:]_]\\w*) \\s*(=)(?!=)\n", "captures": { "1": { "name": "entity.other.inherited-class.python variable.parameter.class.python" }, "2": { "name": "keyword.operator.assignment.python" } } }, "class-name": { "patterns": [ { "include": "#illegal-object-name" }, { "include": "#builtin-possible-callables" }, { "name": "entity.name.type.class.python", "match": "(?x)\n \\b ([[:alpha:]_]\\w*) \\b\n" } ] }, "codetags": { "match": "(?:\\b(NOTE|XXX|HACK|FIXME|BUG|TODO)\\b)", "captures": { "1": { "name": "keyword.codetag.notation.python" } } }, "comments": { "patterns": [ { "name": "comment.line.number-sign.python", "contentName": "meta.typehint.comment.python", "begin": "(?x)\n (?:\n \\# \\s* (type:)\n \\s*+ (?# we want `\\s*+` which is possessive quantifier since\n we do not actually want to backtrack when matching\n whitespace here)\n (?! $ | \\#)\n )\n", "end": "(?:$|(?=\\#))", "patterns": [ { "name": "comment.typehint.ignore.notation.python", "match": "(?x)\n \\G ignore\n (?= \\s* (?: $ | \\#))\n" }, { "name": "comment.typehint.type.notation.python", "match": "(?x)\n (?\u003c!\\.)\\b(\n bool | bytes | float | int | object | str\n | List | Dict | Iterable | Sequence | Set\n | FrozenSet | Callable | Union | Tuple\n | Any | None\n )\\b\n" }, { "name": "comment.typehint.punctuation.notation.python", "match": "([\\[\\]\\(\\),\\.\\=\\*]|(-\u003e))" }, { "name": "comment.typehint.variable.notation.python", "match": "([[:alpha:]_]\\w*)" } ], "beginCaptures": { "0": { "name": "meta.typehint.comment.python" }, "1": { "name": "comment.typehint.directive.notation.python" } } }, { "include": "#comments-base" } ] }, "comments-base": { "name": "comment.line.number-sign.python", "begin": "(\\#)", "end": "($)", "patterns": [ { "include": "#codetags" } ], "beginCaptures": { "1": { "name": "punctuation.definition.comment.python" } } }, "comments-string-double-three": { "name": "comment.line.number-sign.python", "begin": "(\\#)", "end": "($|(?=\"\"\"))", "patterns": [ { "include": "#codetags" } ], "beginCaptures": { "1": { "name": "punctuation.definition.comment.python" } } }, "comments-string-single-three": { "name": "comment.line.number-sign.python", "begin": "(\\#)", "end": "($|(?='''))", "patterns": [ { "include": "#codetags" } ], "beginCaptures": { "1": { "name": "punctuation.definition.comment.python" } } }, "curly-braces": { "begin": "\\{", "end": "\\}", "patterns": [ { "name": "punctuation.separator.dict.python", "match": ":" }, { "include": "#expression" } ], "beginCaptures": { "0": { "name": "punctuation.definition.dict.begin.python" } }, "endCaptures": { "0": { "name": "punctuation.definition.dict.end.python" } } }, "decorator": { "name": "meta.function.decorator.python", "begin": "(?x)\n ^\\s*\n (@) \\s* (?=[[:alpha:]_]\\w*)\n", "end": "(?x)\n ( \\) )\n # trailing whitespace and comments are legal\n (?: (.*?) (?=\\s*(?:\\#|$)) )\n | (?=\\n|\\#)\n", "patterns": [ { "include": "#decorator-name" }, { "include": "#function-arguments" } ], "beginCaptures": { "1": { "name": "entity.name.function.decorator.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.arguments.end.python" }, "2": { "name": "invalid.illegal.decorator.python" } } }, "decorator-name": { "patterns": [ { "include": "#builtin-callables" }, { "include": "#illegal-object-name" }, { "name": "entity.name.function.decorator.python", "match": "(?x)\n ([[:alpha:]_]\\w*) | \\.\n" }, { "include": "#line-continuation" }, { "name": "invalid.illegal.decorator.python", "match": "(?x)\n \\s* ([^([:alpha:]\\s_\\.#\\\\] .*?) (?=\\#|$)\n", "captures": { "1": { "name": "invalid.illegal.decorator.python" } } } ] }, "docstring": { "patterns": [ { "name": "string.quoted.docstring.multi.python", "begin": "(\\'\\'\\'|\\\"\\\"\\\")", "end": "(\\1)", "patterns": [ { "include": "#docstring-prompt" }, { "include": "#codetags" }, { "include": "#docstring-guts-unicode" } ], "beginCaptures": { "1": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" } } }, { "name": "string.quoted.docstring.raw.multi.python", "begin": "([rR])(\\'\\'\\'|\\\"\\\"\\\")", "end": "(\\2)", "patterns": [ { "include": "#string-consume-escape" }, { "include": "#docstring-prompt" }, { "include": "#codetags" } ], "beginCaptures": { "1": { "name": "storage.type.string.python" }, "2": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" } } }, { "name": "string.quoted.docstring.single.python", "begin": "(\\'|\\\")", "end": "(\\1)|((?\u003c!\\\\)\\n)", "patterns": [ { "include": "#codetags" }, { "include": "#docstring-guts-unicode" } ], "beginCaptures": { "1": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, { "name": "string.quoted.docstring.raw.single.python", "begin": "([rR])(\\'|\\\")", "end": "(\\2)|((?\u003c!\\\\)\\n)", "patterns": [ { "include": "#string-consume-escape" }, { "include": "#codetags" } ], "beginCaptures": { "1": { "name": "storage.type.string.python" }, "2": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" }, "2": { "name": "invalid.illegal.newline.python" } } } ] }, "docstring-guts-unicode": { "patterns": [ { "include": "#escape-sequence-unicode" }, { "include": "#escape-sequence" }, { "include": "#string-line-continuation" } ] }, "docstring-prompt": { "match": "(?x)\n (?:\n (?:^|\\G) \\s* (?# '\\G' is necessary for ST)\n ((?:\u003e\u003e\u003e|\\.\\.\\.) \\s) (?=\\s*\\S)\n )\n", "captures": { "1": { "name": "keyword.control.flow.python" } } }, "docstring-statement": { "begin": "^(?=\\s*[rR]?(\\'\\'\\'|\\\"\\\"\\\"|\\'|\\\"))", "end": "(?\u003c=\\'\\'\\'|\\\"\\\"\\\"|\\'|\\\")", "patterns": [ { "include": "#docstring" } ] }, "double-one-fregexp-conditional": { "begin": "(\\()\\?\\((\\w+(?:\\s+[[:alnum:]]+)?|\\d+)\\)", "end": "(\\)|(?=\"))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#double-one-fregexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.conditional.regexp" }, "1": { "name": "punctuation.parenthesis.conditional.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-one-fregexp-expression": { "patterns": [ { "include": "#fregexp-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-fregexp-lookahead" }, { "include": "#double-one-fregexp-lookahead-negative" }, { "include": "#double-one-fregexp-lookbehind" }, { "include": "#double-one-fregexp-lookbehind-negative" }, { "include": "#double-one-fregexp-conditional" }, { "include": "#double-one-fregexp-parentheses-non-capturing" }, { "include": "#double-one-fregexp-parentheses" } ] }, "double-one-fregexp-lookahead": { "begin": "(\\()\\?=", "end": "(\\)|(?=\"))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#double-one-fregexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookahead.regexp" }, "1": { "name": "punctuation.parenthesis.lookahead.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-one-fregexp-lookahead-negative": { "begin": "(\\()\\?!", "end": "(\\)|(?=\"))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#double-one-fregexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookahead.negative.regexp" }, "1": { "name": "punctuation.parenthesis.lookahead.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-one-fregexp-lookbehind": { "begin": "(\\()\\?\u003c=", "end": "(\\)|(?=\"))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#double-one-fregexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookbehind.regexp" }, "1": { "name": "punctuation.parenthesis.lookbehind.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-one-fregexp-lookbehind-negative": { "begin": "(\\()\\?\u003c!", "end": "(\\)|(?=\"))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#double-one-fregexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookbehind.negative.regexp" }, "1": { "name": "punctuation.parenthesis.lookbehind.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-one-fregexp-named-group": { "name": "meta.named.regexp", "begin": "(?x)\n (\\() (\\?P \u003c\\w+(?:\\s+[[:alnum:]]+)?\u003e)\n", "end": "(\\)|(?=\"))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#double-one-fregexp-expression" } ], "beginCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp" }, "2": { "name": "entity.name.tag.named.group.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-one-fregexp-parentheses": { "begin": "\\(", "end": "(\\)|(?=\"))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#double-one-fregexp-expression" } ], "beginCaptures": { "0": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-one-fregexp-parentheses-non-capturing": { "begin": "\\(\\?:", "end": "(\\)|(?=\"))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#double-one-fregexp-expression" } ], "beginCaptures": { "0": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-one-regexp-character-set": { "patterns": [ { "match": "(?x)\n \\[ \\^? \\] (?! .*?\\])\n" }, { "name": "meta.character.set.regexp", "begin": "(\\[)(\\^)?(\\])?", "end": "(\\]|(?=\"))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#regexp-charecter-set-escapes" }, { "name": "constant.character.set.regexp", "match": "[^\\n]" } ], "beginCaptures": { "1": { "name": "punctuation.character.set.begin.regexp constant.other.set.regexp" }, "2": { "name": "keyword.operator.negation.regexp" }, "3": { "name": "constant.character.set.regexp" } }, "endCaptures": { "1": { "name": "punctuation.character.set.end.regexp constant.other.set.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } } ] }, "double-one-regexp-comments": { "name": "comment.regexp", "begin": "\\(\\?#", "end": "(\\)|(?=\"))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#codetags" } ], "beginCaptures": { "0": { "name": "punctuation.comment.begin.regexp" } }, "endCaptures": { "1": { "name": "punctuation.comment.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-one-regexp-conditional": { "begin": "(\\()\\?\\((\\w+(?:\\s+[[:alnum:]]+)?|\\d+)\\)", "end": "(\\)|(?=\"))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#double-one-regexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.conditional.regexp" }, "1": { "name": "punctuation.parenthesis.conditional.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "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": "(\\()\\?=", "end": "(\\)|(?=\"))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#double-one-regexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookahead.regexp" }, "1": { "name": "punctuation.parenthesis.lookahead.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-one-regexp-lookahead-negative": { "begin": "(\\()\\?!", "end": "(\\)|(?=\"))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#double-one-regexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookahead.negative.regexp" }, "1": { "name": "punctuation.parenthesis.lookahead.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-one-regexp-lookbehind": { "begin": "(\\()\\?\u003c=", "end": "(\\)|(?=\"))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#double-one-regexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookbehind.regexp" }, "1": { "name": "punctuation.parenthesis.lookbehind.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-one-regexp-lookbehind-negative": { "begin": "(\\()\\?\u003c!", "end": "(\\)|(?=\"))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#double-one-regexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookbehind.negative.regexp" }, "1": { "name": "punctuation.parenthesis.lookbehind.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-one-regexp-named-group": { "name": "meta.named.regexp", "begin": "(?x)\n (\\() (\\?P \u003c\\w+(?:\\s+[[:alnum:]]+)?\u003e)\n", "end": "(\\)|(?=\"))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#double-one-regexp-expression" } ], "beginCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp" }, "2": { "name": "entity.name.tag.named.group.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-one-regexp-parentheses": { "begin": "\\(", "end": "(\\)|(?=\"))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#double-one-regexp-expression" } ], "beginCaptures": { "0": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-one-regexp-parentheses-non-capturing": { "begin": "\\(\\?:", "end": "(\\)|(?=\"))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#double-one-regexp-expression" } ], "beginCaptures": { "0": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-three-fregexp-conditional": { "begin": "(\\()\\?\\((\\w+(?:\\s+[[:alnum:]]+)?|\\d+)\\)", "end": "(\\)|(?=\"\"\"))", "patterns": [ { "include": "#double-three-fregexp-expression" }, { "include": "#comments-string-double-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.conditional.regexp" }, "1": { "name": "punctuation.parenthesis.conditional.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-three-fregexp-expression": { "patterns": [ { "include": "#fregexp-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-fregexp-lookahead" }, { "include": "#double-three-fregexp-lookahead-negative" }, { "include": "#double-three-fregexp-lookbehind" }, { "include": "#double-three-fregexp-lookbehind-negative" }, { "include": "#double-three-fregexp-conditional" }, { "include": "#double-three-fregexp-parentheses-non-capturing" }, { "include": "#double-three-fregexp-parentheses" }, { "include": "#comments-string-double-three" } ] }, "double-three-fregexp-lookahead": { "begin": "(\\()\\?=", "end": "(\\)|(?=\"\"\"))", "patterns": [ { "include": "#double-three-fregexp-expression" }, { "include": "#comments-string-double-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookahead.regexp" }, "1": { "name": "punctuation.parenthesis.lookahead.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-three-fregexp-lookahead-negative": { "begin": "(\\()\\?!", "end": "(\\)|(?=\"\"\"))", "patterns": [ { "include": "#double-three-fregexp-expression" }, { "include": "#comments-string-double-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookahead.negative.regexp" }, "1": { "name": "punctuation.parenthesis.lookahead.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-three-fregexp-lookbehind": { "begin": "(\\()\\?\u003c=", "end": "(\\)|(?=\"\"\"))", "patterns": [ { "include": "#double-three-fregexp-expression" }, { "include": "#comments-string-double-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookbehind.regexp" }, "1": { "name": "punctuation.parenthesis.lookbehind.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-three-fregexp-lookbehind-negative": { "begin": "(\\()\\?\u003c!", "end": "(\\)|(?=\"\"\"))", "patterns": [ { "include": "#double-three-fregexp-expression" }, { "include": "#comments-string-double-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookbehind.negative.regexp" }, "1": { "name": "punctuation.parenthesis.lookbehind.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-three-fregexp-named-group": { "name": "meta.named.regexp", "begin": "(?x)\n (\\() (\\?P \u003c\\w+(?:\\s+[[:alnum:]]+)?\u003e)\n", "end": "(\\)|(?=\"\"\"))", "patterns": [ { "include": "#double-three-fregexp-expression" }, { "include": "#comments-string-double-three" } ], "beginCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp" }, "2": { "name": "entity.name.tag.named.group.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-three-fregexp-parentheses": { "begin": "\\(", "end": "(\\)|(?=\"\"\"))", "patterns": [ { "include": "#double-three-fregexp-expression" }, { "include": "#comments-string-double-three" } ], "beginCaptures": { "0": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-three-fregexp-parentheses-non-capturing": { "begin": "\\(\\?:", "end": "(\\)|(?=\"\"\"))", "patterns": [ { "include": "#double-three-fregexp-expression" }, { "include": "#comments-string-double-three" } ], "beginCaptures": { "0": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-three-regexp-character-set": { "patterns": [ { "match": "(?x)\n \\[ \\^? \\] (?! .*?\\])\n" }, { "name": "meta.character.set.regexp", "begin": "(\\[)(\\^)?(\\])?", "end": "(\\]|(?=\"\"\"))", "patterns": [ { "include": "#regexp-charecter-set-escapes" }, { "name": "constant.character.set.regexp", "match": "[^\\n]" } ], "beginCaptures": { "1": { "name": "punctuation.character.set.begin.regexp constant.other.set.regexp" }, "2": { "name": "keyword.operator.negation.regexp" }, "3": { "name": "constant.character.set.regexp" } }, "endCaptures": { "1": { "name": "punctuation.character.set.end.regexp constant.other.set.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } } ] }, "double-three-regexp-comments": { "name": "comment.regexp", "begin": "\\(\\?#", "end": "(\\)|(?=\"\"\"))", "patterns": [ { "include": "#codetags" } ], "beginCaptures": { "0": { "name": "punctuation.comment.begin.regexp" } }, "endCaptures": { "1": { "name": "punctuation.comment.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-three-regexp-conditional": { "begin": "(\\()\\?\\((\\w+(?:\\s+[[:alnum:]]+)?|\\d+)\\)", "end": "(\\)|(?=\"\"\"))", "patterns": [ { "include": "#double-three-regexp-expression" }, { "include": "#comments-string-double-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.conditional.regexp" }, "1": { "name": "punctuation.parenthesis.conditional.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "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": "(\\()\\?=", "end": "(\\)|(?=\"\"\"))", "patterns": [ { "include": "#double-three-regexp-expression" }, { "include": "#comments-string-double-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookahead.regexp" }, "1": { "name": "punctuation.parenthesis.lookahead.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-three-regexp-lookahead-negative": { "begin": "(\\()\\?!", "end": "(\\)|(?=\"\"\"))", "patterns": [ { "include": "#double-three-regexp-expression" }, { "include": "#comments-string-double-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookahead.negative.regexp" }, "1": { "name": "punctuation.parenthesis.lookahead.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-three-regexp-lookbehind": { "begin": "(\\()\\?\u003c=", "end": "(\\)|(?=\"\"\"))", "patterns": [ { "include": "#double-three-regexp-expression" }, { "include": "#comments-string-double-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookbehind.regexp" }, "1": { "name": "punctuation.parenthesis.lookbehind.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-three-regexp-lookbehind-negative": { "begin": "(\\()\\?\u003c!", "end": "(\\)|(?=\"\"\"))", "patterns": [ { "include": "#double-three-regexp-expression" }, { "include": "#comments-string-double-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookbehind.negative.regexp" }, "1": { "name": "punctuation.parenthesis.lookbehind.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-three-regexp-named-group": { "name": "meta.named.regexp", "begin": "(?x)\n (\\() (\\?P \u003c\\w+(?:\\s+[[:alnum:]]+)?\u003e)\n", "end": "(\\)|(?=\"\"\"))", "patterns": [ { "include": "#double-three-regexp-expression" }, { "include": "#comments-string-double-three" } ], "beginCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp" }, "2": { "name": "entity.name.tag.named.group.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-three-regexp-parentheses": { "begin": "\\(", "end": "(\\)|(?=\"\"\"))", "patterns": [ { "include": "#double-three-regexp-expression" }, { "include": "#comments-string-double-three" } ], "beginCaptures": { "0": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "double-three-regexp-parentheses-non-capturing": { "begin": "\\(\\?:", "end": "(\\)|(?=\"\"\"))", "patterns": [ { "include": "#double-three-regexp-expression" }, { "include": "#comments-string-double-three" } ], "beginCaptures": { "0": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "ellipsis": { "name": "constant.other.ellipsis.python", "match": "\\.\\.\\." }, "escape-sequence": { "name": "constant.character.escape.python", "match": "(?x)\n \\\\ (\n x[0-9A-Fa-f]{2}\n | [0-7]{1,3}\n | [\\\\\"'abfnrtv]\n )\n" }, "escape-sequence-unicode": { "patterns": [ { "name": "constant.character.escape.python", "match": "(?x)\n \\\\ (\n u[0-9A-Fa-f]{4}\n | U[0-9A-Fa-f]{8}\n | N\\{[\\w\\s]+?\\}\n )\n" } ] }, "expression": { "patterns": [ { "include": "#expression-base" }, { "include": "#member-access" }, { "match": "(?x) \\b ([[:alpha:]_]\\w*) \\b" } ] }, "expression-bare": { "patterns": [ { "include": "#backticks" }, { "include": "#illegal-anno" }, { "include": "#literal" }, { "include": "#regexp" }, { "include": "#string" }, { "include": "#lambda" }, { "include": "#illegal-operator" }, { "include": "#operator" }, { "include": "#curly-braces" }, { "include": "#item-access" }, { "include": "#list" }, { "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" } ] }, "expression-base": { "patterns": [ { "include": "#comments" }, { "include": "#expression-bare" }, { "include": "#line-continuation" } ] }, "f-expression": { "patterns": [ { "include": "#expression-bare" }, { "include": "#member-access" }, { "match": "(?x) \\b ([[:alpha:]_]\\w*) \\b" } ] }, "fregexp-base-expression": { "patterns": [ { "include": "#fregexp-quantifier" }, { "include": "#fstring-formatting-braces" }, { "match": "\\{.*?\\}" }, { "include": "#regexp-base-common" } ] }, "fregexp-double-one-line": { "name": "string.interpolated.python string.regexp.quoted.single.python", "begin": "\\b(([uU]r)|([fF]r)|(r[fF]?))(\")", "end": "(\")|(?\u003c!\\\\)(\\n)", "patterns": [ { "include": "#double-one-fregexp-expression" } ], "beginCaptures": { "2": { "name": "invalid.deprecated.prefix.python" }, "3": { "name": "storage.type.string.python" }, "4": { "name": "storage.type.string.python" }, "5": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "fregexp-double-three-line": { "name": "string.interpolated.python string.regexp.quoted.multi.python", "begin": "\\b(([uU]r)|([fF]r)|(r[fF]?))(\"\"\")", "end": "(\"\"\")", "patterns": [ { "include": "#double-three-fregexp-expression" } ], "beginCaptures": { "2": { "name": "invalid.deprecated.prefix.python" }, "3": { "name": "storage.type.string.python" }, "4": { "name": "storage.type.string.python" }, "5": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "fregexp-quantifier": { "name": "keyword.operator.quantifier.regexp", "match": "(?x)\n \\{\\{(\n \\d+ | \\d+,(\\d+)? | ,\\d+\n )\\}\\}\n" }, "fregexp-single-one-line": { "name": "string.interpolated.python string.regexp.quoted.single.python", "begin": "\\b(([uU]r)|([fF]r)|(r[fF]?))(\\')", "end": "(\\')|(?\u003c!\\\\)(\\n)", "patterns": [ { "include": "#single-one-fregexp-expression" } ], "beginCaptures": { "2": { "name": "invalid.deprecated.prefix.python" }, "3": { "name": "storage.type.string.python" }, "4": { "name": "storage.type.string.python" }, "5": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "fregexp-single-three-line": { "name": "string.interpolated.python string.regexp.quoted.multi.python", "begin": "\\b(([uU]r)|([fF]r)|(r[fF]?))(\\'\\'\\')", "end": "(\\'\\'\\')", "patterns": [ { "include": "#single-three-fregexp-expression" } ], "beginCaptures": { "2": { "name": "invalid.deprecated.prefix.python" }, "3": { "name": "storage.type.string.python" }, "4": { "name": "storage.type.string.python" }, "5": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "fstring-fnorm-quoted-multi-line": { "name": "meta.fstring.python", "begin": "(\\b[fF])([bBuU])?('''|\"\"\")", "end": "(\\3)", "patterns": [ { "include": "#fstring-guts" }, { "include": "#fstring-illegal-multi-brace" }, { "include": "#fstring-multi-brace" }, { "include": "#fstring-multi-core" } ], "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" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.multi.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "fstring-fnorm-quoted-single-line": { "name": "meta.fstring.python", "begin": "(\\b[fF])([bBuU])?((['\"]))", "end": "(\\3)|((?\u003c!\\\\)\\n)", "patterns": [ { "include": "#fstring-guts" }, { "include": "#fstring-illegal-single-brace" }, { "include": "#fstring-single-brace" }, { "include": "#fstring-single-core" } ], "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" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.single.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "fstring-formatting": { "patterns": [ { "include": "#fstring-formatting-braces" }, { "include": "#fstring-formatting-singe-brace" } ] }, "fstring-formatting-braces": { "patterns": [ { "match": "({)(\\s*?)(})", "captures": { "1": { "name": "constant.character.format.placeholder.other.python" }, "2": { "name": "invalid.illegal.brace.python" }, "3": { "name": "constant.character.format.placeholder.other.python" } } }, { "name": "constant.character.escape.python", "match": "({{|}})" } ] }, "fstring-formatting-singe-brace": { "name": "invalid.illegal.brace.python", "match": "(}(?!}))" }, "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?)", "end": "(\\})|(?=\\n)", "patterns": [ { "include": "#fstring-terminator-single" }, { "include": "#f-expression" } ], "beginCaptures": { "1": { "name": "constant.character.format.placeholder.other.python" } }, "endCaptures": { "1": { "name": "constant.character.format.placeholder.other.python" } } }, "fstring-multi-brace": { "begin": "(\\{)", "end": "(?x)\n (\\})\n", "patterns": [ { "include": "#fstring-terminator-multi" }, { "include": "#f-expression" } ], "beginCaptures": { "1": { "name": "constant.character.format.placeholder.other.python" } }, "endCaptures": { "1": { "name": "constant.character.format.placeholder.other.python" } } }, "fstring-multi-core": { "name": "string.interpolated.python string.quoted.multi.python", "match": "(?x)\n (.+?)\n (\n (?# .* and .*? in multi-line match need special handling of\n newlines otherwise SublimeText and Atom will match slightly\n differently.\n\n The guard for newlines has to be separate from the\n lookahead because of special $ matching rule.)\n ($\\n?)\n |\n (?=[\\\\\\}\\{]|'''|\"\"\")\n )\n (?# due to how multiline regexps are matched we need a special case\n for matching a newline character)\n | \\n\n" }, "fstring-normf-quoted-multi-line": { "name": "meta.fstring.python", "begin": "(\\b[bBuU])([fF])('''|\"\"\")", "end": "(\\3)", "patterns": [ { "include": "#fstring-guts" }, { "include": "#fstring-illegal-multi-brace" }, { "include": "#fstring-multi-brace" }, { "include": "#fstring-multi-core" } ], "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" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.multi.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "fstring-normf-quoted-single-line": { "name": "meta.fstring.python", "begin": "(\\b[bBuU])([fF])((['\"]))", "end": "(\\3)|((?\u003c!\\\\)\\n)", "patterns": [ { "include": "#fstring-guts" }, { "include": "#fstring-illegal-single-brace" }, { "include": "#fstring-single-brace" }, { "include": "#fstring-single-core" } ], "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" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.single.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "fstring-raw-guts": { "patterns": [ { "include": "#string-consume-escape" }, { "include": "#fstring-formatting" } ] }, "fstring-raw-multi-core": { "name": "string.interpolated.python string.quoted.raw.multi.python", "match": "(?x)\n (.+?)\n (\n (?# .* and .*? in multi-line match need special handling of\n newlines otherwise SublimeText and Atom will match slightly\n differently.\n\n The guard for newlines has to be separate from the\n lookahead because of special $ matching rule.)\n ($\\n?)\n |\n (?=[\\\\\\}\\{]|'''|\"\"\")\n )\n (?# due to how multiline regexps are matched we need a special case\n for matching a newline character)\n | \\n\n" }, "fstring-raw-quoted-multi-line": { "name": "meta.fstring.python", "begin": "(\\b(?:[R][fF]|[fF][R]))('''|\"\"\")", "end": "(\\2)", "patterns": [ { "include": "#fstring-raw-guts" }, { "include": "#fstring-illegal-multi-brace" }, { "include": "#fstring-multi-brace" }, { "include": "#fstring-raw-multi-core" } ], "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" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.raw.multi.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "fstring-raw-quoted-single-line": { "name": "meta.fstring.python", "begin": "(\\b(?:[R][fF]|[fF][R]))((['\"]))", "end": "(\\2)|((?\u003c!\\\\)\\n)", "patterns": [ { "include": "#fstring-raw-guts" }, { "include": "#fstring-illegal-single-brace" }, { "include": "#fstring-single-brace" }, { "include": "#fstring-raw-single-core" } ], "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" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.raw.single.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "fstring-raw-single-core": { "name": "string.interpolated.python string.quoted.raw.single.python", "match": "(?x)\n (.+?)\n (\n (?# .* and .*? in multi-line match need special handling of\n newlines otherwise SublimeText and Atom will match slightly\n differently.\n\n The guard for newlines has to be separate from the\n lookahead because of special $ matching rule.)\n ($\\n?)\n |\n (?=[\\\\\\}\\{]|(['\"])|((?\u003c!\\\\)\\n))\n )\n (?# due to how multiline regexps are matched we need a special case\n for matching a newline character)\n | \\n\n" }, "fstring-single-brace": { "begin": "(\\{)", "end": "(?x)\n (\\})|(?=\\n)\n", "patterns": [ { "include": "#fstring-terminator-single" }, { "include": "#f-expression" } ], "beginCaptures": { "1": { "name": "constant.character.format.placeholder.other.python" } }, "endCaptures": { "1": { "name": "constant.character.format.placeholder.other.python" } } }, "fstring-single-core": { "name": "string.interpolated.python string.quoted.single.python", "match": "(?x)\n (.+?)\n (\n (?# .* and .*? in multi-line match need special handling of\n newlines otherwise SublimeText and Atom will match slightly\n differently.\n\n The guard for newlines has to be separate from the\n lookahead because of special $ matching rule.)\n ($\\n?)\n |\n (?=[\\\\\\}\\{]|(['\"])|((?\u003c!\\\\)\\n))\n )\n (?# due to how multiline regexps are matched we need a special case\n for matching a newline character)\n | \\n\n" }, "fstring-terminator-multi": { "patterns": [ { "name": "storage.type.format.python", "match": "(![rsa])(?=})" }, { "match": "(?x)\n (![rsa])?\n ( : \\w? [\u003c\u003e=^]? [-+ ]? \\#?\n \\d* ,? (\\.\\d+)? [bcdeEfFgGnosxX%]? )(?=})\n", "captures": { "1": { "name": "storage.type.format.python" }, "2": { "name": "storage.type.format.python" } } }, { "include": "#fstring-terminator-multi-tail" } ] }, "fstring-terminator-multi-tail": { "begin": "(![rsa])?(:)(?=.*?{)", "end": "(?=})", "patterns": [ { "include": "#fstring-illegal-multi-brace" }, { "include": "#fstring-multi-brace" }, { "name": "storage.type.format.python", "match": "([bcdeEfFgGnosxX%])(?=})" }, { "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": "([\u003c\u003e=^])" }, { "name": "storage.type.format.python", "match": "(\\w)" } ], "beginCaptures": { "1": { "name": "storage.type.format.python" }, "2": { "name": "storage.type.format.python" } } }, "fstring-terminator-single": { "patterns": [ { "name": "storage.type.format.python", "match": "(![rsa])(?=})" }, { "match": "(?x)\n (![rsa])?\n ( : \\w? [\u003c\u003e=^]? [-+ ]? \\#?\n \\d* ,? (\\.\\d+)? [bcdeEfFgGnosxX%]? )(?=})\n", "captures": { "1": { "name": "storage.type.format.python" }, "2": { "name": "storage.type.format.python" } } }, { "include": "#fstring-terminator-single-tail" } ] }, "fstring-terminator-single-tail": { "begin": "(![rsa])?(:)(?=.*?{)", "end": "(?=})|(?=\\n)", "patterns": [ { "include": "#fstring-illegal-single-brace" }, { "include": "#fstring-single-brace" }, { "name": "storage.type.format.python", "match": "([bcdeEfFgGnosxX%])(?=})" }, { "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": "([\u003c\u003e=^])" }, { "name": "storage.type.format.python", "match": "(\\w)" } ], "beginCaptures": { "1": { "name": "storage.type.format.python" }, "2": { "name": "storage.type.format.python" } } }, "function-arguments": { "contentName": "meta.function-call.arguments.python", "begin": "(?x)\n (?:\n (\\()\n (?:\\s*(\\*\\*|\\*))?\n )\n", "end": "(?=\\))(?!\\)\\s*\\()", "patterns": [ { "match": "(?x)\n (?:\n (,)\n (?:\\s*(\\*\\*|\\*))?\n )\n", "captures": { "1": { "name": "punctuation.separator.arguments.python" }, "2": { "name": "keyword.operator.unpacking.arguments.python" } } }, { "include": "#lambda-incomplete" }, { "include": "#illegal-names" }, { "match": "\\b([[:alpha:]_]\\w*)\\s*(=)(?!=)", "captures": { "1": { "name": "variable.parameter.function-call.python" }, "2": { "name": "keyword.operator.assignment.python" } } }, { "name": "keyword.operator.assignment.python", "match": "=(?!=)" }, { "include": "#expression" }, { "match": "\\s*(\\))\\s*(\\()", "captures": { "1": { "name": "punctuation.definition.arguments.end.python" }, "2": { "name": "punctuation.definition.arguments.begin.python" } } } ], "beginCaptures": { "1": { "name": "punctuation.definition.arguments.begin.python" }, "2": { "name": "keyword.operator.unpacking.arguments.python" } } }, "function-call": { "name": "meta.function-call.python", "begin": "(?x)\n \\b(?=\n ([[:alpha:]_]\\w*) \\s* (\\()\n )\n", "end": "(\\))", "patterns": [ { "include": "#special-variables" }, { "include": "#function-name" }, { "include": "#function-arguments" } ], "endCaptures": { "1": { "name": "punctuation.definition.arguments.end.python" } } }, "function-declaration": { "name": "meta.function.python", "begin": "(?x)\n \\s*\n (?:\\b(async) \\s+)? \\b(def)\\s+\n (?=\n [[:alpha:]_][[:word:]]* \\s* \\(\n )\n", "end": "(:|(?=[#'\"\\n]))", "patterns": [ { "include": "#function-def-name" }, { "include": "#parameters" }, { "include": "#line-continuation" }, { "include": "#return-annotation" } ], "beginCaptures": { "1": { "name": "storage.type.function.async.python" }, "2": { "name": "storage.type.function.python" } }, "endCaptures": { "1": { "name": "punctuation.section.function.begin.python" } } }, "function-def-name": { "patterns": [ { "include": "#illegal-object-name" }, { "include": "#builtin-possible-callables" }, { "name": "entity.name.function.python", "match": "(?x)\n \\b ([[:alpha:]_]\\w*) \\b\n" } ] }, "function-name": { "patterns": [ { "include": "#builtin-possible-callables" }, { "name": "meta.function-call.generic.python", "match": "(?x)\n \\b ([[:alpha:]_]\\w*) \\b\n" } ] }, "illegal-anno": { "name": "invalid.illegal.annotation.python", "match": "-\u003e" }, "illegal-names": { "name": "keyword.control.flow.python", "match": "(?x)\n \\b(\n and | as | assert | async | await | break | class | continue | def\n | del | elif | else | except | exec | finally | for | from | global\n | if | import | in | is | (?\u003c=\\.)lambda | lambda(?=\\s*[\\.=])\n | nonlocal | not | or | pass | raise | return | try | while | with\n | yield\n )\\b\n" }, "illegal-object-name": { "name": "keyword.illegal.name.python", "match": "\\b(True|False|None)\\b" }, "illegal-operator": { "patterns": [ { "name": "invalid.illegal.operator.python", "match": "\u0026\u0026|\\|\\||--|\\+\\+" }, { "name": "invalid.illegal.operator.python", "match": "[?$]" }, { "name": "invalid.illegal.operator.python", "match": "!\\b" } ] }, "import": { "patterns": [ { "match": "(?x)\n \\s* \\b(from)\\b \\s*(\\.+)\\s* (import)?\n", "captures": { "1": { "name": "keyword.control.import.python" }, "2": { "name": "punctuation.separator.period.python" }, "3": { "name": "keyword.control.import.python" } } }, { "name": "keyword.control.import.python", "match": "\\b(?\u003c!\\.)import\\b" } ] }, "impossible": { "match": "$.^" }, "inheritance-identifier": { "match": "(?x)\n \\b ([[:alpha:]_]\\w*) \\b\n", "captures": { "1": { "name": "entity.other.inherited-class.python" } } }, "inheritance-name": { "patterns": [ { "include": "#lambda-incomplete" }, { "include": "#builtin-possible-callables" }, { "include": "#inheritance-identifier" } ] }, "item-access": { "patterns": [ { "name": "meta.item-access.python", "begin": "(?x)\n \\b(?=\n [[:alpha:]_]\\w* \\s* \\[\n )\n", "end": "(\\])", "patterns": [ { "include": "#item-name" }, { "include": "#item-index" }, { "include": "#expression" } ], "endCaptures": { "1": { "name": "punctuation.definition.arguments.end.python" } } } ] }, "item-index": { "contentName": "meta.item-access.arguments.python", "begin": "(\\[)", "end": "(?=\\])", "patterns": [ { "name": "punctuation.separator.slice.python", "match": ":" }, { "include": "#expression" } ], "beginCaptures": { "1": { "name": "punctuation.definition.arguments.begin.python" } } }, "item-name": { "patterns": [ { "include": "#special-variables" }, { "include": "#builtin-functions" }, { "include": "#special-names" }, { "match": "(?x)\n \\b ([[:alpha:]_]\\w*) \\b\n" } ] }, "lambda": { "patterns": [ { "match": "((?\u003c=\\.)lambda|lambda(?=\\s*[\\.=]))", "captures": { "1": { "name": "keyword.control.flow.python" } } }, { "match": "\\b(lambda)\\s*?(?=[,\\n]|$)", "captures": { "1": { "name": "storage.type.function.lambda.python" } } }, { "name": "meta.lambda-function.python", "contentName": "meta.function.lambda.parameters.python", "begin": "(?x)\n \\b (lambda) \\b\n", "end": "(:)|(\\n)", "patterns": [ { "name": "keyword.operator.unpacking.parameter.python", "match": "(\\*\\*|\\*)" }, { "include": "#lambda-nested-incomplete" }, { "include": "#illegal-names" }, { "match": "([[:alpha:]_]\\w*)\\s*(?:(,)|(?=:|$))", "captures": { "1": { "name": "variable.parameter.function.language.python" }, "2": { "name": "punctuation.separator.parameters.python" } } }, { "include": "#comments" }, { "include": "#backticks" }, { "include": "#illegal-anno" }, { "include": "#lambda-parameter-with-default" }, { "include": "#line-continuation" }, { "include": "#illegal-operator" } ], "beginCaptures": { "1": { "name": "storage.type.function.lambda.python" } }, "endCaptures": { "1": { "name": "punctuation.section.function.lambda.begin.python" } } } ] }, "lambda-incomplete": { "name": "storage.type.function.lambda.python", "match": "\\blambda(?=\\s*[,)])" }, "lambda-nested-incomplete": { "name": "storage.type.function.lambda.python", "match": "\\blambda(?=\\s*[:,)])" }, "lambda-parameter-with-default": { "begin": "(?x)\n \\b\n ([[:alpha:]_]\\w*) \\s* (=)\n", "end": "(,)|(?=:|$)", "patterns": [ { "include": "#expression" } ], "beginCaptures": { "1": { "name": "variable.parameter.function.language.python" }, "2": { "name": "keyword.operator.python" } }, "endCaptures": { "1": { "name": "punctuation.separator.parameters.python" } } }, "line-continuation": { "patterns": [ { "match": "(\\\\)\\s*(\\S.*$\\n?)", "captures": { "1": { "name": "punctuation.separator.continuation.line.python" }, "2": { "name": "invalid.illegal.line.continuation.python" } } }, { "begin": "(\\\\)\\s*$\\n?", "end": "(?x)\n (?=^\\s*$)\n |\n (?! (\\s* [rR]? (\\'\\'\\'|\\\"\\\"\\\"|\\'|\\\"))\n |\n (\\G $) (?# '\\G' is necessary for ST)\n )\n", "patterns": [ { "include": "#regexp" }, { "include": "#string" } ], "beginCaptures": { "1": { "name": "punctuation.separator.continuation.line.python" } } } ] }, "list": { "begin": "\\[", "end": "\\]", "patterns": [ { "include": "#expression" } ], "beginCaptures": { "0": { "name": "punctuation.definition.list.begin.python" } }, "endCaptures": { "0": { "name": "punctuation.definition.list.end.python" } } }, "literal": { "patterns": [ { "name": "constant.language.python", "match": "\\b(True|False|None|NotImplemented|Ellipsis)\\b" }, { "include": "#number" } ] }, "loose-default": { "begin": "(=)", "end": "(,)|(?=\\))", "patterns": [ { "include": "#expression" } ], "beginCaptures": { "1": { "name": "keyword.operator.python" } }, "endCaptures": { "1": { "name": "punctuation.separator.parameters.python" } } }, "magic-function-names": { "match": "(?x)\n \\b(\n __(?:\n abs | add | aenter | aexit | aiter | and | anext | await\n | bool | call | ceil | cmp | coerce | complex | contains\n | copy | deepcopy | del | delattr | delete | delitem\n | delslice | dir | div | divmod | enter | eq | exit | float\n | floor | floordiv | format | ge | get | getattr\n | getattribute | getinitargs | getitem | getnewargs\n | getslice | getstate | gt | hash | hex | iadd | iand | idiv\n | ifloordiv | ilshift | imod | imul | index | init\n | instancecheck | int | invert | ior | ipow | irshift | isub\n | iter | itruediv | ixor | le | len | long | lshift | lt\n | missing | mod | mul | ne | neg | new | next | nonzero | oct | or\n | pos | pow | radd | rand | rdiv | rdivmod | reduce\n | reduce_ex | repr | reversed | rfloordiv | rlshift | rmod\n | rmul | ror | round | rpow | rrshift | rshift | rsub\n | rtruediv | rxor | set | setattr | setitem | setslice\n | setstate | sizeof | str | sub | subclasscheck | truediv\n | trunc | unicode | xor | matmul | rmatmul | imatmul\n | init_subclass | set_name | fspath | bytes | prepare\n )__\n )\\b\n", "captures": { "1": { "name": "support.function.magic.python" } } }, "magic-names": { "patterns": [ { "include": "#magic-function-names" }, { "include": "#magic-variable-names" } ] }, "magic-variable-names": { "match": "(?x)\n \\b(\n __(?:\n all | bases | builtins | class | code | debug | defaults | dict\n | doc | file | func | kwdefaults | members\n | metaclass | methods | module | mro | name\n | qualname | self | signature | slots | subclasses\n | version | weakref | wrapped | annotations | classcell\n | spec | path | package | future | traceback\n )__\n )\\b\n", "captures": { "1": { "name": "support.variable.magic.python" } } }, "member-access": { "begin": "(\\.)\\s*(?!\\.)", "end": "(?x)\n # stop when you've just read non-whitespace followed by non-word\n # i.e. when finished reading an identifier or function call\n (?\u003c=\\S)(?=\\W) |\n # stop when seeing the start of something that's not a word,\n # i.e. when seeing a non-identifier\n (^|(?\u003c=\\s))(?=[^\\\\\\w\\s]) |\n $\n", "patterns": [ { "include": "#function-call" }, { "include": "#member-access-base" } ], "beginCaptures": { "1": { "name": "punctuation.separator.period.python" } } }, "member-access-base": { "patterns": [ { "include": "#magic-names" }, { "include": "#illegal-names" }, { "include": "#illegal-object-name" }, { "include": "#special-names" }, { "include": "#line-continuation" }, { "include": "#item-access" } ] }, "member-access-class": { "begin": "(\\.)\\s*(?!\\.)", "end": "(?\u003c=\\S)(?=\\W)|$", "patterns": [ { "include": "#call-wrapper-inheritance" }, { "include": "#member-access-base" }, { "include": "#inheritance-identifier" } ], "beginCaptures": { "1": { "name": "punctuation.separator.period.python" } } }, "number": { "name": "constant.numeric.python", "patterns": [ { "include": "#number-float" }, { "include": "#number-dec" }, { "include": "#number-hex" }, { "include": "#number-oct" }, { "include": "#number-bin" }, { "include": "#number-long" }, { "name": "invalid.illegal.name.python", "match": "\\b[0-9]+\\w+" } ] }, "number-bin": { "name": "constant.numeric.bin.python", "match": "(?x)\n (?\u003c![\\w\\.])\n (0[bB]) (_?[01])+\n \\b\n", "captures": { "1": { "name": "storage.type.number.python" } } }, "number-dec": { "name": "constant.numeric.dec.python", "match": "(?x)\n (?\u003c![\\w\\.])(?:\n [1-9](?: _?[0-9] )*\n |\n 0+\n |\n [0-9](?: _?[0-9] )* ([jJ])\n |\n 0 ([0-9]+)(?![eE\\.])\n )\\b\n", "captures": { "1": { "name": "storage.type.imaginary.number.python" }, "2": { "name": "invalid.illegal.dec.python" }, "3": { "name": "invalid.illegal.dec.python" } } }, "number-float": { "name": "constant.numeric.float.python", "match": "(?x)\n (?\u003c! \\w)(?:\n (?:\n \\.[0-9](?: _?[0-9] )*\n |\n [0-9](?: _?[0-9] )* \\. [0-9](?: _?[0-9] )*\n |\n [0-9](?: _?[0-9] )* \\.\n ) (?: [eE][+-]?[0-9](?: _?[0-9] )* )?\n |\n [0-9](?: _?[0-9] )* (?: [eE][+-]?[0-9](?: _?[0-9] )* )\n )([jJ])?\\b\n", "captures": { "1": { "name": "storage.type.imaginary.number.python" } } }, "number-hex": { "name": "constant.numeric.hex.python", "match": "(?x)\n (?\u003c![\\w\\.])\n (0[xX]) (_?[0-9a-fA-F])+\n \\b\n", "captures": { "1": { "name": "storage.type.number.python" } } }, "number-long": { "name": "constant.numeric.bin.python", "match": "(?x)\n (?\u003c![\\w\\.])\n ([1-9][0-9]* | 0) ([lL])\n \\b\n", "captures": { "2": { "name": "storage.type.number.python" } } }, "number-oct": { "name": "constant.numeric.oct.python", "match": "(?x)\n (?\u003c![\\w\\.])\n (0[oO]) (_?[0-7])+\n \\b\n", "captures": { "1": { "name": "storage.type.number.python" } } }, "operator": { "match": "(?x)\n \\b(?\u003c!\\.)\n (?:\n (and | or | not | in | is) (?# 1)\n |\n (for | if | else | await | (?:yield(?:\\s+from)?)) (?# 2)\n )\n (?!\\s*:)\\b\n\n | (\u003c\u003c | \u003e\u003e | \u0026 | \\| | \\^ | ~) (?# 3)\n\n | (\\*\\* | \\* | \\+ | - | % | // | / | @) (?# 4)\n\n | (!= | == | \u003e= | \u003c= | \u003c | \u003e) (?# 5)\n", "captures": { "1": { "name": "keyword.operator.logical.python" }, "2": { "name": "keyword.control.flow.python" }, "3": { "name": "keyword.operator.bitwise.python" }, "4": { "name": "keyword.operator.arithmetic.python" }, "5": { "name": "keyword.operator.comparison.python" } } }, "parameter-special": { "match": "(?x)\n \\b ((self)|(cls)) \\b \\s*(?:(,)|(?=\\)))\n", "captures": { "1": { "name": "variable.parameter.function.language.python" }, "2": { "name": "variable.parameter.function.language.special.self.python" }, "3": { "name": "variable.parameter.function.language.special.cls.python" }, "4": { "name": "punctuation.separator.parameters.python" } } }, "parameters": { "name": "meta.function.parameters.python", "begin": "(\\()", "end": "(\\))", "patterns": [ { "name": "keyword.operator.unpacking.parameter.python", "match": "(\\*\\*|\\*)" }, { "include": "#lambda-incomplete" }, { "include": "#illegal-names" }, { "include": "#illegal-object-name" }, { "include": "#parameter-special" }, { "match": "(?x)\n ([[:alpha:]_]\\w*)\n \\s* (?: (,) | (?=[)#\\n=]))\n", "captures": { "1": { "name": "variable.parameter.function.language.python" }, "2": { "name": "punctuation.separator.parameters.python" } } }, { "include": "#comments" }, { "include": "#loose-default" }, { "include": "#annotated-parameter" } ], "beginCaptures": { "1": { "name": "punctuation.definition.parameters.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.parameters.end.python" } } }, "punctuation": { "patterns": [ { "name": "punctuation.separator.colon.python", "match": ":" }, { "name": "punctuation.separator.element.python", "match": "," } ] }, "regexp": { "patterns": [ { "include": "#regexp-single-three-line" }, { "include": "#regexp-double-three-line" }, { "include": "#regexp-single-one-line" }, { "include": "#regexp-double-one-line" }, { "include": "#fregexp-single-three-line" }, { "include": "#fregexp-double-three-line" }, { "include": "#fregexp-single-one-line" }, { "include": "#fregexp-double-one-line" } ] }, "regexp-backreference": { "name": "meta.backreference.named.regexp", "match": "(?x)\n (\\() (\\?P= \\w+(?:\\s+[[:alnum:]]+)?) (\\))\n", "captures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.backreference.named.begin.regexp" }, "2": { "name": "entity.name.tag.named.backreference.regexp" }, "3": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.backreference.named.end.regexp" } } }, "regexp-backreference-number": { "name": "meta.backreference.regexp", "match": "(\\\\[1-9]\\d?)", "captures": { "1": { "name": "entity.name.tag.backreference.regexp" } } }, "regexp-base-common": { "patterns": [ { "name": "support.other.match.any.regexp", "match": "\\." }, { "name": "support.other.match.begin.regexp", "match": "\\^" }, { "name": "support.other.match.end.regexp", "match": "\\$" }, { "name": "keyword.operator.quantifier.regexp", "match": "[+*?]\\??" }, { "name": "keyword.operator.disjunction.regexp", "match": "\\|" }, { "include": "#regexp-escape-sequence" } ] }, "regexp-base-expression": { "patterns": [ { "include": "#regexp-quantifier" }, { "include": "#regexp-base-common" } ] }, "regexp-charecter-set-escapes": { "patterns": [ { "name": "constant.character.escape.regexp", "match": "\\\\[abfnrtv\\\\]" }, { "include": "#regexp-escape-special" }, { "name": "constant.character.escape.regexp", "match": "\\\\([0-7]{1,3})" }, { "include": "#regexp-escape-character" }, { "include": "#regexp-escape-unicode" }, { "include": "#regexp-escape-catchall" } ] }, "regexp-double-one-line": { "name": "string.regexp.quoted.single.python", "begin": "\\b(([uU]r)|([bB]r)|(r[bB]?))(\")", "end": "(\")|(?\u003c!\\\\)(\\n)", "patterns": [ { "include": "#double-one-regexp-expression" } ], "beginCaptures": { "2": { "name": "invalid.deprecated.prefix.python" }, "3": { "name": "storage.type.string.python" }, "4": { "name": "storage.type.string.python" }, "5": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "regexp-double-three-line": { "name": "string.regexp.quoted.multi.python", "begin": "\\b(([uU]r)|([bB]r)|(r[bB]?))(\"\"\")", "end": "(\"\"\")", "patterns": [ { "include": "#double-three-regexp-expression" } ], "beginCaptures": { "2": { "name": "invalid.deprecated.prefix.python" }, "3": { "name": "storage.type.string.python" }, "4": { "name": "storage.type.string.python" }, "5": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "regexp-escape-catchall": { "name": "constant.character.escape.regexp", "match": "\\\\(.|\\n)" }, "regexp-escape-character": { "name": "constant.character.escape.regexp", "match": "(?x)\n \\\\ (\n x[0-9A-Fa-f]{2}\n | 0[0-7]{1,2}\n | [0-7]{3}\n )\n" }, "regexp-escape-sequence": { "patterns": [ { "include": "#regexp-escape-special" }, { "include": "#regexp-escape-character" }, { "include": "#regexp-escape-unicode" }, { "include": "#regexp-backreference-number" }, { "include": "#regexp-escape-catchall" } ] }, "regexp-escape-special": { "name": "support.other.escape.special.regexp", "match": "\\\\([AbBdDsSwWZ])" }, "regexp-escape-unicode": { "name": "constant.character.unicode.regexp", "match": "(?x)\n \\\\ (\n u[0-9A-Fa-f]{4}\n | U[0-9A-Fa-f]{8}\n )\n" }, "regexp-flags": { "name": "storage.modifier.flag.regexp", "match": "\\(\\?[aiLmsux]+\\)" }, "regexp-quantifier": { "name": "keyword.operator.quantifier.regexp", "match": "(?x)\n \\{(\n \\d+ | \\d+,(\\d+)? | ,\\d+\n )\\}\n" }, "regexp-single-one-line": { "name": "string.regexp.quoted.single.python", "begin": "\\b(([uU]r)|([bB]r)|(r[bB]?))(\\')", "end": "(\\')|(?\u003c!\\\\)(\\n)", "patterns": [ { "include": "#single-one-regexp-expression" } ], "beginCaptures": { "2": { "name": "invalid.deprecated.prefix.python" }, "3": { "name": "storage.type.string.python" }, "4": { "name": "storage.type.string.python" }, "5": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "regexp-single-three-line": { "name": "string.regexp.quoted.multi.python", "begin": "\\b(([uU]r)|([bB]r)|(r[bB]?))(\\'\\'\\')", "end": "(\\'\\'\\')", "patterns": [ { "include": "#single-three-regexp-expression" } ], "beginCaptures": { "2": { "name": "invalid.deprecated.prefix.python" }, "3": { "name": "storage.type.string.python" }, "4": { "name": "storage.type.string.python" }, "5": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "return-annotation": { "begin": "(-\u003e)", "end": "(?=:)", "patterns": [ { "include": "#expression" } ], "beginCaptures": { "1": { "name": "punctuation.separator.annotation.result.python" } } }, "round-braces": { "begin": "\\(", "end": "\\)", "patterns": [ { "include": "#expression" } ], "beginCaptures": { "0": { "name": "punctuation.parenthesis.begin.python" } }, "endCaptures": { "0": { "name": "punctuation.parenthesis.end.python" } } }, "semicolon": { "patterns": [ { "name": "invalid.deprecated.semicolon.python", "match": "\\;$" } ] }, "single-one-fregexp-conditional": { "begin": "(\\()\\?\\((\\w+(?:\\s+[[:alnum:]]+)?|\\d+)\\)", "end": "(\\)|(?=\\'))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#single-one-fregexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.conditional.regexp" }, "1": { "name": "punctuation.parenthesis.conditional.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-one-fregexp-expression": { "patterns": [ { "include": "#fregexp-base-expression" }, { "include": "#single-one-regexp-character-set" }, { "include": "#single-one-regexp-comments" }, { "include": "#regexp-flags" }, { "include": "#single-one-regexp-named-group" }, { "include": "#regexp-backreference" }, { "include": "#single-one-fregexp-lookahead" }, { "include": "#single-one-fregexp-lookahead-negative" }, { "include": "#single-one-fregexp-lookbehind" }, { "include": "#single-one-fregexp-lookbehind-negative" }, { "include": "#single-one-fregexp-conditional" }, { "include": "#single-one-fregexp-parentheses-non-capturing" }, { "include": "#single-one-fregexp-parentheses" } ] }, "single-one-fregexp-lookahead": { "begin": "(\\()\\?=", "end": "(\\)|(?=\\'))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#single-one-fregexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookahead.regexp" }, "1": { "name": "punctuation.parenthesis.lookahead.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-one-fregexp-lookahead-negative": { "begin": "(\\()\\?!", "end": "(\\)|(?=\\'))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#single-one-fregexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookahead.negative.regexp" }, "1": { "name": "punctuation.parenthesis.lookahead.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-one-fregexp-lookbehind": { "begin": "(\\()\\?\u003c=", "end": "(\\)|(?=\\'))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#single-one-fregexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookbehind.regexp" }, "1": { "name": "punctuation.parenthesis.lookbehind.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-one-fregexp-lookbehind-negative": { "begin": "(\\()\\?\u003c!", "end": "(\\)|(?=\\'))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#single-one-fregexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookbehind.negative.regexp" }, "1": { "name": "punctuation.parenthesis.lookbehind.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-one-fregexp-named-group": { "name": "meta.named.regexp", "begin": "(?x)\n (\\() (\\?P \u003c\\w+(?:\\s+[[:alnum:]]+)?\u003e)\n", "end": "(\\)|(?=\\'))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#single-one-fregexp-expression" } ], "beginCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp" }, "2": { "name": "entity.name.tag.named.group.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-one-fregexp-parentheses": { "begin": "\\(", "end": "(\\)|(?=\\'))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#single-one-fregexp-expression" } ], "beginCaptures": { "0": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-one-fregexp-parentheses-non-capturing": { "begin": "\\(\\?:", "end": "(\\)|(?=\\'))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#single-one-fregexp-expression" } ], "beginCaptures": { "0": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-one-regexp-character-set": { "patterns": [ { "match": "(?x)\n \\[ \\^? \\] (?! .*?\\])\n" }, { "name": "meta.character.set.regexp", "begin": "(\\[)(\\^)?(\\])?", "end": "(\\]|(?=\\'))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#regexp-charecter-set-escapes" }, { "name": "constant.character.set.regexp", "match": "[^\\n]" } ], "beginCaptures": { "1": { "name": "punctuation.character.set.begin.regexp constant.other.set.regexp" }, "2": { "name": "keyword.operator.negation.regexp" }, "3": { "name": "constant.character.set.regexp" } }, "endCaptures": { "1": { "name": "punctuation.character.set.end.regexp constant.other.set.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } } ] }, "single-one-regexp-comments": { "name": "comment.regexp", "begin": "\\(\\?#", "end": "(\\)|(?=\\'))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#codetags" } ], "beginCaptures": { "0": { "name": "punctuation.comment.begin.regexp" } }, "endCaptures": { "1": { "name": "punctuation.comment.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-one-regexp-conditional": { "begin": "(\\()\\?\\((\\w+(?:\\s+[[:alnum:]]+)?|\\d+)\\)", "end": "(\\)|(?=\\'))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#single-one-regexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.conditional.regexp" }, "1": { "name": "punctuation.parenthesis.conditional.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-one-regexp-expression": { "patterns": [ { "include": "#regexp-base-expression" }, { "include": "#single-one-regexp-character-set" }, { "include": "#single-one-regexp-comments" }, { "include": "#regexp-flags" }, { "include": "#single-one-regexp-named-group" }, { "include": "#regexp-backreference" }, { "include": "#single-one-regexp-lookahead" }, { "include": "#single-one-regexp-lookahead-negative" }, { "include": "#single-one-regexp-lookbehind" }, { "include": "#single-one-regexp-lookbehind-negative" }, { "include": "#single-one-regexp-conditional" }, { "include": "#single-one-regexp-parentheses-non-capturing" }, { "include": "#single-one-regexp-parentheses" } ] }, "single-one-regexp-lookahead": { "begin": "(\\()\\?=", "end": "(\\)|(?=\\'))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#single-one-regexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookahead.regexp" }, "1": { "name": "punctuation.parenthesis.lookahead.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-one-regexp-lookahead-negative": { "begin": "(\\()\\?!", "end": "(\\)|(?=\\'))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#single-one-regexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookahead.negative.regexp" }, "1": { "name": "punctuation.parenthesis.lookahead.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-one-regexp-lookbehind": { "begin": "(\\()\\?\u003c=", "end": "(\\)|(?=\\'))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#single-one-regexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookbehind.regexp" }, "1": { "name": "punctuation.parenthesis.lookbehind.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-one-regexp-lookbehind-negative": { "begin": "(\\()\\?\u003c!", "end": "(\\)|(?=\\'))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#single-one-regexp-expression" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookbehind.negative.regexp" }, "1": { "name": "punctuation.parenthesis.lookbehind.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-one-regexp-named-group": { "name": "meta.named.regexp", "begin": "(?x)\n (\\() (\\?P \u003c\\w+(?:\\s+[[:alnum:]]+)?\u003e)\n", "end": "(\\)|(?=\\'))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#single-one-regexp-expression" } ], "beginCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp" }, "2": { "name": "entity.name.tag.named.group.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-one-regexp-parentheses": { "begin": "\\(", "end": "(\\)|(?=\\'))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#single-one-regexp-expression" } ], "beginCaptures": { "0": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-one-regexp-parentheses-non-capturing": { "begin": "\\(\\?:", "end": "(\\)|(?=\\'))|((?=(?\u003c!\\\\)\\n))", "patterns": [ { "include": "#single-one-regexp-expression" } ], "beginCaptures": { "0": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-three-fregexp-conditional": { "begin": "(\\()\\?\\((\\w+(?:\\s+[[:alnum:]]+)?|\\d+)\\)", "end": "(\\)|(?=\\'\\'\\'))", "patterns": [ { "include": "#single-three-fregexp-expression" }, { "include": "#comments-string-single-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.conditional.regexp" }, "1": { "name": "punctuation.parenthesis.conditional.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-three-fregexp-expression": { "patterns": [ { "include": "#fregexp-base-expression" }, { "include": "#single-three-regexp-character-set" }, { "include": "#single-three-regexp-comments" }, { "include": "#regexp-flags" }, { "include": "#single-three-regexp-named-group" }, { "include": "#regexp-backreference" }, { "include": "#single-three-fregexp-lookahead" }, { "include": "#single-three-fregexp-lookahead-negative" }, { "include": "#single-three-fregexp-lookbehind" }, { "include": "#single-three-fregexp-lookbehind-negative" }, { "include": "#single-three-fregexp-conditional" }, { "include": "#single-three-fregexp-parentheses-non-capturing" }, { "include": "#single-three-fregexp-parentheses" }, { "include": "#comments-string-single-three" } ] }, "single-three-fregexp-lookahead": { "begin": "(\\()\\?=", "end": "(\\)|(?=\\'\\'\\'))", "patterns": [ { "include": "#single-three-fregexp-expression" }, { "include": "#comments-string-single-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookahead.regexp" }, "1": { "name": "punctuation.parenthesis.lookahead.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-three-fregexp-lookahead-negative": { "begin": "(\\()\\?!", "end": "(\\)|(?=\\'\\'\\'))", "patterns": [ { "include": "#single-three-fregexp-expression" }, { "include": "#comments-string-single-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookahead.negative.regexp" }, "1": { "name": "punctuation.parenthesis.lookahead.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-three-fregexp-lookbehind": { "begin": "(\\()\\?\u003c=", "end": "(\\)|(?=\\'\\'\\'))", "patterns": [ { "include": "#single-three-fregexp-expression" }, { "include": "#comments-string-single-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookbehind.regexp" }, "1": { "name": "punctuation.parenthesis.lookbehind.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-three-fregexp-lookbehind-negative": { "begin": "(\\()\\?\u003c!", "end": "(\\)|(?=\\'\\'\\'))", "patterns": [ { "include": "#single-three-fregexp-expression" }, { "include": "#comments-string-single-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookbehind.negative.regexp" }, "1": { "name": "punctuation.parenthesis.lookbehind.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-three-fregexp-named-group": { "name": "meta.named.regexp", "begin": "(?x)\n (\\() (\\?P \u003c\\w+(?:\\s+[[:alnum:]]+)?\u003e)\n", "end": "(\\)|(?=\\'\\'\\'))", "patterns": [ { "include": "#single-three-fregexp-expression" }, { "include": "#comments-string-single-three" } ], "beginCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp" }, "2": { "name": "entity.name.tag.named.group.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-three-fregexp-parentheses": { "begin": "\\(", "end": "(\\)|(?=\\'\\'\\'))", "patterns": [ { "include": "#single-three-fregexp-expression" }, { "include": "#comments-string-single-three" } ], "beginCaptures": { "0": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-three-fregexp-parentheses-non-capturing": { "begin": "\\(\\?:", "end": "(\\)|(?=\\'\\'\\'))", "patterns": [ { "include": "#single-three-fregexp-expression" }, { "include": "#comments-string-single-three" } ], "beginCaptures": { "0": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-three-regexp-character-set": { "patterns": [ { "match": "(?x)\n \\[ \\^? \\] (?! .*?\\])\n" }, { "name": "meta.character.set.regexp", "begin": "(\\[)(\\^)?(\\])?", "end": "(\\]|(?=\\'\\'\\'))", "patterns": [ { "include": "#regexp-charecter-set-escapes" }, { "name": "constant.character.set.regexp", "match": "[^\\n]" } ], "beginCaptures": { "1": { "name": "punctuation.character.set.begin.regexp constant.other.set.regexp" }, "2": { "name": "keyword.operator.negation.regexp" }, "3": { "name": "constant.character.set.regexp" } }, "endCaptures": { "1": { "name": "punctuation.character.set.end.regexp constant.other.set.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } } ] }, "single-three-regexp-comments": { "name": "comment.regexp", "begin": "\\(\\?#", "end": "(\\)|(?=\\'\\'\\'))", "patterns": [ { "include": "#codetags" } ], "beginCaptures": { "0": { "name": "punctuation.comment.begin.regexp" } }, "endCaptures": { "1": { "name": "punctuation.comment.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-three-regexp-conditional": { "begin": "(\\()\\?\\((\\w+(?:\\s+[[:alnum:]]+)?|\\d+)\\)", "end": "(\\)|(?=\\'\\'\\'))", "patterns": [ { "include": "#single-three-regexp-expression" }, { "include": "#comments-string-single-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.conditional.regexp" }, "1": { "name": "punctuation.parenthesis.conditional.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-three-regexp-expression": { "patterns": [ { "include": "#regexp-base-expression" }, { "include": "#single-three-regexp-character-set" }, { "include": "#single-three-regexp-comments" }, { "include": "#regexp-flags" }, { "include": "#single-three-regexp-named-group" }, { "include": "#regexp-backreference" }, { "include": "#single-three-regexp-lookahead" }, { "include": "#single-three-regexp-lookahead-negative" }, { "include": "#single-three-regexp-lookbehind" }, { "include": "#single-three-regexp-lookbehind-negative" }, { "include": "#single-three-regexp-conditional" }, { "include": "#single-three-regexp-parentheses-non-capturing" }, { "include": "#single-three-regexp-parentheses" }, { "include": "#comments-string-single-three" } ] }, "single-three-regexp-lookahead": { "begin": "(\\()\\?=", "end": "(\\)|(?=\\'\\'\\'))", "patterns": [ { "include": "#single-three-regexp-expression" }, { "include": "#comments-string-single-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookahead.regexp" }, "1": { "name": "punctuation.parenthesis.lookahead.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-three-regexp-lookahead-negative": { "begin": "(\\()\\?!", "end": "(\\)|(?=\\'\\'\\'))", "patterns": [ { "include": "#single-three-regexp-expression" }, { "include": "#comments-string-single-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookahead.negative.regexp" }, "1": { "name": "punctuation.parenthesis.lookahead.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-three-regexp-lookbehind": { "begin": "(\\()\\?\u003c=", "end": "(\\)|(?=\\'\\'\\'))", "patterns": [ { "include": "#single-three-regexp-expression" }, { "include": "#comments-string-single-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookbehind.regexp" }, "1": { "name": "punctuation.parenthesis.lookbehind.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-three-regexp-lookbehind-negative": { "begin": "(\\()\\?\u003c!", "end": "(\\)|(?=\\'\\'\\'))", "patterns": [ { "include": "#single-three-regexp-expression" }, { "include": "#comments-string-single-three" } ], "beginCaptures": { "0": { "name": "keyword.operator.lookbehind.negative.regexp" }, "1": { "name": "punctuation.parenthesis.lookbehind.begin.regexp" } }, "endCaptures": { "1": { "name": "keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-three-regexp-named-group": { "name": "meta.named.regexp", "begin": "(?x)\n (\\() (\\?P \u003c\\w+(?:\\s+[[:alnum:]]+)?\u003e)\n", "end": "(\\)|(?=\\'\\'\\'))", "patterns": [ { "include": "#single-three-regexp-expression" }, { "include": "#comments-string-single-three" } ], "beginCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp" }, "2": { "name": "entity.name.tag.named.group.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-three-regexp-parentheses": { "begin": "\\(", "end": "(\\)|(?=\\'\\'\\'))", "patterns": [ { "include": "#single-three-regexp-expression" }, { "include": "#comments-string-single-three" } ], "beginCaptures": { "0": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "single-three-regexp-parentheses-non-capturing": { "begin": "\\(\\?:", "end": "(\\)|(?=\\'\\'\\'))", "patterns": [ { "include": "#single-three-regexp-expression" }, { "include": "#comments-string-single-three" } ], "beginCaptures": { "0": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp" } }, "endCaptures": { "1": { "name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp" }, "2": { "name": "invalid.illegal.newline.python" } } }, "special-names": { "name": "constant.other.caps.python", "match": "(?x)\n \\b\n # we want to see \"enough\", meaning 2 or more upper-case\n # letters in the beginning of the constant\n #\n # for more details refer to:\n # https://github.com/MagicStack/MagicPython/issues/42\n (\n _* [[:upper:]] [_\\d]* [[:upper:]]\n )\n [[:upper:]\\d]* (_\\w*)?\n \\b\n" }, "special-variables": { "match": "(?x)\n \\b (?\u003c!\\.) (?:\n (self) | (cls)\n )\\b\n", "captures": { "1": { "name": "variable.language.special.self.python" }, "2": { "name": "variable.language.special.cls.python" } } }, "statement": { "patterns": [ { "include": "#import" }, { "include": "#class-declaration" }, { "include": "#function-declaration" }, { "include": "#statement-keyword" }, { "include": "#assignment-operator" }, { "include": "#decorator" }, { "include": "#docstring-statement" }, { "include": "#semicolon" } ] }, "statement-keyword": { "patterns": [ { "name": "storage.type.function.python", "match": "\\b((async\\s+)?\\s*def)\\b" }, { "name": "keyword.control.flow.python", "match": "(?x)\n \\b(?\u003c!\\.)(\n as | async | continue | del | assert | break | finally | for\n | from | elif | else | if | except | pass | raise\n | return | try | while | with\n )\\b\n" }, { "name": "storage.modifier.declaration.python", "match": "(?x)\n \\b(?\u003c!\\.)(\n global | nonlocal\n )\\b\n" }, { "name": "storage.type.class.python", "match": "\\b(?\u003c!\\.)(class)\\b" } ] }, "string": { "patterns": [ { "include": "#string-quoted-multi-line" }, { "include": "#string-quoted-single-line" }, { "include": "#string-bin-quoted-multi-line" }, { "include": "#string-bin-quoted-single-line" }, { "include": "#string-raw-quoted-multi-line" }, { "include": "#string-raw-quoted-single-line" }, { "include": "#string-raw-bin-quoted-multi-line" }, { "include": "#string-raw-bin-quoted-single-line" }, { "include": "#fstring-fnorm-quoted-multi-line" }, { "include": "#fstring-fnorm-quoted-single-line" }, { "include": "#fstring-normf-quoted-multi-line" }, { "include": "#fstring-normf-quoted-single-line" }, { "include": "#fstring-raw-quoted-multi-line" }, { "include": "#fstring-raw-quoted-single-line" } ] }, "string-bin-quoted-multi-line": { "name": "string.quoted.binary.multi.python", "begin": "(\\b[bB])('''|\"\"\")", "end": "(\\2)", "patterns": [ { "include": "#string-entity" } ], "beginCaptures": { "1": { "name": "storage.type.string.python" }, "2": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "string-bin-quoted-single-line": { "name": "string.quoted.binary.single.python", "begin": "(\\b[bB])((['\"]))", "end": "(\\2)|((?\u003c!\\\\)\\n)", "patterns": [ { "include": "#string-entity" } ], "beginCaptures": { "1": { "name": "storage.type.string.python" }, "2": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "string-brace-formatting": { "patterns": [ { "name": "constant.character.format.placeholder.other.python", "match": "(?x)\n (?:\n {{ | }}\n | (?:\n {\n \\w*? (\\.[[:alpha:]_]\\w*? | \\[[^\\]'\"]+\\])*?\n (![rsa])?\n ( : \\w? [\u003c\u003e=^]? [-+ ]? \\#?\n \\d* ,? (\\.\\d+)? [bcdeEfFgGnosxX%]? )?\n })\n )\n", "captures": { "2": { "name": "storage.type.format.python" }, "3": { "name": "storage.type.format.python" } } }, { "name": "constant.character.format.placeholder.other.python", "begin": "(?x)\n \\{\n \\w*? (\\.[[:alpha:]_]\\w*? | \\[[^\\]'\"]+\\])*?\n (![rsa])?\n (:)\n (?=[^'\"}\\n]*\\})\n", "end": "\\}", "patterns": [ { "match": "(?x) \\{ [^'\"}\\n]*? \\} (?=.*?\\})\n" } ], "beginCaptures": { "2": { "name": "storage.type.format.python" }, "3": { "name": "storage.type.format.python" } } } ] }, "string-consume-escape": { "match": "\\\\['\"\\n\\\\]" }, "string-entity": { "patterns": [ { "include": "#escape-sequence" }, { "include": "#string-line-continuation" }, { "include": "#string-formatting" } ] }, "string-formatting": { "name": "constant.character.format.placeholder.other.python", "match": "(?x)\n % (\\([\\w\\s]*\\))?\n [-+#0 ]*\n (\\d+|\\*)? (\\.(\\d+|\\*))?\n ([hlL])?\n [diouxXeEfFgGcrsa%]\n" }, "string-line-continuation": { "name": "constant.language.python", "match": "\\\\$" }, "string-multi-bad-brace1-formatting-raw": { "begin": "(?x)\n (?= \\{%\n ( .*? (?!'''|\"\"\") )\n %\\}\n )\n", "end": "(?='''|\"\"\")", "patterns": [ { "include": "#string-consume-escape" } ] }, "string-multi-bad-brace1-formatting-unicode": { "begin": "(?x)\n (?= \\{%\n ( .*? (?!'''|\"\"\") )\n %\\}\n )\n", "end": "(?='''|\"\"\")", "patterns": [ { "include": "#escape-sequence-unicode" }, { "include": "#escape-sequence" }, { "include": "#string-line-continuation" } ] }, "string-multi-bad-brace2-formatting-raw": { "begin": "(?x)\n (?!\\{\\{)\n (?= \\{ (\n \\w*? (?!'''|\"\"\") [^!:\\.\\[}\\w]\n )\n .*?(?!'''|\"\"\")\n \\}\n )\n", "end": "(?='''|\"\"\")", "patterns": [ { "include": "#string-consume-escape" }, { "include": "#string-formatting" } ] }, "string-multi-bad-brace2-formatting-unicode": { "begin": "(?x)\n (?!\\{\\{)\n (?= \\{ (\n \\w*? (?!'''|\"\"\") [^!:\\.\\[}\\w]\n )\n .*?(?!'''|\"\"\")\n \\}\n )\n", "end": "(?='''|\"\"\")", "patterns": [ { "include": "#escape-sequence-unicode" }, { "include": "#string-entity" } ] }, "string-quoted-multi-line": { "name": "string.quoted.multi.python", "begin": "(\\b[rR](?=[uU]))?([uU])?('''|\"\"\")", "end": "(\\3)", "patterns": [ { "include": "#string-multi-bad-brace1-formatting-unicode" }, { "include": "#string-multi-bad-brace2-formatting-unicode" }, { "include": "#string-unicode-guts" } ], "beginCaptures": { "1": { "name": "invalid.illegal.prefix.python" }, "2": { "name": "storage.type.string.python" }, "3": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "string-quoted-single-line": { "name": "string.quoted.single.python", "begin": "(\\b[rR](?=[uU]))?([uU])?((['\"]))", "end": "(\\3)|((?\u003c!\\\\)\\n)", "patterns": [ { "include": "#string-single-bad-brace1-formatting-unicode" }, { "include": "#string-single-bad-brace2-formatting-unicode" }, { "include": "#string-unicode-guts" } ], "beginCaptures": { "1": { "name": "invalid.illegal.prefix.python" }, "2": { "name": "storage.type.string.python" }, "3": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "string-raw-bin-guts": { "patterns": [ { "include": "#string-consume-escape" }, { "include": "#string-formatting" } ] }, "string-raw-bin-quoted-multi-line": { "name": "string.quoted.raw.binary.multi.python", "begin": "(\\b(?:R[bB]|[bB]R))('''|\"\"\")", "end": "(\\2)", "patterns": [ { "include": "#string-raw-bin-guts" } ], "beginCaptures": { "1": { "name": "storage.type.string.python" }, "2": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "string-raw-bin-quoted-single-line": { "name": "string.quoted.raw.binary.single.python", "begin": "(\\b(?:R[bB]|[bB]R))((['\"]))", "end": "(\\2)|((?\u003c!\\\\)\\n)", "patterns": [ { "include": "#string-raw-bin-guts" } ], "beginCaptures": { "1": { "name": "storage.type.string.python" }, "2": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "string-raw-guts": { "patterns": [ { "include": "#string-consume-escape" }, { "include": "#string-formatting" }, { "include": "#string-brace-formatting" } ] }, "string-raw-quoted-multi-line": { "name": "string.quoted.raw.multi.python", "begin": "\\b(([uU]R)|(R))('''|\"\"\")", "end": "(\\4)", "patterns": [ { "include": "#string-multi-bad-brace1-formatting-raw" }, { "include": "#string-multi-bad-brace2-formatting-raw" }, { "include": "#string-raw-guts" } ], "beginCaptures": { "2": { "name": "invalid.deprecated.prefix.python" }, "3": { "name": "storage.type.string.python" }, "4": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "string-raw-quoted-single-line": { "name": "string.quoted.raw.single.python", "begin": "\\b(([uU]R)|(R))((['\"]))", "end": "(\\4)|((?\u003c!\\\\)\\n)", "patterns": [ { "include": "#string-single-bad-brace1-formatting-raw" }, { "include": "#string-single-bad-brace2-formatting-raw" }, { "include": "#string-raw-guts" } ], "beginCaptures": { "2": { "name": "invalid.deprecated.prefix.python" }, "3": { "name": "storage.type.string.python" }, "4": { "name": "punctuation.definition.string.begin.python" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.python" }, "2": { "name": "invalid.illegal.newline.python" } } }, "string-single-bad-brace1-formatting-raw": { "begin": "(?x)\n (?= \\{%\n ( .*? (?!(['\"])|((?\u003c!\\\\)\\n)) )\n %\\}\n )\n", "end": "(?=(['\"])|((?\u003c!\\\\)\\n))", "patterns": [ { "include": "#string-consume-escape" } ] }, "string-single-bad-brace1-formatting-unicode": { "begin": "(?x)\n (?= \\{%\n ( .*? (?!(['\"])|((?\u003c!\\\\)\\n)) )\n %\\}\n )\n", "end": "(?=(['\"])|((?\u003c!\\\\)\\n))", "patterns": [ { "include": "#escape-sequence-unicode" }, { "include": "#escape-sequence" }, { "include": "#string-line-continuation" } ] }, "string-single-bad-brace2-formatting-raw": { "begin": "(?x)\n (?!\\{\\{)\n (?= \\{ (\n \\w*? (?!(['\"])|((?\u003c!\\\\)\\n)) [^!:\\.\\[}\\w]\n )\n .*?(?!(['\"])|((?\u003c!\\\\)\\n))\n \\}\n )\n", "end": "(?=(['\"])|((?\u003c!\\\\)\\n))", "patterns": [ { "include": "#string-consume-escape" }, { "include": "#string-formatting" } ] }, "string-single-bad-brace2-formatting-unicode": { "begin": "(?x)\n (?!\\{\\{)\n (?= \\{ (\n \\w*? (?!(['\"])|((?\u003c!\\\\)\\n)) [^!:\\.\\[}\\w]\n )\n .*?(?!(['\"])|((?\u003c!\\\\)\\n))\n \\}\n )\n", "end": "(?=(['\"])|((?\u003c!\\\\)\\n))", "patterns": [ { "include": "#escape-sequence-unicode" }, { "include": "#string-entity" } ] }, "string-unicode-guts": { "patterns": [ { "include": "#escape-sequence-unicode" }, { "include": "#string-entity" }, { "include": "#string-brace-formatting" } ] } } }