Skip to content

Instantly share code, notes, and snippets.

@davepeck
Created May 15, 2025 21:47
Show Gist options
  • Save davepeck/e4fc59ef1efe459d7a2d7b996c69202c to your computer and use it in GitHub Desktop.
Save davepeck/e4fc59ef1efe459d7a2d7b996c69202c to your computer and use it in GitHub Desktop.
TextMate (JSON-format) grammar for Python 3.14, with support for t-string syntax
{
"displayName": "Python 3.14",
"name": "python314",
"patterns": [
{
"include": "#statement"
},
{
"include": "#expression"
}
],
"repository": {
"annotated-parameter": {
"begin": "\\b([_[:alpha:]]\\w*)\\s*(:)",
"beginCaptures": {
"1": {
"name": "variable.parameter.function.language.python"
},
"2": {
"name": "punctuation.separator.annotation.python"
}
},
"end": "(,)|(?=\\))",
"endCaptures": {
"1": {
"name": "punctuation.separator.parameters.python"
}
},
"patterns": [
{
"include": "#expression"
},
{
"match": "=(?!=)",
"name": "keyword.operator.assignment.python"
}
]
},
"assignment-operator": {
"match": "<<=|>>=|//=|\\*\\*=|\\+=|-=|/=|@=|\\*=|%=|~=|\\^=|&=|\\|=|=(?!=)",
"name": "keyword.operator.assignment.python"
},
"backticks": {
"begin": "`",
"end": "`|(?<!\\\\)(\\n)",
"name": "invalid.deprecated.backtick.python",
"patterns": [
{
"include": "#expression"
}
]
},
"builtin-callables": {
"patterns": [
{
"include": "#illegal-names"
},
{
"include": "#illegal-object-name"
},
{
"include": "#builtin-exceptions"
},
{
"include": "#builtin-functions"
},
{
"include": "#builtin-types"
}
]
},
"builtin-exceptions": {
"match": "(?<!\\.)\\b((Arithmetic|Assertion|Attribute|Buffer|BlockingIO|BrokenPipe|ChildProcess|(Connection(Aborted|Refused|Reset)?)|EOF|Environment|FileExists|FileNotFound|FloatingPoint|IO|Import|Indentation|Index|Interrupted|IsADirectory|NotADirectory|Permission|ProcessLookup|Timeout|Key|Lookup|Memory|Name|NotImplemented|OS|Overflow|Reference|Runtime|Recursion|Syntax|System|Tab|Type|UnboundLocal|Unicode(Encode|Decode|Translate)?|Value|Windows|ZeroDivision|ModuleNotFound)Error|((Pending)?Deprecation|Runtime|Syntax|User|Future|Import|Unicode|Bytes|Resource)?Warning|SystemExit|Stop(Async)?Iteration|KeyboardInterrupt|GeneratorExit|(Base)?Exception)\\b",
"name": "support.type.exception.python"
},
"builtin-functions": {
"patterns": [
{
"match": "(?<!\\.)\\b(__import__|abs|aiter|all|any|anext|ascii|bin|breakpoint|callable|chr|compile|copyright|credits|delattr|dir|divmod|enumerate|eval|exec|exit|filter|format|getattr|globals|hasattr|hash|help|hex|id|input|isinstance|issubclass|iter|len|license|locals|map|max|memoryview|min|next|oct|open|ord|pow|print|quit|range|reload|repr|reversed|round|setattr|sorted|sum|vars|zip)\\b",
"name": "support.function.builtin.python"
},
{
"match": "(?<!\\.)\\b(file|reduce|intern|raw_input|unicode|cmp|basestring|execfile|long|xrange)\\b",
"name": "variable.legacy.builtin.python"
}
]
},
"builtin-possible-callables": {
"patterns": [
{
"include": "#builtin-callables"
},
{
"include": "#magic-names"
}
]
},
"builtin-types": {
"match": "(?<!\\.)\\b(bool|bytearray|bytes|classmethod|complex|dict|float|frozenset|int|list|object|property|set|slice|staticmethod|str|tuple|type|super)\\b",
"name": "support.type.python"
},
"call-wrapper-inheritance": {
"begin": "\\b(?=([_[:alpha:]]\\w*)\\s*(\\())",
"end": "(\\))",
"endCaptures": {
"1": {
"name": "punctuation.definition.arguments.end.python"
}
},
"name": "meta.function-call.python",
"patterns": [
{
"include": "#inheritance-name"
},
{
"include": "#function-arguments"
}
]
},
"class-declaration": {
"patterns": [
{
"begin": "\\s*(class)\\s+(?=[_[:alpha:]]\\w*\\s*([(:]))",
"beginCaptures": {
"1": {
"name": "storage.type.class.python"
}
},
"end": "(:)",
"endCaptures": {
"1": {
"name": "punctuation.section.class.begin.python"
}
},
"name": "meta.class.python",
"patterns": [
{
"include": "#class-name"
},
{
"include": "#class-inheritance"
}
]
}
]
},
"class-inheritance": {
"begin": "(\\()",
"beginCaptures": {
"1": {
"name": "punctuation.definition.inheritance.begin.python"
}
},
"end": "(\\))",
"endCaptures": {
"1": {
"name": "punctuation.definition.inheritance.end.python"
}
},
"name": "meta.class.inheritance.python",
"patterns": [
{
"match": "(\\*\\*?)",
"name": "keyword.operator.unpacking.arguments.python"
},
{
"match": ",",
"name": "punctuation.separator.inheritance.python"
},
{
"match": "=(?!=)",
"name": "keyword.operator.assignment.python"
},
{
"match": "\\bmetaclass\\b",
"name": "support.type.metaclass.python"
},
{
"include": "#illegal-names"
},
{
"include": "#class-kwarg"
},
{
"include": "#call-wrapper-inheritance"
},
{
"include": "#expression-base"
},
{
"include": "#member-access-class"
},
{
"include": "#inheritance-identifier"
}
]
},
"class-kwarg": {
"captures": {
"1": {
"name": "entity.other.inherited-class.python variable.parameter.class.python"
},
"2": {
"name": "keyword.operator.assignment.python"
}
},
"match": "\\b([_[:alpha:]]\\w*)\\s*(=)(?!=)"
},
"class-name": {
"patterns": [
{
"include": "#illegal-object-name"
},
{
"include": "#builtin-possible-callables"
},
{
"match": "\\b([_[:alpha:]]\\w*)\\b",
"name": "entity.name.type.class.python"
}
]
},
"codetags": {
"captures": {
"1": {
"name": "keyword.codetag.notation.python"
}
},
"match": "\\b(NOTE|XXX|HACK|FIXME|BUG|TODO)\\b"
},
"comments": {
"patterns": [
{
"begin": "#\\s*(type:)\\s*+(?!$|#)",
"beginCaptures": {
"0": {
"name": "meta.typehint.comment.python"
},
"1": {
"name": "comment.typehint.directive.notation.python"
}
},
"contentName": "meta.typehint.comment.python",
"end": "$|(?=#)",
"name": "comment.line.number-sign.python",
"patterns": [
{
"match": "\\Gignore(?=\\s*(?:$|#))",
"name": "comment.typehint.ignore.notation.python"
},
{
"match": "(?<!\\.)\\b(bool|bytes|float|int|object|str|List|Dict|Iterable|Sequence|Set|FrozenSet|Callable|Union|Tuple|Any|None)\\b",
"name": "comment.typehint.type.notation.python"
},
{
"match": "([]()*,.=\\[]|(->))",
"name": "comment.typehint.punctuation.notation.python"
},
{
"match": "([_[:alpha:]]\\w*)",
"name": "comment.typehint.variable.notation.python"
}
]
},
{
"include": "#comments-base"
}
]
},
"comments-base": {
"begin": "(#)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.comment.python"
}
},
"end": "$()",
"name": "comment.line.number-sign.python",
"patterns": [
{
"include": "#codetags"
}
]
},
"comments-string-double-three": {
"begin": "(#)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.comment.python"
}
},
"end": "($|(?=\"\"\"))",
"name": "comment.line.number-sign.python",
"patterns": [
{
"include": "#codetags"
}
]
},
"comments-string-single-three": {
"begin": "(#)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.comment.python"
}
},
"end": "($|(?='''))",
"name": "comment.line.number-sign.python",
"patterns": [
{
"include": "#codetags"
}
]
},
"curly-braces": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.dict.begin.python"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.definition.dict.end.python"
}
},
"patterns": [
{
"match": ":",
"name": "punctuation.separator.dict.python"
},
{
"include": "#expression"
}
]
},
"decorator": {
"begin": "^\\s*((@))\\s*(?=[_[:alpha:]]\\w*)",
"beginCaptures": {
"1": {
"name": "entity.name.function.decorator.python"
},
"2": {
"name": "punctuation.definition.decorator.python"
}
},
"end": "(\\))(.*?)(?=\\s*(?:#|$))|(?=[\\n#])",
"endCaptures": {
"1": {
"name": "punctuation.definition.arguments.end.python"
},
"2": {
"name": "invalid.illegal.decorator.python"
}
},
"name": "meta.function.decorator.python",
"patterns": [
{
"include": "#decorator-name"
},
{
"include": "#function-arguments"
}
]
},
"decorator-name": {
"patterns": [
{
"include": "#builtin-callables"
},
{
"include": "#illegal-object-name"
},
{
"captures": {
"2": {
"name": "punctuation.separator.period.python"
}
},
"match": "([_[:alpha:]]\\w*)|(\\.)",
"name": "entity.name.function.decorator.python"
},
{
"include": "#line-continuation"
},
{
"captures": {
"1": {
"name": "invalid.illegal.decorator.python"
}
},
"match": "\\s*([^#(.\\\\_[:alpha:]\\s].*?)(?=#|$)",
"name": "invalid.illegal.decorator.python"
}
]
},
"docstring": {
"patterns": [
{
"begin": "('''|\"\"\")",
"beginCaptures": {
"1": {
"name": "punctuation.definition.string.begin.python"
}
},
"end": "(\\1)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
}
},
"name": "string.quoted.docstring.multi.python",
"patterns": [
{
"include": "#docstring-prompt"
},
{
"include": "#codetags"
},
{
"include": "#docstring-guts-unicode"
}
]
},
{
"begin": "([Rr])('''|\"\"\")",
"beginCaptures": {
"1": {
"name": "storage.type.string.python"
},
"2": {
"name": "punctuation.definition.string.begin.python"
}
},
"end": "(\\2)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
}
},
"name": "string.quoted.docstring.raw.multi.python",
"patterns": [
{
"include": "#string-consume-escape"
},
{
"include": "#docstring-prompt"
},
{
"include": "#codetags"
}
]
},
{
"begin": "([\"'])",
"beginCaptures": {
"1": {
"name": "punctuation.definition.string.begin.python"
}
},
"end": "(\\1)|(\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "string.quoted.docstring.single.python",
"patterns": [
{
"include": "#codetags"
},
{
"include": "#docstring-guts-unicode"
}
]
},
{
"begin": "([Rr])([\"'])",
"beginCaptures": {
"1": {
"name": "storage.type.string.python"
},
"2": {
"name": "punctuation.definition.string.begin.python"
}
},
"end": "(\\2)|(\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "string.quoted.docstring.raw.single.python",
"patterns": [
{
"include": "#string-consume-escape"
},
{
"include": "#codetags"
}
]
}
]
},
"docstring-guts-unicode": {
"patterns": [
{
"include": "#escape-sequence-unicode"
},
{
"include": "#escape-sequence"
},
{
"include": "#string-line-continuation"
}
]
},
"docstring-prompt": {
"captures": {
"1": {
"name": "keyword.control.flow.python"
}
},
"match": "(?:^|\\G)\\s*((?:>>>|\\.\\.\\.)\\s)(?=\\s*\\S)"
},
"docstring-statement": {
"begin": "^(?=\\s*[Rr]?('''|\"\"\"|[\"']))",
"end": "((?<=\\1)|^)(?!\\s*[Rr]?('''|\"\"\"|[\"']))",
"patterns": [
{
"include": "#docstring"
}
]
},
"double-one-regexp-character-set": {
"patterns": [
{
"match": "\\[\\^?](?!.*?])"
},
{
"begin": "(\\[)(\\^)?(])?",
"beginCaptures": {
"1": {
"name": "punctuation.character.set.begin.regexp constant.other.set.regexp"
},
"2": {
"name": "keyword.operator.negation.regexp"
},
"3": {
"name": "constant.character.set.regexp"
}
},
"end": "(]|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "punctuation.character.set.end.regexp constant.other.set.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.character.set.regexp",
"patterns": [
{
"include": "#regexp-charecter-set-escapes"
},
{
"match": "\\N",
"name": "constant.character.set.regexp"
}
]
}
]
},
"double-one-regexp-comments": {
"begin": "\\(\\?#",
"beginCaptures": {
"0": {
"name": "punctuation.comment.begin.regexp"
}
},
"end": "(\\)|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "punctuation.comment.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "comment.regexp",
"patterns": [
{
"include": "#codetags"
}
]
},
"double-one-regexp-conditional": {
"begin": "(\\()\\?\\((\\w+(?:\\s+\\p{alnum}+)?|\\d+)\\)",
"beginCaptures": {
"0": {
"name": "keyword.operator.conditional.regexp"
},
"1": {
"name": "punctuation.parenthesis.conditional.begin.regexp"
}
},
"end": "(\\)|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-one-regexp-expression"
}
]
},
"double-one-regexp-expression": {
"patterns": [
{
"include": "#regexp-base-expression"
},
{
"include": "#double-one-regexp-character-set"
},
{
"include": "#double-one-regexp-comments"
},
{
"include": "#regexp-flags"
},
{
"include": "#double-one-regexp-named-group"
},
{
"include": "#regexp-backreference"
},
{
"include": "#double-one-regexp-lookahead"
},
{
"include": "#double-one-regexp-lookahead-negative"
},
{
"include": "#double-one-regexp-lookbehind"
},
{
"include": "#double-one-regexp-lookbehind-negative"
},
{
"include": "#double-one-regexp-conditional"
},
{
"include": "#double-one-regexp-parentheses-non-capturing"
},
{
"include": "#double-one-regexp-parentheses"
}
]
},
"double-one-regexp-lookahead": {
"begin": "(\\()\\?=",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookahead.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookahead.begin.regexp"
}
},
"end": "(\\)|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-one-regexp-expression"
}
]
},
"double-one-regexp-lookahead-negative": {
"begin": "(\\()\\?!",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookahead.negative.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookahead.begin.regexp"
}
},
"end": "(\\)|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-one-regexp-expression"
}
]
},
"double-one-regexp-lookbehind": {
"begin": "(\\()\\?<=",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookbehind.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookbehind.begin.regexp"
}
},
"end": "(\\)|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-one-regexp-expression"
}
]
},
"double-one-regexp-lookbehind-negative": {
"begin": "(\\()\\?<!",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookbehind.negative.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookbehind.begin.regexp"
}
},
"end": "(\\)|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-one-regexp-expression"
}
]
},
"double-one-regexp-named-group": {
"begin": "(\\()(\\?P<\\w+(?:\\s+\\p{alnum}+)?>)",
"beginCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp"
},
"2": {
"name": "entity.name.tag.named.group.regexp"
}
},
"end": "(\\)|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.named.regexp",
"patterns": [
{
"include": "#double-one-regexp-expression"
}
]
},
"double-one-regexp-parentheses": {
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp"
}
},
"end": "(\\)|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-one-regexp-expression"
}
]
},
"double-one-regexp-parentheses-non-capturing": {
"begin": "\\(\\?:",
"beginCaptures": {
"0": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp"
}
},
"end": "(\\)|(?=\"))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-one-regexp-expression"
}
]
},
"double-three-regexp-character-set": {
"patterns": [
{
"match": "\\[\\^?](?!.*?])"
},
{
"begin": "(\\[)(\\^)?(])?",
"beginCaptures": {
"1": {
"name": "punctuation.character.set.begin.regexp constant.other.set.regexp"
},
"2": {
"name": "keyword.operator.negation.regexp"
},
"3": {
"name": "constant.character.set.regexp"
}
},
"end": "(]|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "punctuation.character.set.end.regexp constant.other.set.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.character.set.regexp",
"patterns": [
{
"include": "#regexp-charecter-set-escapes"
},
{
"match": "\\N",
"name": "constant.character.set.regexp"
}
]
}
]
},
"double-three-regexp-comments": {
"begin": "\\(\\?#",
"beginCaptures": {
"0": {
"name": "punctuation.comment.begin.regexp"
}
},
"end": "(\\)|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "punctuation.comment.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "comment.regexp",
"patterns": [
{
"include": "#codetags"
}
]
},
"double-three-regexp-conditional": {
"begin": "(\\()\\?\\((\\w+(?:\\s+\\p{alnum}+)?|\\d+)\\)",
"beginCaptures": {
"0": {
"name": "keyword.operator.conditional.regexp"
},
"1": {
"name": "punctuation.parenthesis.conditional.begin.regexp"
}
},
"end": "(\\)|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-three-regexp-expression"
},
{
"include": "#comments-string-double-three"
}
]
},
"double-three-regexp-expression": {
"patterns": [
{
"include": "#regexp-base-expression"
},
{
"include": "#double-three-regexp-character-set"
},
{
"include": "#double-three-regexp-comments"
},
{
"include": "#regexp-flags"
},
{
"include": "#double-three-regexp-named-group"
},
{
"include": "#regexp-backreference"
},
{
"include": "#double-three-regexp-lookahead"
},
{
"include": "#double-three-regexp-lookahead-negative"
},
{
"include": "#double-three-regexp-lookbehind"
},
{
"include": "#double-three-regexp-lookbehind-negative"
},
{
"include": "#double-three-regexp-conditional"
},
{
"include": "#double-three-regexp-parentheses-non-capturing"
},
{
"include": "#double-three-regexp-parentheses"
},
{
"include": "#comments-string-double-three"
}
]
},
"double-three-regexp-lookahead": {
"begin": "(\\()\\?=",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookahead.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookahead.begin.regexp"
}
},
"end": "(\\)|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-three-regexp-expression"
},
{
"include": "#comments-string-double-three"
}
]
},
"double-three-regexp-lookahead-negative": {
"begin": "(\\()\\?!",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookahead.negative.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookahead.begin.regexp"
}
},
"end": "(\\)|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-three-regexp-expression"
},
{
"include": "#comments-string-double-three"
}
]
},
"double-three-regexp-lookbehind": {
"begin": "(\\()\\?<=",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookbehind.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookbehind.begin.regexp"
}
},
"end": "(\\)|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-three-regexp-expression"
},
{
"include": "#comments-string-double-three"
}
]
},
"double-three-regexp-lookbehind-negative": {
"begin": "(\\()\\?<!",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookbehind.negative.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookbehind.begin.regexp"
}
},
"end": "(\\)|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-three-regexp-expression"
},
{
"include": "#comments-string-double-three"
}
]
},
"double-three-regexp-named-group": {
"begin": "(\\()(\\?P<\\w+(?:\\s+\\p{alnum}+)?>)",
"beginCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp"
},
"2": {
"name": "entity.name.tag.named.group.regexp"
}
},
"end": "(\\)|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.named.regexp",
"patterns": [
{
"include": "#double-three-regexp-expression"
},
{
"include": "#comments-string-double-three"
}
]
},
"double-three-regexp-parentheses": {
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp"
}
},
"end": "(\\)|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-three-regexp-expression"
},
{
"include": "#comments-string-double-three"
}
]
},
"double-three-regexp-parentheses-non-capturing": {
"begin": "\\(\\?:",
"beginCaptures": {
"0": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp"
}
},
"end": "(\\)|(?=\"\"\"))",
"endCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#double-three-regexp-expression"
},
{
"include": "#comments-string-double-three"
}
]
},
"ellipsis": {
"match": "\\.\\.\\.",
"name": "constant.other.ellipsis.python"
},
"escape-sequence": {
"match": "\\\\(x\\h{2}|[0-7]{1,3}|[\"'\\\\abfnrtv])",
"name": "constant.character.escape.python"
},
"escape-sequence-unicode": {
"patterns": [
{
"match": "\\\\(u\\h{4}|U\\h{8}|N\\{[\\w\\s]+?})",
"name": "constant.character.escape.python"
}
]
},
"expression": {
"patterns": [
{
"include": "#expression-base"
},
{
"include": "#member-access"
},
{
"match": "\\b([_[:alpha:]]\\w*)\\b"
}
]
},
"expression-bare": {
"patterns": [
{
"include": "#backticks"
},
{
"include": "#illegal-anno"
},
{
"include": "#literal"
},
{
"include": "#regexp"
},
{
"include": "#string"
},
{
"include": "#lambda"
},
{
"include": "#generator"
},
{
"include": "#illegal-operator"
},
{
"include": "#operator"
},
{
"include": "#curly-braces"
},
{
"include": "#item-access"
},
{
"include": "#list"
},
{
"include": "#odd-function-call"
},
{
"include": "#round-braces"
},
{
"include": "#function-call"
},
{
"include": "#builtin-functions"
},
{
"include": "#builtin-types"
},
{
"include": "#builtin-exceptions"
},
{
"include": "#magic-names"
},
{
"include": "#special-names"
},
{
"include": "#illegal-names"
},
{
"include": "#special-variables"
},
{
"include": "#ellipsis"
},
{
"include": "#punctuation"
},
{
"include": "#line-continuation"
}
]
},
"expression-base": {
"patterns": [
{
"include": "#comments"
},
{
"include": "#expression-bare"
},
{
"include": "#line-continuation"
}
]
},
"f-expression": {
"patterns": [
{
"include": "#expression-bare"
},
{
"include": "#member-access"
},
{
"match": "\\b([_[:alpha:]]\\w*)\\b"
}
]
},
"fregexp-base-expression": {
"patterns": [
{
"include": "#fregexp-quantifier"
},
{
"include": "#fstring-formatting-braces"
},
{
"match": "\\{.*?}"
},
{
"include": "#regexp-base-common"
}
]
},
"fregexp-quantifier": {
"match": "\\{\\{(\\d+|\\d+,(\\d+)?|,\\d+)}}",
"name": "keyword.operator.quantifier.regexp"
},
"fstring-fnorm-quoted-multi-line": {
"begin": "\\b([FfTt])([BUbu])?('''|\"\"\")",
"beginCaptures": {
"1": {
"name": "string.interpolated.python string.quoted.multi.python storage.type.string.python"
},
"2": {
"name": "invalid.illegal.prefix.python"
},
"3": {
"name": "punctuation.definition.string.begin.python string.interpolated.python string.quoted.multi.python"
}
},
"end": "(\\3)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.multi.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.fstring.python",
"patterns": [
{
"include": "#fstring-guts"
},
{
"include": "#fstring-illegal-multi-brace"
},
{
"include": "#fstring-multi-brace"
},
{
"include": "#fstring-multi-core"
}
]
},
"fstring-fnorm-quoted-single-line": {
"begin": "\\b([FfTt])([BUbu])?(([\"']))",
"beginCaptures": {
"1": {
"name": "string.interpolated.python string.quoted.single.python storage.type.string.python"
},
"2": {
"name": "invalid.illegal.prefix.python"
},
"3": {
"name": "punctuation.definition.string.begin.python string.interpolated.python string.quoted.single.python"
}
},
"end": "(\\3)|((?<!\\\\)\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.single.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.fstring.python",
"patterns": [
{
"include": "#fstring-guts"
},
{
"include": "#fstring-illegal-single-brace"
},
{
"include": "#fstring-single-brace"
},
{
"include": "#fstring-single-core"
}
]
},
"fstring-formatting": {
"patterns": [
{
"include": "#fstring-formatting-braces"
},
{
"include": "#fstring-formatting-singe-brace"
}
]
},
"fstring-formatting-braces": {
"patterns": [
{
"captures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
},
"2": {
"name": "invalid.illegal.brace.python"
},
"3": {
"name": "constant.character.format.placeholder.other.python"
}
},
"match": "(\\{)(\\s*?)(})"
},
{
"match": "(\\{\\{|}})",
"name": "constant.character.escape.python"
}
]
},
"fstring-formatting-singe-brace": {
"match": "(}(?!}))",
"name": "invalid.illegal.brace.python"
},
"fstring-guts": {
"patterns": [
{
"include": "#escape-sequence-unicode"
},
{
"include": "#escape-sequence"
},
{
"include": "#string-line-continuation"
},
{
"include": "#fstring-formatting"
}
]
},
"fstring-illegal-multi-brace": {
"patterns": [
{
"include": "#impossible"
}
]
},
"fstring-illegal-single-brace": {
"begin": "(\\{)(?=[^\\n}]*$\\n?)",
"beginCaptures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"end": "(})|(?=\\n)",
"endCaptures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"patterns": [
{
"include": "#fstring-terminator-single"
},
{
"include": "#f-expression"
}
]
},
"fstring-multi-brace": {
"begin": "(\\{)",
"beginCaptures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"end": "(})",
"endCaptures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"patterns": [
{
"include": "#fstring-terminator-multi"
},
{
"include": "#f-expression"
}
]
},
"fstring-multi-core": {
"match": "(.+?)($(\\n?)|(?=[\\\\{}]|'''|\"\"\"))|\\n",
"name": "string.interpolated.python string.quoted.multi.python"
},
"fstring-normf-quoted-multi-line": {
"begin": "\\b([BUbu])([FfTt])('''|\"\"\")",
"beginCaptures": {
"1": {
"name": "invalid.illegal.prefix.python"
},
"2": {
"name": "string.interpolated.python string.quoted.multi.python storage.type.string.python"
},
"3": {
"name": "punctuation.definition.string.begin.python string.quoted.multi.python"
}
},
"end": "(\\3)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.multi.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.fstring.python",
"patterns": [
{
"include": "#fstring-guts"
},
{
"include": "#fstring-illegal-multi-brace"
},
{
"include": "#fstring-multi-brace"
},
{
"include": "#fstring-multi-core"
}
]
},
"fstring-normf-quoted-single-line": {
"begin": "\\b([BUbu])([FfTt])(([\"']))",
"beginCaptures": {
"1": {
"name": "invalid.illegal.prefix.python"
},
"2": {
"name": "string.interpolated.python string.quoted.single.python storage.type.string.python"
},
"3": {
"name": "punctuation.definition.string.begin.python string.quoted.single.python"
}
},
"end": "(\\3)|((?<!\\\\)\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.single.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.fstring.python",
"patterns": [
{
"include": "#fstring-guts"
},
{
"include": "#fstring-illegal-single-brace"
},
{
"include": "#fstring-single-brace"
},
{
"include": "#fstring-single-core"
}
]
},
"fstring-raw-guts": {
"patterns": [
{
"include": "#string-consume-escape"
},
{
"include": "#fstring-formatting"
}
]
},
"fstring-raw-multi-core": {
"match": "(.+?)($(\\n?)|(?=[\\\\{}]|'''|\"\"\"))|\\n",
"name": "string.interpolated.python string.quoted.raw.multi.python"
},
"fstring-raw-quoted-multi-line": {
"begin": "\\b([Rr][FfTt]|[FfTt][Rr])('''|\"\"\")",
"beginCaptures": {
"1": {
"name": "string.interpolated.python string.quoted.raw.multi.python storage.type.string.python"
},
"2": {
"name": "punctuation.definition.string.begin.python string.quoted.raw.multi.python"
}
},
"end": "(\\2)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.raw.multi.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.fstring.python",
"patterns": [
{
"include": "#fstring-raw-guts"
},
{
"include": "#fstring-illegal-multi-brace"
},
{
"include": "#fstring-multi-brace"
},
{
"include": "#fstring-raw-multi-core"
}
]
},
"fstring-raw-quoted-single-line": {
"begin": "\\b([Rr][FfTt]|[FfTt][Rr])(([\"']))",
"beginCaptures": {
"1": {
"name": "string.interpolated.python string.quoted.raw.single.python storage.type.string.python"
},
"2": {
"name": "punctuation.definition.string.begin.python string.quoted.raw.single.python"
}
},
"end": "(\\2)|((?<!\\\\)\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.raw.single.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.fstring.python",
"patterns": [
{
"include": "#fstring-raw-guts"
},
{
"include": "#fstring-illegal-single-brace"
},
{
"include": "#fstring-single-brace"
},
{
"include": "#fstring-raw-single-core"
}
]
},
"fstring-raw-single-core": {
"match": "(.+?)($(\\n?)|(?=[\\\\{}]|([\"'])|((?<!\\\\)\\n)))|\\n",
"name": "string.interpolated.python string.quoted.raw.single.python"
},
"fstring-single-brace": {
"begin": "(\\{)",
"beginCaptures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"end": "(})|(?=\\n)",
"endCaptures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"patterns": [
{
"include": "#fstring-terminator-single"
},
{
"include": "#f-expression"
}
]
},
"fstring-single-core": {
"match": "(.+?)($(\\n?)|(?=[\\\\{}]|([\"'])|((?<!\\\\)\\n)))|\\n",
"name": "string.interpolated.python string.quoted.single.python"
},
"fstring-terminator-multi": {
"patterns": [
{
"match": "(=(![ars])?)(?=})",
"name": "storage.type.format.python"
},
{
"match": "(=?![ars])(?=})",
"name": "storage.type.format.python"
},
{
"captures": {
"1": {
"name": "storage.type.format.python"
},
"2": {
"name": "storage.type.format.python"
}
},
"match": "(=?(?:![ars])?)(:\\w?[<=>^]?[- +]?#?\\d*,?(\\.\\d+)?[%EFGXb-gnosx]?)(?=})"
},
{
"include": "#fstring-terminator-multi-tail"
}
]
},
"fstring-terminator-multi-tail": {
"begin": "(=?(?:![ars])?)(:)(?=.*?\\{)",
"beginCaptures": {
"1": {
"name": "storage.type.format.python"
},
"2": {
"name": "storage.type.format.python"
}
},
"end": "(?=})",
"patterns": [
{
"include": "#fstring-illegal-multi-brace"
},
{
"include": "#fstring-multi-brace"
},
{
"match": "([%EFGXb-gnosx])(?=})",
"name": "storage.type.format.python"
},
{
"match": "(\\.\\d+)",
"name": "storage.type.format.python"
},
{
"match": "(,)",
"name": "storage.type.format.python"
},
{
"match": "(\\d+)",
"name": "storage.type.format.python"
},
{
"match": "(#)",
"name": "storage.type.format.python"
},
{
"match": "([- +])",
"name": "storage.type.format.python"
},
{
"match": "([<=>^])",
"name": "storage.type.format.python"
},
{
"match": "(\\w)",
"name": "storage.type.format.python"
}
]
},
"fstring-terminator-single": {
"patterns": [
{
"match": "(=(![ars])?)(?=})",
"name": "storage.type.format.python"
},
{
"match": "(=?![ars])(?=})",
"name": "storage.type.format.python"
},
{
"captures": {
"1": {
"name": "storage.type.format.python"
},
"2": {
"name": "storage.type.format.python"
}
},
"match": "(=?(?:![ars])?)(:\\w?[<=>^]?[- +]?#?\\d*,?(\\.\\d+)?[%EFGXb-gnosx]?)(?=})"
},
{
"include": "#fstring-terminator-single-tail"
}
]
},
"fstring-terminator-single-tail": {
"begin": "(=?(?:![ars])?)(:)(?=.*?\\{)",
"beginCaptures": {
"1": {
"name": "storage.type.format.python"
},
"2": {
"name": "storage.type.format.python"
}
},
"end": "(?=})|(?=\\n)",
"patterns": [
{
"include": "#fstring-illegal-single-brace"
},
{
"include": "#fstring-single-brace"
},
{
"match": "([%EFGXb-gnosx])(?=})",
"name": "storage.type.format.python"
},
{
"match": "(\\.\\d+)",
"name": "storage.type.format.python"
},
{
"match": "(,)",
"name": "storage.type.format.python"
},
{
"match": "(\\d+)",
"name": "storage.type.format.python"
},
{
"match": "(#)",
"name": "storage.type.format.python"
},
{
"match": "([- +])",
"name": "storage.type.format.python"
},
{
"match": "([<=>^])",
"name": "storage.type.format.python"
},
{
"match": "(\\w)",
"name": "storage.type.format.python"
}
]
},
"function-arguments": {
"begin": "(\\()",
"beginCaptures": {
"1": {
"name": "punctuation.definition.arguments.begin.python"
}
},
"contentName": "meta.function-call.arguments.python",
"end": "(?=\\))(?!\\)\\s*\\()",
"patterns": [
{
"match": "(,)",
"name": "punctuation.separator.arguments.python"
},
{
"captures": {
"1": {
"name": "keyword.operator.unpacking.arguments.python"
}
},
"match": "(?:(?<=[(,])|^)\\s*(\\*{1,2})"
},
{
"include": "#lambda-incomplete"
},
{
"include": "#illegal-names"
},
{
"captures": {
"1": {
"name": "variable.parameter.function-call.python"
},
"2": {
"name": "keyword.operator.assignment.python"
}
},
"match": "\\b([_[:alpha:]]\\w*)\\s*(=)(?!=)"
},
{
"match": "=(?!=)",
"name": "keyword.operator.assignment.python"
},
{
"include": "#expression"
},
{
"captures": {
"1": {
"name": "punctuation.definition.arguments.end.python"
},
"2": {
"name": "punctuation.definition.arguments.begin.python"
}
},
"match": "\\s*(\\))\\s*(\\()"
}
]
},
"function-call": {
"begin": "\\b(?=([_[:alpha:]]\\w*)\\s*(\\())",
"end": "(\\))",
"endCaptures": {
"1": {
"name": "punctuation.definition.arguments.end.python"
}
},
"name": "meta.function-call.python",
"patterns": [
{
"include": "#special-variables"
},
{
"include": "#function-name"
},
{
"include": "#function-arguments"
}
]
},
"function-declaration": {
"begin": "\\s*(?:\\b(async)\\s+)?\\b(def)\\s+(?=[_[:alpha:]]\\p{word}*\\s*\\()",
"beginCaptures": {
"1": {
"name": "storage.type.function.async.python"
},
"2": {
"name": "storage.type.function.python"
}
},
"end": "(:|(?=[\\n\"#']))",
"endCaptures": {
"1": {
"name": "punctuation.section.function.begin.python"
}
},
"name": "meta.function.python",
"patterns": [
{
"include": "#function-def-name"
},
{
"include": "#parameters"
},
{
"include": "#line-continuation"
},
{
"include": "#return-annotation"
}
]
},
"function-def-name": {
"patterns": [
{
"include": "#illegal-object-name"
},
{
"include": "#builtin-possible-callables"
},
{
"match": "\\b([_[:alpha:]]\\w*)\\b",
"name": "entity.name.function.python"
}
]
},
"function-name": {
"patterns": [
{
"include": "#builtin-possible-callables"
},
{
"match": "\\b([_[:alpha:]]\\w*)\\b",
"name": "meta.function-call.generic.python"
}
]
},
"generator": {
"begin": "\\bfor\\b",
"beginCaptures": {
"0": {
"name": "keyword.control.flow.python"
}
},
"end": "\\bin\\b",
"endCaptures": {
"0": {
"name": "keyword.control.flow.python"
}
},
"patterns": [
{
"include": "#expression"
}
]
},
"illegal-anno": {
"match": "->",
"name": "invalid.illegal.annotation.python"
},
"illegal-names": {
"captures": {
"1": {
"name": "keyword.control.flow.python"
},
"2": {
"name": "keyword.control.import.python"
}
},
"match": "\\b(?:(and|assert|async|await|break|class|continue|def|del|elif|else|except|finally|for|from|global|if|in|is|(?<=\\.)lambda|lambda(?=\\s*[.=])|nonlocal|not|or|pass|raise|return|try|while|with|yield)|(as|import))\\b"
},
"illegal-object-name": {
"match": "\\b(True|False|None)\\b",
"name": "keyword.illegal.name.python"
},
"illegal-operator": {
"patterns": [
{
"match": "&&|\\|\\||--|\\+\\+",
"name": "invalid.illegal.operator.python"
},
{
"match": "[$?]",
"name": "invalid.illegal.operator.python"
},
{
"match": "!\\b",
"name": "invalid.illegal.operator.python"
}
]
},
"import": {
"patterns": [
{
"begin": "\\b(?<!\\.)(from)\\b(?=.+import)",
"beginCaptures": {
"1": {
"name": "keyword.control.import.python"
}
},
"end": "$|(?=import)",
"patterns": [
{
"match": "\\.+",
"name": "punctuation.separator.period.python"
},
{
"include": "#expression"
}
]
},
{
"begin": "\\b(?<!\\.)(import)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.import.python"
}
},
"end": "$",
"patterns": [
{
"match": "\\b(?<!\\.)as\\b",
"name": "keyword.control.import.python"
},
{
"include": "#expression"
}
]
}
]
},
"impossible": {
"match": "$.^"
},
"inheritance-identifier": {
"captures": {
"1": {
"name": "entity.other.inherited-class.python"
}
},
"match": "\\b([_[:alpha:]]\\w*)\\b"
},
"inheritance-name": {
"patterns": [
{
"include": "#lambda-incomplete"
},
{
"include": "#builtin-possible-callables"
},
{
"include": "#inheritance-identifier"
}
]
},
"item-access": {
"patterns": [
{
"begin": "\\b(?=[_[:alpha:]]\\w*\\s*\\[)",
"end": "(])",
"endCaptures": {
"1": {
"name": "punctuation.definition.arguments.end.python"
}
},
"name": "meta.item-access.python",
"patterns": [
{
"include": "#item-name"
},
{
"include": "#item-index"
},
{
"include": "#expression"
}
]
}
]
},
"item-index": {
"begin": "(\\[)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.arguments.begin.python"
}
},
"contentName": "meta.item-access.arguments.python",
"end": "(?=])",
"patterns": [
{
"match": ":",
"name": "punctuation.separator.slice.python"
},
{
"include": "#expression"
}
]
},
"item-name": {
"patterns": [
{
"include": "#special-variables"
},
{
"include": "#builtin-functions"
},
{
"include": "#special-names"
},
{
"match": "\\b([_[:alpha:]]\\w*)\\b",
"name": "meta.indexed-name.python"
}
]
},
"lambda": {
"patterns": [
{
"captures": {
"1": {
"name": "keyword.control.flow.python"
}
},
"match": "((?<=\\.)lambda|lambda(?=\\s*[.=]))"
},
{
"captures": {
"1": {
"name": "storage.type.function.lambda.python"
}
},
"match": "\\b(lambda)\\s*?(?=[\\n,]|$)"
},
{
"begin": "\\b(lambda)\\b",
"beginCaptures": {
"1": {
"name": "storage.type.function.lambda.python"
}
},
"contentName": "meta.function.lambda.parameters.python",
"end": "(:)|(\\n)",
"endCaptures": {
"1": {
"name": "punctuation.section.function.lambda.begin.python"
}
},
"name": "meta.lambda-function.python",
"patterns": [
{
"match": "/",
"name": "keyword.operator.positional.parameter.python"
},
{
"match": "(\\*\\*?)",
"name": "keyword.operator.unpacking.parameter.python"
},
{
"include": "#lambda-nested-incomplete"
},
{
"include": "#illegal-names"
},
{
"captures": {
"1": {
"name": "variable.parameter.function.language.python"
},
"2": {
"name": "punctuation.separator.parameters.python"
}
},
"match": "([_[:alpha:]]\\w*)\\s*(?:(,)|(?=:|$))"
},
{
"include": "#comments"
},
{
"include": "#backticks"
},
{
"include": "#illegal-anno"
},
{
"include": "#lambda-parameter-with-default"
},
{
"include": "#line-continuation"
},
{
"include": "#illegal-operator"
}
]
}
]
},
"lambda-incomplete": {
"match": "\\blambda(?=\\s*[),])",
"name": "storage.type.function.lambda.python"
},
"lambda-nested-incomplete": {
"match": "\\blambda(?=\\s*[),:])",
"name": "storage.type.function.lambda.python"
},
"lambda-parameter-with-default": {
"begin": "\\b([_[:alpha:]]\\w*)\\s*(=)",
"beginCaptures": {
"1": {
"name": "variable.parameter.function.language.python"
},
"2": {
"name": "keyword.operator.python"
}
},
"end": "(,)|(?=:|$)",
"endCaptures": {
"1": {
"name": "punctuation.separator.parameters.python"
}
},
"patterns": [
{
"include": "#expression"
}
]
},
"line-continuation": {
"patterns": [
{
"captures": {
"1": {
"name": "punctuation.separator.continuation.line.python"
},
"2": {
"name": "invalid.illegal.line.continuation.python"
}
},
"match": "(\\\\)\\s*(\\S.*$\\n?)"
},
{
"begin": "(\\\\)\\s*$\\n?",
"beginCaptures": {
"1": {
"name": "punctuation.separator.continuation.line.python"
}
},
"end": "(?=^\\s*$)|(?!(\\s*[Rr]?('''|\"\"\"|[\"']))|\\G()$)",
"patterns": [
{
"include": "#regexp"
},
{
"include": "#string"
}
]
}
]
},
"list": {
"begin": "\\[",
"beginCaptures": {
"0": {
"name": "punctuation.definition.list.begin.python"
}
},
"end": "]",
"endCaptures": {
"0": {
"name": "punctuation.definition.list.end.python"
}
},
"patterns": [
{
"include": "#expression"
}
]
},
"literal": {
"patterns": [
{
"match": "\\b(True|False|None|NotImplemented|Ellipsis)\\b",
"name": "constant.language.python"
},
{
"include": "#number"
}
]
},
"loose-default": {
"begin": "(=)",
"beginCaptures": {
"1": {
"name": "keyword.operator.python"
}
},
"end": "(,)|(?=\\))",
"endCaptures": {
"1": {
"name": "punctuation.separator.parameters.python"
}
},
"patterns": [
{
"include": "#expression"
}
]
},
"magic-function-names": {
"captures": {
"1": {
"name": "support.function.magic.python"
}
},
"match": "\\b(__(?:abs|add|aenter|aexit|aiter|and|anext|await|bool|call|ceil|class_getitem|cmp|coerce|complex|contains|copy|deepcopy|del|delattr|delete|delitem|delslice|dir|div|divmod|enter|eq|exit|float|floor|floordiv|format|get??|getattr|getattribute|getinitargs|getitem|getnewargs|getslice|getstate|gt|hash|hex|iadd|iand|idiv|ifloordiv||ilshift|imod|imul|index|init|instancecheck|int|invert|ior|ipow|irshift|isub|iter|itruediv|ixor|len??|long|lshift|lt|missing|mod|mul|neg??|new|next|nonzero|oct|or|pos|pow|radd|rand|rdiv|rdivmod|reduce|reduce_ex|repr|reversed|rfloordiv||rlshift|rmod|rmul|ror|round|rpow|rrshift|rshift|rsub|rtruediv|rxor|set|setattr|setitem|set_name|setslice|setstate|sizeof|str|sub|subclasscheck|truediv|trunc|unicode|xor|matmul|rmatmul|imatmul|init_subclass|set_name|fspath|bytes|prepare|length_hint)__)\\b"
},
"magic-names": {
"patterns": [
{
"include": "#magic-function-names"
},
{
"include": "#magic-variable-names"
}
]
},
"magic-variable-names": {
"captures": {
"1": {
"name": "support.variable.magic.python"
}
},
"match": "\\b(__(?:all|annotations|bases|builtins|class|closure|code|debug|defaults|dict|doc|file|func|globals|kwdefaults|match_args|members|metaclass|methods|module|mro|mro_entries|name|qualname|post_init|self|signature|slots|subclasses|version|weakref|wrapped|classcell|spec|path|package|future|traceback)__)\\b"
},
"member-access": {
"begin": "(\\.)\\s*(?!\\.)",
"beginCaptures": {
"1": {
"name": "punctuation.separator.period.python"
}
},
"end": "(?<=\\S)(?=\\W)|(^|(?<=\\s))(?=[^\\\\\\w\\s])|$",
"name": "meta.member.access.python",
"patterns": [
{
"include": "#function-call"
},
{
"include": "#member-access-base"
},
{
"include": "#member-access-attribute"
}
]
},
"member-access-attribute": {
"match": "\\b([_[:alpha:]]\\w*)\\b",
"name": "meta.attribute.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*(?!\\.)",
"beginCaptures": {
"1": {
"name": "punctuation.separator.period.python"
}
},
"end": "(?<=\\S)(?=\\W)|$",
"name": "meta.member.access.python",
"patterns": [
{
"include": "#call-wrapper-inheritance"
},
{
"include": "#member-access-base"
},
{
"include": "#inheritance-identifier"
}
]
},
"number": {
"name": "constant.numeric.python",
"patterns": [
{
"include": "#number-float"
},
{
"include": "#number-dec"
},
{
"include": "#number-hex"
},
{
"include": "#number-oct"
},
{
"include": "#number-bin"
},
{
"include": "#number-long"
},
{
"match": "\\b[0-9]+\\w+",
"name": "invalid.illegal.name.python"
}
]
},
"number-bin": {
"captures": {
"1": {
"name": "storage.type.number.python"
}
},
"match": "(?<![.\\w])(0[Bb])(_?[01])+\\b",
"name": "constant.numeric.bin.python"
},
"number-dec": {
"captures": {
"1": {
"name": "storage.type.imaginary.number.python"
},
"2": {
"name": "invalid.illegal.dec.python"
}
},
"match": "(?<![.\\w])(?:[1-9](?:_?[0-9])*|0+|[0-9](?:_?[0-9])*([Jj])|0([0-9]+)(?![.Ee]))\\b",
"name": "constant.numeric.dec.python"
},
"number-float": {
"captures": {
"1": {
"name": "storage.type.imaginary.number.python"
}
},
"match": "(?<!\\w)(?:(?:\\.[0-9](?:_?[0-9])*|[0-9](?:_?[0-9])*\\.[0-9](?:_?[0-9])*|[0-9](?:_?[0-9])*\\.)(?:[Ee][-+]?[0-9](?:_?[0-9])*)?|[0-9](?:_?[0-9])*[Ee][-+]?[0-9](?:_?[0-9])*)([Jj])?\\b",
"name": "constant.numeric.float.python"
},
"number-hex": {
"captures": {
"1": {
"name": "storage.type.number.python"
}
},
"match": "(?<![.\\w])(0[Xx])(_?\\h)+\\b",
"name": "constant.numeric.hex.python"
},
"number-long": {
"captures": {
"2": {
"name": "storage.type.number.python"
}
},
"match": "(?<![.\\w])([1-9][0-9]*|0)([Ll])\\b",
"name": "constant.numeric.bin.python"
},
"number-oct": {
"captures": {
"1": {
"name": "storage.type.number.python"
}
},
"match": "(?<![.\\w])(0[Oo])(_?[0-7])+\\b",
"name": "constant.numeric.oct.python"
},
"odd-function-call": {
"begin": "(?<=[])])\\s*(?=\\()",
"end": "(\\))",
"endCaptures": {
"1": {
"name": "punctuation.definition.arguments.end.python"
}
},
"patterns": [
{
"include": "#function-arguments"
}
]
},
"operator": {
"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"
},
"6": {
"name": "keyword.operator.assignment.python"
}
},
"match": "\\b(?<!\\.)(?:(and|or|not|in|is)|(for|if|else|await|yield(?:\\s+from)?))(?!\\s*:)\\b|(<<|>>|[\\&^|~])|(\\*\\*|[-%*+]|//|[/@])|(!=|==|>=|<=|[<>])|(:=)"
},
"parameter-special": {
"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"
}
},
"match": "\\b((self)|(cls))\\b\\s*(?:(,)|(?=\\)))"
},
"parameters": {
"begin": "(\\()",
"beginCaptures": {
"1": {
"name": "punctuation.definition.parameters.begin.python"
}
},
"end": "(\\))",
"endCaptures": {
"1": {
"name": "punctuation.definition.parameters.end.python"
}
},
"name": "meta.function.parameters.python",
"patterns": [
{
"match": "/",
"name": "keyword.operator.positional.parameter.python"
},
{
"match": "(\\*\\*?)",
"name": "keyword.operator.unpacking.parameter.python"
},
{
"include": "#lambda-incomplete"
},
{
"include": "#illegal-names"
},
{
"include": "#illegal-object-name"
},
{
"include": "#parameter-special"
},
{
"captures": {
"1": {
"name": "variable.parameter.function.language.python"
},
"2": {
"name": "punctuation.separator.parameters.python"
}
},
"match": "([_[:alpha:]]\\w*)\\s*(?:(,)|(?=[\\n#)=]))"
},
{
"include": "#comments"
},
{
"include": "#loose-default"
},
{
"include": "#annotated-parameter"
}
]
},
"punctuation": {
"patterns": [
{
"match": ":",
"name": "punctuation.separator.colon.python"
},
{
"match": ",",
"name": "punctuation.separator.element.python"
}
]
},
"regexp": {
"patterns": [
{
"include": "#regexp-single-three-line"
},
{
"include": "#regexp-double-three-line"
},
{
"include": "#regexp-single-one-line"
},
{
"include": "#regexp-double-one-line"
}
]
},
"regexp-backreference": {
"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"
}
},
"match": "(\\()(\\?P=\\w+(?:\\s+\\p{alnum}+)?)(\\))",
"name": "meta.backreference.named.regexp"
},
"regexp-backreference-number": {
"captures": {
"1": {
"name": "entity.name.tag.backreference.regexp"
}
},
"match": "(\\\\[1-9]\\d?)",
"name": "meta.backreference.regexp"
},
"regexp-base-common": {
"patterns": [
{
"match": "\\.",
"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"
},
{
"include": "#regexp-escape-sequence"
}
]
},
"regexp-base-expression": {
"patterns": [
{
"include": "#regexp-quantifier"
},
{
"include": "#regexp-base-common"
}
]
},
"regexp-charecter-set-escapes": {
"patterns": [
{
"match": "\\\\[\\\\abfnrtv]",
"name": "constant.character.escape.regexp"
},
{
"include": "#regexp-escape-special"
},
{
"match": "\\\\([0-7]{1,3})",
"name": "constant.character.escape.regexp"
},
{
"include": "#regexp-escape-character"
},
{
"include": "#regexp-escape-unicode"
},
{
"include": "#regexp-escape-catchall"
}
]
},
"regexp-double-one-line": {
"begin": "\\b(([Uu]r)|([Bb]r)|(r[Bb]?))(\")",
"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"
}
},
"end": "(\")|(?<!\\\\)(\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "string.regexp.quoted.single.python",
"patterns": [
{
"include": "#double-one-regexp-expression"
}
]
},
"regexp-double-three-line": {
"begin": "\\b(([Uu]r)|([Bb]r)|(r[Bb]?))(\"\"\")",
"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"
}
},
"end": "(\"\"\")",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "string.regexp.quoted.multi.python",
"patterns": [
{
"include": "#double-three-regexp-expression"
}
]
},
"regexp-escape-catchall": {
"match": "\\\\(.|\\n)",
"name": "constant.character.escape.regexp"
},
"regexp-escape-character": {
"match": "\\\\(x\\h{2}|0[0-7]{1,2}|[0-7]{3})",
"name": "constant.character.escape.regexp"
},
"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": {
"match": "\\\\([ABDSWZbdsw])",
"name": "support.other.escape.special.regexp"
},
"regexp-escape-unicode": {
"match": "\\\\(u\\h{4}|U\\h{8})",
"name": "constant.character.unicode.regexp"
},
"regexp-flags": {
"match": "\\(\\?[Laimsux]+\\)",
"name": "storage.modifier.flag.regexp"
},
"regexp-quantifier": {
"match": "\\{(\\d+|\\d+,(\\d+)?|,\\d+)}",
"name": "keyword.operator.quantifier.regexp"
},
"regexp-single-one-line": {
"begin": "\\b(([Uu]r)|([Bb]r)|(r[Bb]?))(')",
"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"
}
},
"end": "(')|(?<!\\\\)(\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "string.regexp.quoted.single.python",
"patterns": [
{
"include": "#single-one-regexp-expression"
}
]
},
"regexp-single-three-line": {
"begin": "\\b(([Uu]r)|([Bb]r)|(r[Bb]?))(''')",
"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"
}
},
"end": "(''')",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "string.regexp.quoted.multi.python",
"patterns": [
{
"include": "#single-three-regexp-expression"
}
]
},
"return-annotation": {
"begin": "(->)",
"beginCaptures": {
"1": {
"name": "punctuation.separator.annotation.result.python"
}
},
"end": "(?=:)",
"patterns": [
{
"include": "#expression"
}
]
},
"round-braces": {
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "punctuation.parenthesis.begin.python"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.parenthesis.end.python"
}
},
"patterns": [
{
"include": "#expression"
}
]
},
"semicolon": {
"patterns": [
{
"match": ";$",
"name": "invalid.deprecated.semicolon.python"
}
]
},
"single-one-regexp-character-set": {
"patterns": [
{
"match": "\\[\\^?](?!.*?])"
},
{
"begin": "(\\[)(\\^)?(])?",
"beginCaptures": {
"1": {
"name": "punctuation.character.set.begin.regexp constant.other.set.regexp"
},
"2": {
"name": "keyword.operator.negation.regexp"
},
"3": {
"name": "constant.character.set.regexp"
}
},
"end": "(]|(?='))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "punctuation.character.set.end.regexp constant.other.set.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.character.set.regexp",
"patterns": [
{
"include": "#regexp-charecter-set-escapes"
},
{
"match": "\\N",
"name": "constant.character.set.regexp"
}
]
}
]
},
"single-one-regexp-comments": {
"begin": "\\(\\?#",
"beginCaptures": {
"0": {
"name": "punctuation.comment.begin.regexp"
}
},
"end": "(\\)|(?='))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "punctuation.comment.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "comment.regexp",
"patterns": [
{
"include": "#codetags"
}
]
},
"single-one-regexp-conditional": {
"begin": "(\\()\\?\\((\\w+(?:\\s+\\p{alnum}+)?|\\d+)\\)",
"beginCaptures": {
"0": {
"name": "keyword.operator.conditional.regexp"
},
"1": {
"name": "punctuation.parenthesis.conditional.begin.regexp"
}
},
"end": "(\\)|(?='))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#single-one-regexp-expression"
}
]
},
"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": "(\\()\\?=",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookahead.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookahead.begin.regexp"
}
},
"end": "(\\)|(?='))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#single-one-regexp-expression"
}
]
},
"single-one-regexp-lookahead-negative": {
"begin": "(\\()\\?!",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookahead.negative.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookahead.begin.regexp"
}
},
"end": "(\\)|(?='))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#single-one-regexp-expression"
}
]
},
"single-one-regexp-lookbehind": {
"begin": "(\\()\\?<=",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookbehind.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookbehind.begin.regexp"
}
},
"end": "(\\)|(?='))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#single-one-regexp-expression"
}
]
},
"single-one-regexp-lookbehind-negative": {
"begin": "(\\()\\?<!",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookbehind.negative.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookbehind.begin.regexp"
}
},
"end": "(\\)|(?='))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#single-one-regexp-expression"
}
]
},
"single-one-regexp-named-group": {
"begin": "(\\()(\\?P<\\w+(?:\\s+\\p{alnum}+)?>)",
"beginCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp"
},
"2": {
"name": "entity.name.tag.named.group.regexp"
}
},
"end": "(\\)|(?='))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.named.regexp",
"patterns": [
{
"include": "#single-one-regexp-expression"
}
]
},
"single-one-regexp-parentheses": {
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp"
}
},
"end": "(\\)|(?='))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#single-one-regexp-expression"
}
]
},
"single-one-regexp-parentheses-non-capturing": {
"begin": "\\(\\?:",
"beginCaptures": {
"0": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp"
}
},
"end": "(\\)|(?='))|((?=(?<!\\\\)\\n))",
"endCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#single-one-regexp-expression"
}
]
},
"single-three-regexp-character-set": {
"patterns": [
{
"match": "\\[\\^?](?!.*?])"
},
{
"begin": "(\\[)(\\^)?(])?",
"beginCaptures": {
"1": {
"name": "punctuation.character.set.begin.regexp constant.other.set.regexp"
},
"2": {
"name": "keyword.operator.negation.regexp"
},
"3": {
"name": "constant.character.set.regexp"
}
},
"end": "(]|(?='''))",
"endCaptures": {
"1": {
"name": "punctuation.character.set.end.regexp constant.other.set.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.character.set.regexp",
"patterns": [
{
"include": "#regexp-charecter-set-escapes"
},
{
"match": "\\N",
"name": "constant.character.set.regexp"
}
]
}
]
},
"single-three-regexp-comments": {
"begin": "\\(\\?#",
"beginCaptures": {
"0": {
"name": "punctuation.comment.begin.regexp"
}
},
"end": "(\\)|(?='''))",
"endCaptures": {
"1": {
"name": "punctuation.comment.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "comment.regexp",
"patterns": [
{
"include": "#codetags"
}
]
},
"single-three-regexp-conditional": {
"begin": "(\\()\\?\\((\\w+(?:\\s+\\p{alnum}+)?|\\d+)\\)",
"beginCaptures": {
"0": {
"name": "keyword.operator.conditional.regexp"
},
"1": {
"name": "punctuation.parenthesis.conditional.begin.regexp"
}
},
"end": "(\\)|(?='''))",
"endCaptures": {
"1": {
"name": "keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#single-three-regexp-expression"
},
{
"include": "#comments-string-single-three"
}
]
},
"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": "(\\()\\?=",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookahead.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookahead.begin.regexp"
}
},
"end": "(\\)|(?='''))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#single-three-regexp-expression"
},
{
"include": "#comments-string-single-three"
}
]
},
"single-three-regexp-lookahead-negative": {
"begin": "(\\()\\?!",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookahead.negative.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookahead.begin.regexp"
}
},
"end": "(\\)|(?='''))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#single-three-regexp-expression"
},
{
"include": "#comments-string-single-three"
}
]
},
"single-three-regexp-lookbehind": {
"begin": "(\\()\\?<=",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookbehind.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookbehind.begin.regexp"
}
},
"end": "(\\)|(?='''))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#single-three-regexp-expression"
},
{
"include": "#comments-string-single-three"
}
]
},
"single-three-regexp-lookbehind-negative": {
"begin": "(\\()\\?<!",
"beginCaptures": {
"0": {
"name": "keyword.operator.lookbehind.negative.regexp"
},
"1": {
"name": "punctuation.parenthesis.lookbehind.begin.regexp"
}
},
"end": "(\\)|(?='''))",
"endCaptures": {
"1": {
"name": "keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#single-three-regexp-expression"
},
{
"include": "#comments-string-single-three"
}
]
},
"single-three-regexp-named-group": {
"begin": "(\\()(\\?P<\\w+(?:\\s+\\p{alnum}+)?>)",
"beginCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp"
},
"2": {
"name": "entity.name.tag.named.group.regexp"
}
},
"end": "(\\)|(?='''))",
"endCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.named.regexp",
"patterns": [
{
"include": "#single-three-regexp-expression"
},
{
"include": "#comments-string-single-three"
}
]
},
"single-three-regexp-parentheses": {
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp"
}
},
"end": "(\\)|(?='''))",
"endCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#single-three-regexp-expression"
},
{
"include": "#comments-string-single-three"
}
]
},
"single-three-regexp-parentheses-non-capturing": {
"begin": "\\(\\?:",
"beginCaptures": {
"0": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp"
}
},
"end": "(\\)|(?='''))",
"endCaptures": {
"1": {
"name": "support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"patterns": [
{
"include": "#single-three-regexp-expression"
},
{
"include": "#comments-string-single-three"
}
]
},
"special-names": {
"match": "\\b(_*\\p{upper}[_\\d]*\\p{upper})[[:upper:]\\d]*(_\\w*)?\\b",
"name": "constant.other.caps.python"
},
"special-variables": {
"captures": {
"1": {
"name": "variable.language.special.self.python"
},
"2": {
"name": "variable.language.special.cls.python"
}
},
"match": "\\b(?<!\\.)(?:(self)|(cls))\\b"
},
"statement": {
"patterns": [
{
"include": "#import"
},
{
"include": "#class-declaration"
},
{
"include": "#function-declaration"
},
{
"include": "#generator"
},
{
"include": "#statement-keyword"
},
{
"include": "#assignment-operator"
},
{
"include": "#decorator"
},
{
"include": "#docstring-statement"
},
{
"include": "#semicolon"
}
]
},
"statement-keyword": {
"patterns": [
{
"match": "\\b((async\\s+)?\\s*def)\\b",
"name": "storage.type.function.python"
},
{
"match": "\\b(?<!\\.)as\\b(?=.*[:\\\\])",
"name": "keyword.control.flow.python"
},
{
"match": "\\b(?<!\\.)as\\b",
"name": "keyword.control.import.python"
},
{
"match": "\\b(?<!\\.)(async|continue|del|assert|break|finally|for|from|elif|else|if|except|pass|raise|return|try|while|with)\\b",
"name": "keyword.control.flow.python"
},
{
"match": "\\b(?<!\\.)(global|nonlocal)\\b",
"name": "storage.modifier.declaration.python"
},
{
"match": "\\b(?<!\\.)(class)\\b",
"name": "storage.type.class.python"
},
{
"captures": {
"1": {
"name": "keyword.control.flow.python"
}
},
"match": "^\\s*(case|match)(?=\\s*([-\"#'(+:\\[{\\w\\d]|$))\\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": {
"begin": "\\b([Bb])('''|\"\"\")",
"beginCaptures": {
"1": {
"name": "storage.type.string.python"
},
"2": {
"name": "punctuation.definition.string.begin.python"
}
},
"end": "(\\2)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "string.quoted.binary.multi.python",
"patterns": [
{
"include": "#string-entity"
}
]
},
"string-bin-quoted-single-line": {
"begin": "\\b([Bb])(([\"']))",
"beginCaptures": {
"1": {
"name": "storage.type.string.python"
},
"2": {
"name": "punctuation.definition.string.begin.python"
}
},
"end": "(\\2)|((?<!\\\\)\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "string.quoted.binary.single.python",
"patterns": [
{
"include": "#string-entity"
}
]
},
"string-brace-formatting": {
"patterns": [
{
"captures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
},
"3": {
"name": "storage.type.format.python"
},
"4": {
"name": "storage.type.format.python"
}
},
"match": "(\\{\\{|}}|\\{\\w*(\\.[_[:alpha:]]\\w*|\\[[^]\"']+])*(![ars])?(:\\w?[<=>^]?[- +]?#?\\d*,?(\\.\\d+)?[%EFGXb-gnosx]?)?})",
"name": "meta.format.brace.python"
},
{
"captures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
},
"3": {
"name": "storage.type.format.python"
},
"4": {
"name": "storage.type.format.python"
}
},
"match": "(\\{\\w*(\\.[_[:alpha:]]\\w*|\\[[^]\"']+])*(![ars])?(:)[^\\n\"'{}]*(?:\\{[^\\n\"'}]*?}[^\\n\"'{}]*)*})",
"name": "meta.format.brace.python"
}
]
},
"string-consume-escape": {
"match": "\\\\[\\n\"'\\\\]"
},
"string-entity": {
"patterns": [
{
"include": "#escape-sequence"
},
{
"include": "#string-line-continuation"
},
{
"include": "#string-formatting"
}
]
},
"string-formatting": {
"captures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"match": "(%(\\([\\w\\s]*\\))?[- #+0]*(\\d+|\\*)?(\\.(\\d+|\\*))?([Lhl])?[%EFGXa-giorsux])",
"name": "meta.format.percent.python"
},
"string-line-continuation": {
"match": "\\\\$",
"name": "constant.language.python"
},
"string-multi-bad-brace1-formatting-raw": {
"begin": "(?=\\{%(.*?(?!'''|\"\"\"))%})",
"end": "(?='''|\"\"\")",
"patterns": [
{
"include": "#string-consume-escape"
}
]
},
"string-multi-bad-brace1-formatting-unicode": {
"begin": "(?=\\{%(.*?(?!'''|\"\"\"))%})",
"end": "(?='''|\"\"\")",
"patterns": [
{
"include": "#escape-sequence-unicode"
},
{
"include": "#escape-sequence"
},
{
"include": "#string-line-continuation"
}
]
},
"string-multi-bad-brace2-formatting-raw": {
"begin": "(?!\\{\\{)(?=\\{(\\w*?(?!'''|\"\"\")[^!.:\\[}\\w]).*?(?!'''|\"\"\")})",
"end": "(?='''|\"\"\")",
"patterns": [
{
"include": "#string-consume-escape"
},
{
"include": "#string-formatting"
}
]
},
"string-multi-bad-brace2-formatting-unicode": {
"begin": "(?!\\{\\{)(?=\\{(\\w*?(?!'''|\"\"\")[^!.:\\[}\\w]).*?(?!'''|\"\"\")})",
"end": "(?='''|\"\"\")",
"patterns": [
{
"include": "#escape-sequence-unicode"
},
{
"include": "#string-entity"
}
]
},
"string-quoted-multi-line": {
"begin": "(?:\\b([Rr])(?=[Uu]))?([Uu])?('''|\"\"\")",
"beginCaptures": {
"1": {
"name": "invalid.illegal.prefix.python"
},
"2": {
"name": "storage.type.string.python"
},
"3": {
"name": "punctuation.definition.string.begin.python"
}
},
"end": "(\\3)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "string.quoted.multi.python",
"patterns": [
{
"include": "#string-multi-bad-brace1-formatting-unicode"
},
{
"include": "#string-multi-bad-brace2-formatting-unicode"
},
{
"include": "#string-unicode-guts"
}
]
},
"string-quoted-single-line": {
"begin": "(?:\\b([Rr])(?=[Uu]))?([Uu])?(([\"']))",
"beginCaptures": {
"1": {
"name": "invalid.illegal.prefix.python"
},
"2": {
"name": "storage.type.string.python"
},
"3": {
"name": "punctuation.definition.string.begin.python"
}
},
"end": "(\\3)|((?<!\\\\)\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "string.quoted.single.python",
"patterns": [
{
"include": "#string-single-bad-brace1-formatting-unicode"
},
{
"include": "#string-single-bad-brace2-formatting-unicode"
},
{
"include": "#string-unicode-guts"
}
]
},
"string-raw-bin-guts": {
"patterns": [
{
"include": "#string-consume-escape"
},
{
"include": "#string-formatting"
}
]
},
"string-raw-bin-quoted-multi-line": {
"begin": "\\b(R[Bb]|[Bb]R)('''|\"\"\")",
"beginCaptures": {
"1": {
"name": "storage.type.string.python"
},
"2": {
"name": "punctuation.definition.string.begin.python"
}
},
"end": "(\\2)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "string.quoted.raw.binary.multi.python",
"patterns": [
{
"include": "#string-raw-bin-guts"
}
]
},
"string-raw-bin-quoted-single-line": {
"begin": "\\b(R[Bb]|[Bb]R)(([\"']))",
"beginCaptures": {
"1": {
"name": "storage.type.string.python"
},
"2": {
"name": "punctuation.definition.string.begin.python"
}
},
"end": "(\\2)|((?<!\\\\)\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "string.quoted.raw.binary.single.python",
"patterns": [
{
"include": "#string-raw-bin-guts"
}
]
},
"string-raw-guts": {
"patterns": [
{
"include": "#string-consume-escape"
},
{
"include": "#string-formatting"
},
{
"include": "#string-brace-formatting"
}
]
},
"string-raw-quoted-multi-line": {
"begin": "\\b(([Uu]R)|(R))('''|\"\"\")",
"beginCaptures": {
"2": {
"name": "invalid.deprecated.prefix.python"
},
"3": {
"name": "storage.type.string.python"
},
"4": {
"name": "punctuation.definition.string.begin.python"
}
},
"end": "(\\4)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "string.quoted.raw.multi.python",
"patterns": [
{
"include": "#string-multi-bad-brace1-formatting-raw"
},
{
"include": "#string-multi-bad-brace2-formatting-raw"
},
{
"include": "#string-raw-guts"
}
]
},
"string-raw-quoted-single-line": {
"begin": "\\b(([Uu]R)|(R))(([\"']))",
"beginCaptures": {
"2": {
"name": "invalid.deprecated.prefix.python"
},
"3": {
"name": "storage.type.string.python"
},
"4": {
"name": "punctuation.definition.string.begin.python"
}
},
"end": "(\\4)|((?<!\\\\)\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "string.quoted.raw.single.python",
"patterns": [
{
"include": "#string-single-bad-brace1-formatting-raw"
},
{
"include": "#string-single-bad-brace2-formatting-raw"
},
{
"include": "#string-raw-guts"
}
]
},
"string-single-bad-brace1-formatting-raw": {
"begin": "(?=\\{%(.*?(?!([\"'])|((?<!\\\\)\\n)))%})",
"end": "(?=([\"'])|((?<!\\\\)\\n))",
"patterns": [
{
"include": "#string-consume-escape"
}
]
},
"string-single-bad-brace1-formatting-unicode": {
"begin": "(?=\\{%(.*?(?!([\"'])|((?<!\\\\)\\n)))%})",
"end": "(?=([\"'])|((?<!\\\\)\\n))",
"patterns": [
{
"include": "#escape-sequence-unicode"
},
{
"include": "#escape-sequence"
},
{
"include": "#string-line-continuation"
}
]
},
"string-single-bad-brace2-formatting-raw": {
"begin": "(?!\\{\\{)(?=\\{(\\w*?(?!([\"'])|((?<!\\\\)\\n))[^!.:\\[}\\w]).*?(?!([\"'])|((?<!\\\\)\\n))})",
"end": "(?=([\"'])|((?<!\\\\)\\n))",
"patterns": [
{
"include": "#string-consume-escape"
},
{
"include": "#string-formatting"
}
]
},
"string-single-bad-brace2-formatting-unicode": {
"begin": "(?!\\{\\{)(?=\\{(\\w*?(?!([\"'])|((?<!\\\\)\\n))[^!.:\\[}\\w]).*?(?!([\"'])|((?<!\\\\)\\n))})",
"end": "(?=([\"'])|((?<!\\\\)\\n))",
"patterns": [
{
"include": "#escape-sequence-unicode"
},
{
"include": "#string-entity"
}
]
},
"string-unicode-guts": {
"patterns": [
{
"include": "#escape-sequence-unicode"
},
{
"include": "#string-entity"
},
{
"include": "#string-brace-formatting"
}
]
}
},
"scopeName": "source.python"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment