tm-grammars
Version:
Collecton of TextMate grammars in JSON
1,923 lines (1,922 loc) • 108 kB
JSON
{
"displayName": "Python",
"name": "python",
"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([Ff])([BUbu])?('''|\"\"\")",
"beginCaptures": {
"1": {
"name": "string.interpolated.python string.quoted.multi.python storage.type.string.python"
},
"2": {
"name": "invalid.illegal.prefix.python"
},
"3": {
"name": "punctuation.definition.string.begin.python string.interpolated.python string.quoted.multi.python"
}
},
"end": "(\\3)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.multi.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.fstring.python",
"patterns": [
{
"include": "#fstring-guts"
},
{
"include": "#fstring-illegal-multi-brace"
},
{
"include": "#fstring-multi-brace"
},
{
"include": "#fstring-multi-core"
}
]
},
"fstring-fnorm-quoted-single-line": {
"begin": "\\b([Ff])([BUbu])?(([\"']))",
"beginCaptures": {
"1": {
"name": "string.interpolated.python string.quoted.single.python storage.type.string.python"
},
"2": {
"name": "invalid.illegal.prefix.python"
},
"3": {
"name": "punctuation.definition.string.begin.python string.interpolated.python string.quoted.single.python"
}
},
"end": "(\\3)|((?<!\\\\)\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.single.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.fstring.python",
"patterns": [
{
"include": "#fstring-guts"
},
{
"include": "#fstring-illegal-single-brace"
},
{
"include": "#fstring-single-brace"
},
{
"include": "#fstring-single-core"
}
]
},
"fstring-formatting": {
"patterns": [
{
"include": "#fstring-formatting-braces"
},
{
"include": "#fstring-formatting-singe-brace"
}
]
},
"fstring-formatting-braces": {
"patterns": [
{
"captures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
},
"2": {
"name": "invalid.illegal.brace.python"
},
"3": {
"name": "constant.character.format.placeholder.other.python"
}
},
"match": "(\\{)(\\s*?)(})"
},
{
"match": "(\\{\\{|}})",
"name": "constant.character.escape.python"
}
]
},
"fstring-formatting-singe-brace": {
"match": "(}(?!}))",
"name": "invalid.illegal.brace.python"
},
"fstring-guts": {
"patterns": [
{
"include": "#escape-sequence-unicode"
},
{
"include": "#escape-sequence"
},
{
"include": "#string-line-continuation"
},
{
"include": "#fstring-formatting"
}
]
},
"fstring-illegal-multi-brace": {
"patterns": [
{
"include": "#impossible"
}
]
},
"fstring-illegal-single-brace": {
"begin": "(\\{)(?=[^\\n}]*$\\n?)",
"beginCaptures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"end": "(})|(?=\\n)",
"endCaptures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"patterns": [
{
"include": "#fstring-terminator-single"
},
{
"include": "#f-expression"
}
]
},
"fstring-multi-brace": {
"begin": "(\\{)",
"beginCaptures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"end": "(})",
"endCaptures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"patterns": [
{
"include": "#fstring-terminator-multi"
},
{
"include": "#f-expression"
}
]
},
"fstring-multi-core": {
"match": "(.+?)($(\\n?)|(?=[\\\\{}]|'''|\"\"\"))|\\n",
"name": "string.interpolated.python string.quoted.multi.python"
},
"fstring-normf-quoted-multi-line": {
"begin": "\\b([BUbu])([Ff])('''|\"\"\")",
"beginCaptures": {
"1": {
"name": "invalid.illegal.prefix.python"
},
"2": {
"name": "string.interpolated.python string.quoted.multi.python storage.type.string.python"
},
"3": {
"name": "punctuation.definition.string.begin.python string.quoted.multi.python"
}
},
"end": "(\\3)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.multi.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.fstring.python",
"patterns": [
{
"include": "#fstring-guts"
},
{
"include": "#fstring-illegal-multi-brace"
},
{
"include": "#fstring-multi-brace"
},
{
"include": "#fstring-multi-core"
}
]
},
"fstring-normf-quoted-single-line": {
"begin": "\\b([BUbu])([Ff])(([\"']))",
"beginCaptures": {
"1": {
"name": "invalid.illegal.prefix.python"
},
"2": {
"name": "string.interpolated.python string.quoted.single.python storage.type.string.python"
},
"3": {
"name": "punctuation.definition.string.begin.python string.quoted.single.python"
}
},
"end": "(\\3)|((?<!\\\\)\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.single.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.fstring.python",
"patterns": [
{
"include": "#fstring-guts"
},
{
"include": "#fstring-illegal-single-brace"
},
{
"include": "#fstring-single-brace"
},
{
"include": "#fstring-single-core"
}
]
},
"fstring-raw-guts": {
"patterns": [
{
"include": "#string-consume-escape"
},
{
"include": "#fstring-formatting"
}
]
},
"fstring-raw-multi-core": {
"match": "(.+?)($(\\n?)|(?=[\\\\{}]|'''|\"\"\"))|\\n",
"name": "string.interpolated.python string.quoted.raw.multi.python"
},
"fstring-raw-quoted-multi-line": {
"begin": "\\b([Rr][Ff]|[Ff][Rr])('''|\"\"\")",
"beginCaptures": {
"1": {
"name": "string.interpolated.python string.quoted.raw.multi.python storage.type.string.python"
},
"2": {
"name": "punctuation.definition.string.begin.python string.quoted.raw.multi.python"
}
},
"end": "(\\2)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.raw.multi.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.fstring.python",
"patterns": [
{
"include": "#fstring-raw-guts"
},
{
"include": "#fstring-illegal-multi-brace"
},
{
"include": "#fstring-multi-brace"
},
{
"include": "#fstring-raw-multi-core"
}
]
},
"fstring-raw-quoted-single-line": {
"begin": "\\b([Rr][Ff]|[Ff][Rr])(([\"']))",
"beginCaptures": {
"1": {
"name": "string.interpolated.python string.quoted.raw.single.python storage.type.string.python"
},
"2": {
"name": "punctuation.definition.string.begin.python string.quoted.raw.single.python"
}
},
"end": "(\\2)|((?<!\\\\)\\n)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.python string.interpolated.python string.quoted.raw.single.python"
},
"2": {
"name": "invalid.illegal.newline.python"
}
},
"name": "meta.fstring.python",
"patterns": [
{
"include": "#fstring-raw-guts"
},
{
"include": "#fstring-illegal-single-brace"
},
{
"include": "#fstring-single-brace"
},
{
"include": "#fstring-raw-single-core"
}
]
},
"fstring-raw-single-core": {
"match": "(.+?)($(\\n?)|(?=[\\\\{}]|([\"'])|((?<!\\\\)\\n)))|\\n",
"name": "string.interpolated.python string.quoted.raw.single.python"
},
"fstring-single-brace": {
"begin": "(\\{)",
"beginCaptures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"end": "(})|(?=\\n)",
"endCaptures": {
"1": {
"name": "constant.character.format.placeholder.other.python"
}
},
"patterns": [
{
"include": "#fstring-terminator-single"
},
{
"include": "#f-expression"
}
]
},
"fstring-single-core": {
"match": "(.+?)($(\\n?)|(?=[\\\\{}]|([\"'])|((?<!\\\\)\\n)))|\\n",
"name": "string.interpolated.python string.quoted.single.python"
},
"fstring-terminator-multi": {
"patterns": [
{
"match": "(=(![ars])?)(?=})",
"name": "storage.type.format.python"
},
{
"match": "(=?![ars])(?=})",
"name": "storage.type.format.python"
},
{
"captures": {
"1": {
"name": "storage.type.format.python"
},
"2": {
"name": "storage.type.format.python"
}
},
"match": "(=?(?:![ars])?)(:\\w?[<=>^]?[- +]?#?\\d*,?(\\.\\d+)?[%EFGXb-gnosx]?)(?=})"
},
{
"include": "#fstring-terminator-multi-tail"
}
]
},
"fstring-terminator-multi-tail": {
"begin": "(=?(?:![ars])?)(:)(?=.*?\\{)",
"beginCaptures": {
"1": {
"name": "storage.type.format.python"
},
"2": {
"name": "storage.type.format.python"
}
},
"end": "(?=})",
"patterns": [
{
"include": "#fstring-illegal-multi-brace"
},
{
"include": "#fstring-multi-brace"
},
{
"match": "([%EFGXb-gnosx])(?=})",
"name": "storage.type.format.python"
},
{
"match": "(\\.\\d+)",
"name": "storage.type.format.python"
},
{
"match": "(,)",
"name": "storage.type.format.python"
},
{
"match": "(\\d+)",
"name": "storage.type.format.python"
},
{
"match": "(#)",
"name": "storage.type.format.python"
},
{
"match": "([- +])",
"name": "storage.type.format.python"
},
{
"match": "([<=>^])",
"name": "storage.type.format.python"
},
{
"match": "(\\w)",
"name": "storage.type.format.python"
}
]
},
"fstring-terminator-single": {
"patterns": [
{
"match": "(=(![ars])?)(?=})",
"name": "storage.type.format.python"
},
{
"match": "(=?![ars])(?=})",
"name": "storage.type.format.python"
},
{
"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": [