%YAML 1.2 --- # http://www.sublimetext.com/docs/3/syntax.html name: Swift file_extensions: - swift first_line_match: ^#!/.*\bswift scope: source.swift contexts: main: - include: shebang-line - include: comment - include: attribute - include: literal - include: operator - include: declaration - include: storage-type - include: keyword - include: type - include: boolean comment: - include: documentation-comment - include: block-comment - include: in-line-comment access-level-modifier: - match: \b(open|public|internal|fileprivate|private)\b(?:\(set\))? comment: access-level-modifier scope: keyword.other.access-level-modifier.swift arithmetic-operator: - match: '(?&|\^~.])(\+|\-|\*|\/)(?![/=\-+!*%<>&|\^~.])' scope: keyword.operator.arithmetic.swift array-type: - match: \b(Array)(<) captures: 1: support.type.array.swift 2: punctuation.array.begin.swift push: - meta_scope: meta.array.swift - match: (>) captures: 1: punctuation.array.end.swift pop: true - include: main assignment-operator: - match: '(?&|\^~.])(\+|\-|\*|\/|%|<<|>>|&|\^|\||&&|\|\|)?=(?![/=\-+!*%<>&|\^~.])' scope: keyword.operator.assignment.swift attribute: - match: '((@)(\B\$[0-9]+|\b[\w^\d][\w\d]*\b|\B`[\w^\d][\w\d]*`\B))(\()' captures: 1: storage.modifier.attribute.swift 2: punctuation.definition.attribute.swift 3: punctuation.definition.attribute-arguments.begin.swift push: - meta_content_scope: meta.attribute.arguments.swift - match: \) captures: 0: punctuation.definition.attribute-arguments.end.swift pop: true - include: main - match: '((@)(\B\$[0-9]+|\b[\w^\d][\w\d]*\b|\B`[\w^\d][\w\d]*`\B))' captures: 1: storage.modifier.attribute.swift 2: punctuation.definition.attribute.swift bitwise-operator: - match: '(?&|\^~.])(&|\||\^|<<|>>)(?![/=\-+!*%<>&|\^~.])' scope: keyword.operator.bitwise.swift block-comment: - match: /\* comment: Block comment captures: 0: punctuation.definition.comment.block.begin.swift push: - meta_scope: comment.block.swift - match: \*/ captures: 0: punctuation.definition.comment.block.end.swift pop: true boolean: - match: \b(true|false)\b scope: keyword.constant.boolean.swift branch-statement-keyword: - include: if-statement-keyword - include: switch-statement-keyword catch-statement-keyword: - match: \b(catch|do)\b comment: catch-statement scope: kewyord.control.catch.swift code-block: - match: '(\{)' comment: code-block captures: 1: punctuation.definition.code-block.begin.swift push: - match: '(\})' captures: 1: punctuation.definition.code-block.end.swift pop: true - include: main collection-type: - include: array-type - include: dictionary-type - match: \b(Array|Dictionary)\b scope: support.type.swift comparative-operator: - match: '(?&|\^~.])((=|!)==?|(<|>)=?|~=)(?![/=\-+!*%<>&|\^~.])' scope: keyword.operator.comparative.swift control-transfer-statement-keyword: - match: \b(continue|break|fallthrough|return)\b comment: control-transfer-statement scope: keyword.control.transfer.swift custom-operator: - match: '(?<=[\s(\[{,;:])([/=\-+!*%<>&|\^~.]++)(?![\s)\]},;:])' scope: keyword.operator.custom.prefix.unary.swift - match: '(?&|\^~.]++)(?![\s)\]},;:\.])' scope: keyword.operator.custom.postfix.unary.swift - match: '(?<=[\s(\[{,;:])([/=\-+!*%<>&|\^~.]++)(?=[\s)\]},;:])' scope: keyword.operator.custom.binary.swift declaration: - include: import-declaration - include: function-declaration declaration-modifier: - match: \b(class|convenience|dynamic|final|lazy|(non)?mutating|optional|override|required|static|unowned((un)?safe)?|weak)\b comment: declaration-modifier scope: keyword.other.declaration-modifier.swift dictionary-type: - match: \b(Dictionary)(<) captures: 1: support.type.dictionary.swift 2: punctuation.dictionary.begin.swift push: - meta_scope: meta.dictionary.swift - match: (>) captures: 1: punctuation.dictionary.end.swift pop: true - include: main documentation-comment: - match: /\*\* comment: Documentation comment captures: 0: punctuation.definition.comment.block.documentation.begin.swift push: - meta_scope: comment.block.documentation.swift - match: \*/ captures: 0: punctuation.definition.comment.block.documentation.end.swift pop: true floating-point-literal: - match: '\b([0-9][0-9_]*)(\.([0-9][0-9_]*))?([eE][+\-]?([0-9][0-9_]*))?\b' comment: floating-point-literal -> (decimal-literal)(decimal-fraction)?(decimal-exponent)? - match: '\b(0x\h[\h_]*)(\.(0x\h[\h_]*))?([pP][+\-]?(0x\h[\h_]*))\b' comment: floating-point-literal -> (hexadecimal-literal)(hexadecimal-fraction)?(hexadecimal-exponent) function-body: - include: code-block function-declaration: - match: '\b(func)\s+(\B\$[0-9]+|\b[\w^\d][\w\d]*\b|\B`[\w^\d][\w\d]*`\B|[/=\-+!*%<>&|\^~.]+)\s*(?=\(|<)' comment: function-declaration captures: 1: storage.type.function.swift 2: entity.type.function.swift push: - meta_scope: meta.function-declaration.swift - match: '(?<=\})' pop: true - include: generic-parameter-clause - include: parameter-clause - include: function-result - include: function-body function-result: - match: '(?&|\^~.])(\->)(?![/=\-+!*%<>&|\^~.])\s*' comment: function-result captures: 1: keyword.operator.function-result.swift push: - meta_scope: meta.function-result.swift - match: '\s*(?=\{)' pop: true - include: type generic-parameter-clause: - match: (<) comment: generic-parameter-clause captures: 1: punctuation.definition.generic-parameter-clause.begin.swift push: - meta_scope: meta.generic-parameter-clause.swift - match: (>) captures: 1: punctuation.definition.generic-parameter-clause.end.swift pop: true - include: main identifier: - match: '(\B\$[0-9]+|\b[\w^\d][\w\d]*\b|\B`[\w^\d][\w\d]*`\B)' comment: identifier scope: meta.identifier.swift if-statement-keyword: - match: \b(if|else)\b comment: if-statement scope: keyword.control.if.swift import-declaration: - match: '\b(import)\s+(?:(typealias|struct|class|enum|protocol|var|func)\s+)?((?:\B\$[0-9]+|\b[\w^\d][\w\d]*\b|\B`[\w^\d][\w\d]*`\B|[/=\-+!*%<>&|\^~.]+)(?:\.(?:\B\$[0-9]+|\b[\w^\d][\w\d]*\b|\B`[\w^\d][\w\d]*`\B|[/=\-+!*%<>&|\^~.]+))*)' comment: import-declaration scope: meta.import.swift captures: 1: keyword.other.import.swift 2: storage.modifier.swift 3: support.type.module.import.swift in-line-comment: - match: (//).* comment: In-line comment scope: comment.line.double-slash.swift captures: 1: punctuation.definition.comment.line.double-slash.swift increment-decrement-operator: - match: '(?&|\^~.])(\+\+|\-\-)(?![/=\-+!*%<>&|\^~.])' scope: keyword.operator.increment-or-decrement.swift integer-literal: - match: '(\B\-|\b)(0b[01][01_]*)\b' comment: binary-literal scope: constant.numeric.integer.binary.swift - match: '(\B\-|\b)(0o[0-7][0-7_]*)\b' comment: octal-literal scope: constant.numeric.integer.octal.swift - match: '(\B\-|\b)([0-9][0-9_]*)\b' comment: decimal-literal scope: constant.numeric.integer.decimal.swift - match: '(\B\-|\b)(0x\h[\h_]*)\b' comment: hexadecimal-literal scope: constant.numeric.integer.hexadecimal.swift integer-type: - match: \bU?Int(8|16|32|64)?\b comment: Int types scope: support.type.swift keyword: - include: branch-statement-keyword - include: control-transfer-statement-keyword - include: loop-statement-keyword - include: catch-statement-keyword - include: operator-declaration-modifier - include: declaration-modifier - include: access-level-modifier - match: \b(class|deinit|enum|extension|func|import|init|let|protocol|static|struct|subscript|typealias|var|throws|rethrows)\b comment: declaration keyword scope: keyword.declaration.swift - match: \b(break|case|continue|default|do|else|fallthrough|if|in|for|return|switch|where|while|repeat|catch|guard|defer|try|throw)\b comment: statement keyword scope: keyword.statement.swift - match: \b(as|dynamicType|is|new|super|self|Self|Type)\b comment: expression and type keyword scope: keyword.other.statement.swift - match: \b(associativity|didSet|get|infix|inout|left|mutating|none|nonmutating|operator|override|postfix|precedence|prefix|right|set|unowned((un)?safe)?|weak|willSet)\b comment: other keyword scope: keyword.other.swift literal: - include: integer-literal - include: floating-point-literal - include: nil-literal - include: string-literal - include: special-literal logical-operator: - match: '(?&|\^~.])(!|&&|\|\|)(?![/=\-+!*%<>&|\^~.])' scope: keyword.operator.logical.swift loop-statement-keyword: - match: \b(while|repeat|for|in)\b comment: loop-statement scope: keyword.control.loop.swift nil-literal: - match: \bnil\b comment: nil-literal scope: constant.nil.swift operator: - include: comparative-operator - include: assignment-operator - include: logical-operator - include: remainder-operator - include: increment-decrement-operator - include: overflow-operator - include: range-operator - include: bitwise-operator - include: arithmetic-operator - include: ternary-operator - include: type-casting-operator - include: custom-operator operator-declaration-modifier: - match: \b(operator|prefix|infix|postfix)\b comment: operator-declaration scope: keyword.other.operator.swift optional-type: - match: \b(Optional)(<) scope: meta.optional.swift overflow-operator: - match: '(?&|\^~.])\&(\+|\-|\*|\/|%)(?![/=\-+!*%<>&|\^~.])' scope: keyword.operator.overflow.swift parameter-clause: - match: (\() comment: parameter-clause captures: 1: punctuation.definition.function-arguments.begin.swift push: - meta_scope: meta.parameter-clause.swift - match: (\)) captures: 1: punctuation.definition.function-arguments.end.swift pop: true - include: main primitive-type: - match: \b(Int|Float|Double|String|Bool|Character|Void)\b comment: Primitive types scope: support.type.swift protocol-composition-type: - match: \b(protocol)(<) scope: meta.protocol.swift range-operator: - match: '(?&|\^~.])\.\.(?:\.)?(?![/=\-+!*%<>&|\^~.])' scope: keyword.operator.range.swift remainder-operator: - match: '(?&|\^~.])\%(?![/=\-+!*%<>&|\^~.])' scope: keyword.operator.remainder.swift shebang-line: - match: ^(#!).*$ comment: Shebang line scope: comment.line.shebang.swift captures: 1: punctuation.definition.comment.line.shebang.swift special-literal: - match: \b__(FILE|LINE|COLUMN|FUNCTION)__\b scope: keyword.other.literal.swift storage-type: - match: \b(var|func|let|class|enum|struct|protocol|extension|typealias)\b scope: storage.type.swift string-literal: - match: \" captures: 0: string.quoted.double.swift push: - meta_scope: meta.literal.string.swift - match: \" captures: 0: string.quoted.double.swift pop: true - match: '\\([0tnr\"\''\\]|x\h{2}|u\h{4}|U\h{8})' scope: constant.character.escape.swift - match: (\\\() captures: 1: support.punctuation.expression.begin.swift push: - meta_content_scope: meta.expression.swift - match: (\)) captures: 1: support.punctuation.expression.end.swift pop: true - include: scope:source.swift - match: (\"|\\) scope: invalid.illegal.swift - match: (.) scope: string.quoted.double.swift switch-statement-keyword: - match: \b(switch|case|default|where)\b comment: switch-statement scope: keyword.control.switch.swift ternary-operator: - match: '(?<=[\s(\[{,;:])(\?|:)(?=[\s)\]},;:])' scope: keyword.operator.ternary.swift type: - include: primitive-type - include: integer-type - include: collection-type - include: optional-type - include: protocol-composition-type type-casting-operator: - match: \b(is\b|as(\?\B|\b)) scope: keyword.operator.type-casting.swift