--- name: Python fileTypes: - py - rpy - cpy - SConstruct - Sconstruct - sconstruct - SConscript firstLineMatch: ^#!/.*\bpython\b scopeName: source.python repository: keyword_arguments: endCaptures: "1": name: punctuation.separator.parameters.python begin: \b([a-zA-Z_][a-zA-Z_0-9]*)\s*(=) beginCaptures: "1": name: variable.parameter.function.python "2": name: keyword.operator.assignment.python end: \s*(?:(,)|(?=$\n?|[\)])) patterns: - include: $base generic_names: match: "[A-Za-z_][A-Za-z0-9_]*" escaped_char: captures: "6": name: constant.character.escape.single-quote.python "11": name: constant.character.escape.return.python "7": name: constant.character.escape.bell.python "12": name: constant.character.escape.tab.python "8": name: constant.character.escape.backspace.python "13": name: constant.character.escape.vertical-tab.python "9": name: constant.character.escape.formfeed.python "1": name: constant.character.escape.hex.python "2": name: constant.character.escape.octal.python "3": name: constant.character.escape.newline.python "4": name: constant.character.escape.backlash.python "10": name: constant.character.escape.linefeed.python "5": name: constant.character.escape.double-quote.python match: (\\x[0-9A-F]{2})|(\\[0-7]{3})|(\\\n)|(\\\\)|(\\\")|(\\')|(\\a)|(\\b)|(\\f)|(\\n)|(\\r)|(\\t)|(\\v) entity_name_class: patterns: - include: "#illegal_names" - include: "#generic_names" dotted_name: begin: (?=[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*) end: (?![A-Za-z0-9_\.]) patterns: - begin: (\.)(?=[A-Za-z_][A-Za-z0-9_]*) end: (?![A-Za-z0-9_]) patterns: - include: "#magic_function_names" - include: "#magic_variable_names" - include: "#illegal_names" - include: "#generic_names" - begin: (?>\=|<<\=|\*\*\= - name: keyword.operator.arithmetic.python match: \+|\-|\*|\*\*|/|//|%|<<|>>|&|\||\^|~ - name: keyword.operator.comparison.python match: <|>|<\=|>\=|\=\=|!\=|<> - name: keyword.operator.assignment.python match: \= - name: meta.class.old-style.python endCaptures: "1": name: punctuation.section.class.begin.python begin: ^\s*(class)\s+(?=[a-zA-Z_][a-zA-Z_0-9]*\s*\:) contentName: entity.name.type.class.python beginCaptures: "1": name: storage.type.class.python end: \s*(:) patterns: - include: "#entity_name_class" - name: meta.class.python endCaptures: "1": name: punctuation.definition.inheritance.end.python "2": name: punctuation.section.class.begin.python "3": name: invalid.illegal.missing-section-begin.python begin: ^\s*(class)\s+(?=[a-zA-Z_][a-zA-Z_0-9]*\s*\() beginCaptures: "1": name: storage.type.class.python end: (\))\s*(?:(\:)|(.*$\n?)) patterns: - begin: (?=[A-Za-z_][A-Za-z0-9_]*) contentName: entity.name.type.class.python end: (?![A-Za-z0-9_]) patterns: - include: "#entity_name_class" - begin: (\() contentName: meta.class.inheritance.python beginCaptures: "1": name: punctuation.definition.inheritance.begin.python end: (?=\)|:) patterns: - endCaptures: "1": name: punctuation.separator.inheritance.python begin: (?<=\(|,)\s* contentName: entity.other.inherited-class.python end: \s*(?:(,)|(?=\))) patterns: - include: $base - name: meta.class.python endCaptures: "1": name: punctuation.definition.inheritance.begin.python "2": name: invalid.illegal.missing-inheritance.python begin: ^\s*(class)\s+(?=[a-zA-Z_][a-zA-Z_0-9]) beginCaptures: "1": name: storage.type.class.python end: (\()|\s*($\n?|#.*$\n?) patterns: - begin: (?=[A-Za-z_][A-Za-z0-9_]*) contentName: entity.name.type.class.python end: (?![A-Za-z0-9_]) patterns: - include: "#entity_name_function" - name: meta.function.python endCaptures: "1": name: punctuation.definition.parameters.end.python "2": name: punctuation.section.function.begin.python "3": name: invalid.illegal.missing-section-begin.python begin: ^\s*(def)\s+(?=[A-Za-z_][A-Za-z0-9_]*\s*\() beginCaptures: "1": name: storage.type.function.python end: (\))\s*(?:(\:)|(.*$\n?)) patterns: - begin: (?=[A-Za-z_][A-Za-z0-9_]*) contentName: entity.name.function.python end: (?![A-Za-z0-9_]) patterns: - include: "#entity_name_function" - begin: (\() contentName: meta.function.parameters.python beginCaptures: "1": name: punctuation.definition.parameters.begin.python end: (?=\)\s*\:) patterns: - include: "#keyword_arguments" - captures: "1": name: variable.parameter.function.python "2": name: punctuation.separator.parameters.python match: \b([a-zA-Z_][a-zA-Z_0-9]*)\s*(?:(,)|(?=[\n\)])) - name: meta.function.python endCaptures: "1": name: punctuation.definition.parameters.begin.python "2": name: invalid.illegal.missing-parameters.python begin: ^\s*(def)\s+(?=[A-Za-z_][A-Za-z0-9_]*) beginCaptures: "1": name: storage.type.function.python end: (\()|\s*($\n?|#.*$\n?) patterns: - begin: (?=[A-Za-z_][A-Za-z0-9_]*) contentName: entity.name.function.python end: (?![A-Za-z0-9_]) patterns: - include: "#entity_name_function" - name: meta.function.decorator.python endCaptures: "1": name: punctuation.definition.arguments.end.python begin: ^\s*(?=@\s*[A-Za-z_][A-Za-z0-9_]*(?:\.[a-zA-Z_][a-zA-Z_0-9]*)*\s*\() end: (\)) patterns: - begin: (?=(@)\s*[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*\s*\() contentName: entity.name.function.decorator.python beginCaptures: "1": name: punctuation.definition.decorator.python end: (?=\s*\() patterns: - include: "#dotted_name" - begin: (\() contentName: meta.function.decorator.arguments.python beginCaptures: "1": name: punctuation.definition.arguments.begin.python end: (?=\)) patterns: - include: "#keyword_arguments" - include: $base comment: a decorator may be a function call which returns a decorator. - name: meta.function.decorator.python begin: ^\s*(?=@\s*[A-Za-z_][A-Za-z0-9_]*(?:\.[a-zA-Z_][a-zA-Z_0-9]*)*) contentName: entity.name.function.decorator.python end: (?=\s|$\n?|#) patterns: - begin: (?=(@)\s*[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*) beginCaptures: "1": name: punctuation.definition.decorator.python end: (?=\s|$\n?|#) patterns: - include: "#dotted_name" - name: meta.function-call.python endCaptures: "1": name: punctuation.definition.arguments.end.python begin: (?<=\)|\])\s*(\() contentName: meta.function-call.arguments.python beginCaptures: "1": name: punctuation.definition.arguments.begin.python end: (\)) patterns: - include: "#keyword_arguments" - include: $base - name: meta.function-call.python endCaptures: "1": name: punctuation.definition.arguments.end.python begin: (?=[A-Za-z_][A-Za-z0-9_]*(?:\.[a-zA-Z_][a-zA-Z_0-9]*)*\s*\() end: (\)) patterns: - begin: (?=[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*\s*\() end: (?=\s*\() patterns: - include: "#dotted_name" - begin: (\() contentName: meta.function-call.arguments.python beginCaptures: "1": name: punctuation.definition.arguments.begin.python end: (?=\)) patterns: - include: "#keyword_arguments" - include: $base - name: meta.item-access.python begin: (?=[A-Za-z_][A-Za-z0-9_]*(?:\.[a-zA-Z_][a-zA-Z_0-9]*)*\s*\[) end: (\]) patterns: - begin: (?=[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*\s*\[) end: (?=\s*\[) patterns: - include: "#dotted_name" - endCaptures: "1": name: punctuation.definition.arguments.end.python begin: (\[) contentName: meta.item-access.arguments.python beginCaptures: "1": name: punctuation.definition.arguments.begin.python end: (?=\]) patterns: - include: $base - name: meta.item-access.python endCaptures: "1": name: punctuation.definition.arguments.end.python begin: (?<=\)|\])\s*(\[) contentName: meta.item-access.arguments.python beginCaptures: "1": name: punctuation.definition.arguments.begin.python end: (\]) patterns: - include: $base - captures: "1": name: storage.type.function.python match: \b(def|lambda)\b - captures: "1": name: storage.type.class.python match: \b(class)\b - include: "#line_continuation" - name: variable.language.python match: \b(self|cls)\b - name: constant.language.python match: \b(None|True|False|Ellipsis|NotImplemented)\b - include: "#string_quoted_single" - include: "#string_quoted_double" - include: "#dotted_name" - begin: (\() end: (\)) patterns: - include: $base - captures: "1": name: punctuation.definition.list.begin.python "2": name: meta.empty-list.python "3": name: punctuation.definition.list.end.python match: (\[)(\s*(\]))\b - name: meta.structure.list.python endCaptures: "1": name: punctuation.definition.list.end.python begin: (\[) beginCaptures: "1": name: punctuation.definition.list.begin.python end: (\]) patterns: - endCaptures: "1": name: punctuation.separator.list.python begin: (?<=\[|\,)\s*(?![\],]) contentName: meta.structure.list.item.python end: \s*(?:(,)|(?=\])) patterns: - include: $base - name: meta.structure.tuple.python captures: "1": name: punctuation.definition.tuple.begin.python "2": name: meta.empty-tuple.python "3": name: punctuation.definition.tuple.end.python match: (\()(\s*(\))) - name: meta.structure.dictionary.python captures: "1": name: punctuation.definition.dictionary.begin.python "2": name: meta.empty-dictionary.python "3": name: punctuation.definition.dictionary.end.python match: (\{)(\s*(\})) - name: meta.structure.dictionary.python endCaptures: "1": name: punctuation.definition.dictionary.end.python begin: (\{) beginCaptures: "1": name: punctuation.definition.dictionary.begin.python end: (\}) patterns: - endCaptures: "1": name: punctuation.separator.valuepair.dictionary.python begin: (?<=\{|\,|^)\s*(?![\},]) contentName: meta.structure.dictionary.key.python end: \s*(?:(?=\})|(\:)) patterns: - include: $base - endCaptures: "1": name: punctuation.separator.dictionary.python begin: (?<=\:|^)\s* contentName: meta.structure.dictionary.value.python end: \s*(?:(?=\})|(,)) patterns: - include: $base foldingStopMarker: ^\s*$|^\s*\}|^\s*\]|^\s*\)|^\s*"""\s*$ keyEquivalent: ^~P comment: "\n\ \ttodo:\n\ \t\tlist comprehension / generator comprehension scope.\n\ \t\t\n\ \t"