%YAML 1.2 --- # http://www.sublimetext.com/docs/3/syntax.html name: Elm file_extensions: - elm scope: source.elm contexts: main: - match: "(`)[a-zA-Z_']*?(`)" scope: keyword.operator.function.infix.elm captures: 1: punctuation.definition.entity.elm 2: punctuation.definition.entity.elm - match: \(\) scope: constant.language.unit.elm - match: ^\b((effect|port)\s+)?(module)\s+ captures: 1: keyword.other.elm 3: keyword.other.elm push: - meta_scope: meta.declaration.module.elm - match: $|; captures: 1: keyword.other.elm pop: true - include: module_name - match: '(where)\s*\{' captures: 1: keyword.other.elm push: - match: '\}' pop: true - include: type_signature - match: (exposing) scope: keyword.other.elm - include: module_exports - match: (where) scope: keyword.other.elm - match: "[a-z]+" scope: invalid - match: ^\b(import)\s+((open)\s+)? captures: 1: keyword.other.elm 3: invalid push: - meta_scope: meta.import.elm - match: ($|;) pop: true - match: (as|exposing) scope: keyword.import.elm - include: module_name - include: module_exports - match: '(\[)(glsl)(\|)' captures: 1: keyword.other.elm 2: support.function.prelude.elm 3: keyword.other.elm push: - meta_scope: entity.glsl.elm - match: '(\|\])' captures: 1: keyword.other.elm pop: true - include: scope:source.glsl - match: \b(type alias|type|case|of|let|in|as)\s+ scope: keyword.other.elm - match: \b(if|then|else)\s+ scope: keyword.control.elm - match: '\b([0-9]+\.[0-9]+([eE][+-]?[0-9]+)?|[0-9]+[eE][+-]?[0-9]+)\b' comment: Floats are always decimal scope: constant.numeric.float.elm - match: '\b([0-9]+)\b' scope: constant.numeric.elm - match: '"""' captures: 0: punctuation.definition.string.begin.elm push: - meta_scope: string.quoted.double.elm - match: '"""' captures: 0: punctuation.definition.string.end.elm pop: true - match: '\\(NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\''\&])' scope: constant.character.escape.elm - match: '\^[A-Z@\[\]\\\^_]' scope: constant.character.escape.control.elm - match: '"' captures: 0: punctuation.definition.string.begin.elm push: - meta_scope: string.quoted.double.elm - match: '"' captures: 0: punctuation.definition.string.end.elm pop: true - match: '\\(NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\"''\&])' scope: constant.character.escape.elm - match: '\^[A-Z@\[\]\\\^_]' scope: constant.character.escape.control.elm - match: |- (?x) (') (?: [\ -\[\]-~] # Basic Char | (\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE |DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS |US|SP|DEL|[abfnrtv\\\"'\&])) # Escapes | (\^[A-Z@\[\]\\\^_]) # Control Chars ) (') scope: string.quoted.single.elm captures: 1: punctuation.definition.string.begin.elm 2: constant.character.escape.elm 3: punctuation.definition.string.end.elm - match: '^(port\s+)?([a-z_][a-zA-Z0-9_'']*|\([|!%$+\-.,=]+\))\s*((:)([:]+)?)' captures: 1: keyword.other.port.elm 2: entity.name.function.elm 4: keyword.other.colon.elm 5: invalid push: - meta_scope: meta.function.type-declaration.elm - match: $\n? pop: true - include: type_signature - match: \bport\s+ scope: keyword.other.port.elm - match: '\b[A-Z]\w*\b' scope: constant.other.elm - include: comments - match: '^[a-z][A-Za-z0-9_'']*\s+' scope: entity.name.function.elm - include: infix_op - match: '[|!%$?~+:\-.=&\\*^]+' scope: keyword.operator.elm - match: '([\[\]\{\},])' scope: constant.language.delimiter.elm captures: 1: support.function.delimiter.elm - match: '([\(\)])' scope: keyword.other.parenthesis.elm block_comment: - match: '\{-(?!#)' captures: 0: punctuation.definition.comment.elm push: - meta_scope: comment.block.elm - include: block_comment - match: '-\}' captures: 0: punctuation.definition.comment.elm pop: true comments: - match: (--).*$\n? scope: comment.line.double-dash.elm captures: 1: punctuation.definition.comment.elm - include: block_comment infix_op: - match: '(\([|!%$+:\-.=]+\)|\(,+\))' scope: entity.name.function.infix.elm module_exports: - match: \( push: - meta_scope: meta.declaration.exports.elm - match: \) pop: true - match: '\b[a-z][a-zA-Z_''0-9]*' scope: entity.name.function.elm - match: '\b[A-Z][A-Za-z_''0-9]*' scope: storage.type.elm - match: "," scope: punctuation.separator.comma.elm - include: infix_op - match: \(.*?\) comment: So named because I don't know what to call this. scope: meta.other.unknown.elm module_name: - match: "[A-Z][A-Za-z._']*" scope: support.other.module.elm type_signature: - match: '\(\s*([A-Z][A-Za-z]*)\s+([a-z][A-Za-z_'']*)\)\s*(=>)' scope: meta.class-constraint.elm captures: 1: entity.other.inherited-class.elm 2: variable.other.generic-type.elm 3: keyword.other.big-arrow.elm - match: "->" scope: keyword.other.arrow.elm - match: "=>" scope: keyword.other.big-arrow.elm - match: '\b[a-z][a-zA-Z0-9_'']*\b' scope: variable.other.generic-type.elm - match: '\b[A-Z][a-zA-Z0-9_'']*\b' scope: storage.type.elm - match: \(\) scope: support.constant.unit.elm - include: comments