diff --git a/extensions/coffeescript/OSSREADME.json b/extensions/coffeescript/OSSREADME.json index 08ab8d0b59e..92bff23d04d 100644 --- a/extensions/coffeescript/OSSREADME.json +++ b/extensions/coffeescript/OSSREADME.json @@ -1,7 +1,9 @@ // ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS: [{ - "name": "textmate/coffee-script.tmbundle", + "name": "atom/language-coffee-script", "version": "0.0.0", - "license": "TextMate Bundle License", - "repositoryURL": "https://github.com/textmate/coffee-script.tmbundle" + "license": "MIT", + "repositoryURL": "https://github.com/atom/language-coffee-script", + "description": "The file syntaxes/coffeescript.tmLanguage.json was derived from the Atom package https://github.com/atom/language-coffee-script which was originally converted from the TextMate bundle https://github.com/jashkenas/coffee-script-tmbundle." + }] diff --git a/extensions/coffeescript/package.json b/extensions/coffeescript/package.json index 841a3846a54..5c8f11b7206 100644 --- a/extensions/coffeescript/package.json +++ b/extensions/coffeescript/package.json @@ -4,7 +4,7 @@ "publisher": "vscode", "engines": { "vscode": "*" }, "scripts": { - "update-grammar": "node ../../build/npm/update-grammar.js textmate/coffee-script.tmbundle Syntaxes/CoffeeScript.tmLanguage ./syntaxes/coffeescript.json" + "update-grammar": "node ../../build/npm/update-grammar.js atom/language-coffee-script grammars/coffeescript.cson ./syntaxes/coffeescript.tmLanguage.json" }, "contributes": { "languages": [{ @@ -16,7 +16,7 @@ "grammars": [{ "language": "coffeescript", "scopeName": "source.coffee", - "path": "./syntaxes/coffeescript.json" + "path": "./syntaxes/coffeescript.tmLanguage.json" }], "breakpoints": [ { diff --git a/extensions/coffeescript/syntaxes/coffeescript.tmLanguage.json b/extensions/coffeescript/syntaxes/coffeescript.tmLanguage.json new file mode 100644 index 00000000000..663f548d4c6 --- /dev/null +++ b/extensions/coffeescript/syntaxes/coffeescript.tmLanguage.json @@ -0,0 +1,666 @@ +{ + "scopeName": "source.coffee", + "name": "CoffeeScript", + "fileTypes": [ + "coffee", + "Cakefile", + "coffee.erb", + "cson", + "_coffee" + ], + "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": [ + { + "captures": { + "1": { + "name": "variable.parameter.function.coffee" + }, + "2": { + "name": "storage.type.function.coffee" + } + }, + "comment": "match stuff like: a -> … ", + "match": "(\\([^()]*?\\))\\s*([=-]>)", + "name": "meta.inline.function.coffee" + }, + { + "captures": { + "1": { + "name": "keyword.operator.new.coffee" + }, + "4": { + "name": "storage.type.class.coffee" + }, + "6": { + "name": "entity.name.type.instance.coffee" + }, + "7": { + "name": "entity.name.type.instance.coffee" + } + }, + "match": "(new)\\s+(((class)(\\s+(\\w+(?:\\.\\w*)*))?)|(\\w+(?:\\.\\w*)*))", + "name": "meta.class.instance.constructor" + }, + { + "begin": "'''", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.coffee" + } + }, + "end": "'''", + "endCaptures": { + "0": { + "name": "punctuation.definition.string.end.coffee" + } + }, + "name": "string.quoted.heredoc.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": [ + { + "match": "\\\\.", + "name": "constant.character.escape.coffee" + }, + { + "include": "#interpolated_coffee" + } + ] + }, + { + "begin": "`", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.coffee" + } + }, + "end": "`", + "endCaptures": { + "0": { + "name": "punctuation.definition.string.end.coffee" + } + }, + "name": "string.quoted.script.coffee", + "patterns": [ + { + "match": "(xh{2}|[0-2][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)", + "name": "constant.character.escape.coffee" + } + ] + }, + { + "begin": "(?>>?|(?*%+\\-&^])?=(?!>)|[!%^*\\/~?:]|\\-?\\-(?!>)|\\+\\+?|<>|<|>|&&?|\\.\\.\\.?|\\|\\|?|\\b(?=]))(?!(\\s*\\(.*\\))?\\s*([=-]>))", + "captures": { + "1": { + "name": "variable.assignment.coffee" + }, + "2": { + "name": "punctuation.separator.key-value" + }, + "3": { + "name": "keyword.operator.coffee" + } + } + }, + { + "begin": "(?<=\\s|^)({)(?=[^'\"#]+?}[\\s\\]}]*=)", + "beginCaptures": { + "1": { + "name": "punctuation.definition.destructuring.begin.bracket.curly.coffee" + } + }, + "end": "(})", + "endCaptures": { + "1": { + "name": "punctuation.definition.destructuring.end.bracket.curly.coffee" + } + }, + "name": "meta.variable.assignment.destructured.object.coffee", + "patterns": [ + { + "include": "$self" + }, + { + "include": "#variable_name" + } + ] + }, + { + "begin": "(?<=\\s|^)(\\[)(?=[^'\"#]+?}[\\s\\]}]*=)", + "beginCaptures": { + "1": { + "name": "punctuation.definition.destructuring.begin.bracket.square.coffee" + } + }, + "end": "(\\])", + "endCaptures": { + "1": { + "name": "punctuation.definition.destructuring.end.bracket.square.coffee" + } + }, + "name": "meta.variable.assignment.destructured.array.coffee", + "patterns": [ + { + "include": "$self" + }, + { + "include": "#variable_name" + } + ] + }, + { + "match": "(?x)\n(?<=^|\\s)\n(?=@?[a-zA-Z\\$_])\n@?([a-zA-Z\\$_]\\w*)(\\$|:|\\.)?\\s*\n(?=[:=](\\s*\\(.*\\))?\\s*([=-]>))", + "captures": { + "1": { + "name": "entity.name.function.coffee" + }, + "3": { + "name": "variable.parameter.function.coffee" + }, + "4": { + "name": "storage.type.function.coffee" + } + }, + "name": "meta.function.coffee" + }, + { + "match": "\\b(?|\\-\\d|\\[|\\{|\"|'))|(?=\\())", + "captures": { + "4": { + "name": "entity.name.function.coffee" + } + } + }, + { + "match": "[=-]>", + "name": "storage.type.function.coffee" + }, + { + "match": "\\b(?