|
- %YAML 1.2
- ---
- # http://www.sublimetext.com/docs/3/syntax.html
- name: Kotlin
- file_extensions:
- - kt
- - kts
- scope: source.Kotlin
- contexts:
- main:
- - include: comments
- - match: '^\s*(package)\b(?:\s*([^ ;$]+)\s*)?'
- captures:
- 1: keyword.other.kotlin
- 2: entity.name.package.kotlin
- - include: imports
- - include: statements
- classes:
- - match: (?=\s*(?:companion|class|object|interface))
- push:
- - match: "}|(?=$)"
- pop: true
- - match: \b(companion\s*)?(class|object|interface)\b
- captures:
- 1: keyword.other.kotlin
- push:
- - match: '(?=<|{|\(|:)'
- pop: true
- - match: \b(object)\b
- scope: keyword.other.kotlin
- - match: \w+
- scope: entity.name.type.class.kotlin
- - match: <
- push:
- - match: ">"
- pop: true
- - include: generics
- - match: \(
- push:
- - match: \)
- pop: true
- - include: parameters
- - match: (:)
- captures:
- 1: keyword.operator.declaration.kotlin
- push:
- - match: "(?={|$)"
- pop: true
- - match: \w+
- scope: entity.other.inherited-class.kotlin
- - match: \(
- push:
- - match: \)
- pop: true
- - include: expressions
- - match: '\{'
- push:
- - match: '\}'
- pop: true
- - include: statements
- comments:
- - match: /\*
- captures:
- 0: punctuation.definition.comment.kotlin
- push:
- - meta_scope: comment.block.kotlin
- - match: \*/
- captures:
- 0: punctuation.definition.comment.kotlin
- pop: true
- - match: \s*((//).*$\n?)
- captures:
- 1: comment.line.double-slash.kotlin
- 2: punctuation.definition.comment.kotlin
- constants:
- - match: \b(true|false|null|this|super)\b
- scope: constant.language.kotlin
- - match: '\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)([LlFfUuDd]|UL|ul)?\b'
- scope: constant.numeric.kotlin
- - match: '\b([A-Z][A-Z0-9_]+)\b'
- scope: constant.other.kotlin
- expressions:
- - match: \(
- push:
- - match: \)
- pop: true
- - include: expressions
- - include: types
- - include: strings
- - include: constants
- - include: comments
- - include: keywords
- functions:
- - match: (?=\s*(?:fun))
- push:
- - match: "}|(?=$)"
- pop: true
- - match: \b(fun)\b
- captures:
- 1: keyword.other.kotlin
- push:
- - match: (?=\()
- pop: true
- - match: <
- push:
- - match: ">"
- pop: true
- - include: generics
- - match: '([\.<\?>\w]+\.)?(\w+)'
- captures:
- 2: entity.name.function.kotlin
- - match: \(
- push:
- - match: \)
- pop: true
- - include: parameters
- - match: (:)
- captures:
- 1: keyword.operator.declaration.kotlin
- push:
- - match: "(?={|=|$)"
- pop: true
- - include: types
- - match: '\{'
- push:
- - match: '(?=\})'
- pop: true
- - include: statements
- - match: (=)
- captures:
- 1: keyword.operator.assignment.kotlin
- push:
- - match: (?=$)
- pop: true
- - include: expressions
- generics:
- - match: (:)
- captures:
- 1: keyword.operator.declaration.kotlin
- push:
- - match: (?=,|>)
- pop: true
- - include: types
- - include: keywords
- - match: \w+
- scope: storage.type.generic.kotlin
- getters-and-setters:
- - match: \b(get)\b\s*\(\s*\)
- captures:
- 1: entity.name.function.kotlin
- push:
- - match: '\}|(?=\bset\b)|$'
- pop: true
- - match: (=)
- captures:
- 1: keyword.operator.assignment.kotlin
- push:
- - match: (?=$|\bset\b)
- pop: true
- - include: expressions
- - match: '\{'
- push:
- - match: '\}'
- pop: true
- - include: expressions
- - match: \b(set)\b\s*(?=\()
- captures:
- 1: entity.name.function.kotlin
- push:
- - match: '\}|(?=\bget\b)|$'
- pop: true
- - match: \(
- push:
- - match: \)
- pop: true
- - include: parameters
- - match: (=)
- captures:
- 1: keyword.operator.assignment.kotlin
- push:
- - match: (?=$|\bset\b)
- pop: true
- - include: expressions
- - match: '\{'
- push:
- - match: '\}'
- pop: true
- - include: expressions
- imports:
- - match: '^\s*(import)\s+[^ $]+\s+(as)?'
- captures:
- 1: keyword.other.kotlin
- 2: keyword.other.kotlin
- keywords:
- - match: \b(var|val|public|private|protected|abstract|final|enum|open|attribute|annotation|override|inline|var|val|vararg|lazy|in|out|internal|data|tailrec|operator|infix|const|yield|typealias|typeof)\b
- scope: storage.modifier.kotlin
- - match: \b(try|catch|finally|throw)\b
- scope: keyword.control.catch-exception.kotlin
- - match: \b(if|else|while|for|do|return|when|where|break|continue)\b
- scope: keyword.control.kotlin
- - match: \b(in|is|as|assert)\b
- scope: keyword.operator.kotlin
- - match: (==|!=|===|!==|<=|>=|<|>)
- scope: keyword.operator.comparison.kotlin
- - match: (=)
- scope: keyword.operator.assignment.kotlin
- - match: (:)
- scope: keyword.operator.declaration.kotlin
- - match: (\.)
- scope: keyword.operator.dot.kotlin
- - match: (\-\-|\+\+)
- scope: keyword.operator.increment-decrement.kotlin
- - match: (\-|\+|\*|\/|%)
- scope: keyword.operator.arithmetic.kotlin
- - match: (\+=|\-=|\*=|\/=)
- scope: keyword.operator.arithmetic.assign.kotlin
- - match: (!|&&|\|\|)
- scope: keyword.operator.logical.kotlin
- - match: (\.\.)
- scope: keyword.operator.range.kotlin
- - match: (;)
- scope: punctuation.terminator.kotlin
- namespaces:
- - match: \b(namespace)\b
- scope: keyword.other.kotlin
- - match: '\{'
- push:
- - match: '\}'
- pop: true
- - include: statements
- parameters:
- - match: (:)
- captures:
- 1: keyword.operator.declaration.kotlin
- push:
- - match: (?=,|\)|=)
- pop: true
- - include: types
- - match: (=)
- captures:
- 1: keyword.operator.declaration.kotlin
- push:
- - match: (?=,|\))
- pop: true
- - include: expressions
- - include: keywords
- - match: \w+
- scope: variable.parameter.function.kotlin
- statements:
- - include: namespaces
- - include: typedefs
- - include: classes
- - include: functions
- - include: variables
- - include: getters-and-setters
- - include: expressions
- strings:
- - match: '"""'
- captures:
- 0: punctuation.definition.string.begin.kotlin
- push:
- - meta_scope: string.quoted.third.kotlin
- - match: '"""'
- captures:
- 0: punctuation.definition.string.end.kotlin
- pop: true
- - match: '(\$\w+|\$\{[^\}]+\})'
- scope: variable.parameter.template.kotlin
- - match: \\.
- scope: constant.character.escape.kotlin
- - match: '"'
- captures:
- 0: punctuation.definition.string.begin.kotlin
- push:
- - meta_scope: string.quoted.double.kotlin
- - match: '"'
- captures:
- 0: punctuation.definition.string.end.kotlin
- pop: true
- - match: '(\$\w+|\$\{[^\}]+\})'
- scope: variable.parameter.template.kotlin
- - match: \\.
- scope: constant.character.escape.kotlin
- - match: "'"
- captures:
- 0: punctuation.definition.string.begin.kotlin
- push:
- - meta_scope: string.quoted.single.kotlin
- - match: "'"
- captures:
- 0: punctuation.definition.string.end.kotlin
- pop: true
- - match: \\.
- scope: constant.character.escape.kotlin
- - match: "`"
- captures:
- 0: punctuation.definition.string.begin.kotlin
- push:
- - meta_scope: string.quoted.single.kotlin
- - match: "`"
- captures:
- 0: punctuation.definition.string.end.kotlin
- pop: true
- typedefs:
- - match: (?=\s*(?:type))
- push:
- - match: (?=$)
- pop: true
- - match: \b(type)\b
- scope: keyword.other.kotlin
- - match: <
- push:
- - match: ">"
- pop: true
- - include: generics
- - include: expressions
- types:
- - match: \b(Any|Unit|String|Int|Boolean|Char|Long|Double|Float|Short|Byte|dynamic)\b
- scope: storage.type.buildin.kotlin
- - match: \b(IntArray|BooleanArray|CharArray|LongArray|DoubleArray|FloatArray|ShortArray|ByteArray)\b
- scope: storage.type.buildin.array.kotlin
- - match: \b(Array|List|Map)<\b
- captures:
- 1: storage.type.buildin.collection.kotlin
- push:
- - match: ">"
- pop: true
- - include: types
- - include: keywords
- - match: \w+<
- push:
- - match: ">"
- pop: true
- - include: types
- - include: keywords
- - match: (#)\(
- captures:
- 1: keyword.operator.tuple.kotlin
- push:
- - match: \)
- pop: true
- - include: expressions
- - match: '\{'
- push:
- - match: '\}'
- pop: true
- - include: statements
- - match: \(
- push:
- - match: \)
- pop: true
- - include: types
- - match: (->)
- scope: keyword.operator.declaration.kotlin
- variables:
- - match: (?=\s*(?:var|val))
- push:
- - match: (?=:|=|$)
- pop: true
- - match: \b(var|val)\b
- captures:
- 1: keyword.other.kotlin
- push:
- - match: (?=:|=|$)
- pop: true
- - match: <
- push:
- - match: ">"
- pop: true
- - include: generics
- - match: '([\.<\?>\w]+\.)?(\w+)'
- captures:
- 2: entity.name.variable.kotlin
- - match: (:)
- captures:
- 1: keyword.operator.declaration.kotlin
- push:
- - match: (?==|$)
- pop: true
- - include: types
- - include: getters-and-setters
- - match: (=)
- captures:
- 1: keyword.operator.assignment.kotlin
- push:
- - match: (?=$)
- pop: true
- - include: expressions
- - include: getters-and-setters
|