{ "scopeName": "source.coffee", "name": "CoffeeScript", "fileTypes": [ "coffee", "Cakefile", "coffee.erb", "cson", "_coffee", "cjsx" ], "firstLineMatch": "(?x)\n# Hashbang\n^\\#!.*(?:\\s|\\/)\n coffee\n(?:$|\\s)\n|\n# Modeline\n(?i:\n # Emacs\n -\\*-(?:\\s*(?=[^:;\\s]+\\s*-\\*-)|(?:.*?[;\\s]|(?<=-\\*-))mode\\s*:\\s*)\n coffee\n (?=[\\s;]|(?]?\\d+|m)?|\\sex)(?=:(?=\\s*set?\\s[^\\n:]+:)|:(?!\\s*set?\\s))(?:(?:\\s|\\s*:\\s*)\\w*(?:\\s*=(?:[^\\n\\\\\\s]|\\\\.)*)?)*[\\s:](?:filetype|ft|syntax)\\s*=\n coffee\n (?=\\s|:|$)\n)", "patterns": [ { "include": "#jsx" }, { "match": "(new)\\s+(?:(?:(class)\\s+(\\w+(?:\\.\\w*)*)?)|(\\w+(?:\\.\\w*)*))", "name": "meta.class.instance.constructor.coffee", "captures": { "1": { "name": "keyword.operator.new.coffee" }, "2": { "name": "storage.type.class.coffee" }, "3": { "name": "entity.name.type.instance.coffee" }, "4": { "name": "entity.name.type.instance.coffee" } } }, { "begin": "'''", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.coffee" } }, "end": "'''", "endCaptures": { "0": { "name": "punctuation.definition.string.end.coffee" } }, "name": "string.quoted.single.heredoc.coffee", "patterns": [ { "captures": { "1": { "name": "punctuation.definition.escape.backslash.coffee" } }, "match": "(\\\\).", "name": "constant.character.escape.backslash.coffee" } ] }, { "begin": "\"\"\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.coffee" } }, "end": "\"\"\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.coffee" } }, "name": "string.quoted.double.heredoc.coffee", "patterns": [ { "captures": { "1": { "name": "punctuation.definition.escape.backslash.coffee" } }, "match": "(\\\\).", "name": "constant.character.escape.backslash.coffee" }, { "include": "#interpolated_coffee" } ] }, { "match": "(`)(.*)(`)", "name": "string.quoted.script.coffee", "captures": { "1": { "name": "punctuation.definition.string.begin.coffee" }, "2": { "name": "source.js.embedded.coffee", "patterns": [ { "include": "source.js" } ] }, "3": { "name": "punctuation.definition.string.end.coffee" } } }, { "begin": "(?)", "beginCaptures": { "1": { "name": "entity.name.function.coffee" }, "2": { "name": "variable.other.readwrite.instance.coffee" }, "3": { "name": "keyword.operator.assignment.coffee" } }, "end": "[=-]>", "endCaptures": { "0": { "name": "storage.type.function.coffee" } }, "name": "meta.function.coffee", "patterns": [ { "include": "#function_params" } ] }, { "begin": "(?x)\n(?<=\\s|^)(?:((')([^']*?)('))|((\")([^\"]*?)(\")))\n\\s*([:=])\\s*\n(?=(\\([^\\(\\)]*\\)\\s*)?[=-]>)", "beginCaptures": { "1": { "name": "string.quoted.single.coffee" }, "2": { "name": "punctuation.definition.string.begin.coffee" }, "3": { "name": "entity.name.function.coffee" }, "4": { "name": "punctuation.definition.string.end.coffee" }, "5": { "name": "string.quoted.double.coffee" }, "6": { "name": "punctuation.definition.string.begin.coffee" }, "7": { "name": "entity.name.function.coffee" }, "8": { "name": "punctuation.definition.string.end.coffee" }, "9": { "name": "keyword.operator.assignment.coffee" } }, "end": "[=-]>", "endCaptures": { "0": { "name": "storage.type.function.coffee" } }, "name": "meta.function.coffee", "patterns": [ { "include": "#function_params" } ] }, { "begin": "(?=(\\([^\\(\\)]*\\)\\s*)?[=-]>)", "end": "[=-]>", "endCaptures": { "0": { "name": "storage.type.function.coffee" } }, "name": "meta.function.inline.coffee", "patterns": [ { "include": "#function_params" } ] }, { "begin": "(?<=\\s|^)({)(?=[^'\"#]+?}[\\s\\]}]*=)", "beginCaptures": { "1": { "name": "punctuation.definition.destructuring.begin.bracket.curly.coffee" } }, "end": "}", "endCaptures": { "0": { "name": "punctuation.definition.destructuring.end.bracket.curly.coffee" } }, "name": "meta.variable.assignment.destructured.object.coffee", "patterns": [ { "include": "$self" }, { "match": "[a-zA-Z$_]\\w*", "name": "variable.assignment.coffee" } ] }, { "begin": "(?<=\\s|^)(\\[)(?=[^'\"#]+?\\][\\s\\]}]*=)", "beginCaptures": { "1": { "name": "punctuation.definition.destructuring.begin.bracket.square.coffee" } }, "end": "\\]", "endCaptures": { "0": { "name": "punctuation.definition.destructuring.end.bracket.square.coffee" } }, "name": "meta.variable.assignment.destructured.array.coffee", "patterns": [ { "include": "$self" }, { "match": "[a-zA-Z$_]\\w*", "name": "variable.assignment.coffee" } ] }, { "match": "\\b(?|\\-\\d|\\[|{|\"|'))", "end": "(?=\\s*(?|\\-\\d|\\[|{|\"|')))", "beginCaptures": { "1": { "name": "variable.other.readwrite.instance.coffee" }, "2": { "patterns": [ { "include": "#function_names" } ] } }, "end": "(?=\\s*(?|\\-\\d|\\[|{|\"|')))", "beginCaptures": { "1": { "name": "punctuation.separator.method.period.coffee" }, "2": { "name": "keyword.operator.prototype.coffee" }, "3": { "patterns": [ { "include": "#method_names" } ] } }, "end": "(?=\\s*(?>=|>>>=|\\|=)", "captures": { "1": { "name": "variable.assignment.coffee" }, "2": { "name": "keyword.operator.assignment.compound.bitwise.coffee" } } }, { "match": "<<|>>>|>>", "name": "keyword.operator.bitwise.shift.coffee" }, { "match": "!=|<=|>=|==|<|>", "name": "keyword.operator.comparison.coffee" }, { "match": "&&|!|\\|\\|", "name": "keyword.operator.logical.coffee" }, { "match": "&|\\||\\^|~", "name": "keyword.operator.bitwise.coffee" }, { "match": "([a-zA-Z$_][\\w$]*)?\\s*(=|:(?!:))(?![>=])", "captures": { "1": { "name": "variable.assignment.coffee" }, "2": { "name": "keyword.operator.assignment.coffee" } } }, { "match": "--", "name": "keyword.operator.decrement.coffee" }, { "match": "\\+\\+", "name": "keyword.operator.increment.coffee" }, { "match": "\\.\\.\\.", "name": "keyword.operator.splat.coffee" }, { "match": "\\?", "name": "keyword.operator.existential.coffee" }, { "match": "%|\\*|/|-|\\+", "name": "keyword.operator.coffee" }, { "match": "(?x)\n\\b(?)", "name": "meta.tag.coffee", "patterns": [ { "include": "#jsx-attribute" } ] } ] }, "jsx-end-tag": { "patterns": [ { "begin": "()", "name": "meta.tag.coffee" } ] } } }