Created
May 15, 2025 21:47
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"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