@@ -0,0 +1,271 @@
1+%YAML 1.2
2+---
3+# http://www.sublimetext.com/docs/3/syntax.html
4+name: CoffeeScript
5+comment: "CoffeeScript Syntax: version 1"
6+file_extensions:
7+ - coffee
8+ - Cakefile
9+ - coffee.erb
10+ - cson
11+first_line_match: ^#!.*\bcoffee
12+scope: source.coffee
13+contexts:
14+ main:
15+ - match: '(\([^()]*?\))\s*([=-]>)'
16+ comment: "match stuff like: a -> …"
17+ scope: meta.inline.function.coffee
18+ captures:
19+ 1: variable.parameter.function.coffee
20+ 2: storage.type.function.coffee
21+ - match: (new)\s+(\w+(?:\.\w*)*)
22+ scope: meta.class.instance.constructor
23+ captures:
24+ 1: keyword.operator.new.coffee
25+ 2: support.class.coffee
26+ - match: "'''"
27+ captures:
28+ 0: punctuation.definition.string.begin.coffee
29+ push:
30+ - meta_scope: string.quoted.heredoc.coffee
31+ - match: "'''"
32+ captures:
33+ 0: punctuation.definition.string.end.coffee
34+ pop: true
35+ - match: '"""'
36+ captures:
37+ 0: punctuation.definition.string.begin.coffee
38+ push:
39+ - meta_scope: string.quoted.double.heredoc.coffee
40+ - match: '"""'
41+ captures:
42+ 0: punctuation.definition.string.end.coffee
43+ pop: true
44+ - match: \\.
45+ scope: constant.character.escape.coffee
46+ - include: interpolated_coffee
47+ - match: "`"
48+ captures:
49+ 0: punctuation.definition.string.begin.coffee
50+ push:
51+ - meta_scope: string.quoted.script.coffee
52+ - match: "`"
53+ captures:
54+ 0: punctuation.definition.string.end.coffee
55+ pop: true
56+ - match: '\\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)'
57+ scope: constant.character.escape.coffee
58+ - match: (?<!#)###(?!#)
59+ captures:
60+ 0: punctuation.definition.comment.coffee
61+ push:
62+ - meta_scope: comment.block.coffee
63+ - match: '###(?:[ \t]*\n)'
64+ captures:
65+ 0: punctuation.definition.comment.coffee
66+ pop: true
67+ - match: '@\w*'
68+ scope: storage.type.annotation.coffeescript
69+ - match: '(#)(?!\{).*$\n?'
70+ scope: comment.line.number-sign.coffee
71+ captures:
72+ 1: punctuation.definition.comment.coffee
73+ - match: "/{3}"
74+ push:
75+ - meta_scope: string.regexp.coffee
76+ - match: "/{3}[imgy]{0,4}"
77+ pop: true
78+ - include: interpolated_coffee
79+ - include: embedded_comment
80+ - match: '/(?![\s=/*+{}?]).*?[^\\]/[igmy]{0,4}(?![a-zA-Z0-9])'
81+ scope: string.regexp.coffee
82+ - match: |-
83+ (?x)
84+ \b(?<![\.\$])(
85+ break|by|catch|continue|else|finally|for|in|of|if|return|switch|
86+ then|throw|try|unless|when|while|until|loop|do|(?<=for)\s+own
87+ )(?!\s*:)\b
88+ scope: keyword.control.coffee
89+ - match: |-
90+ (?x)
91+ and=|or=|!|%|&|\^|\*|\/|(\-)?\-(?!>)|\+\+|\+|~|==|=(?!>)|!=|<=|>=|<<=|>>=|
92+ >>>=|<>|<|>|!|&&|\.\.(\.)?|\?|\||\|\||\:|\*=|(?<!\()/=|%=|\+=|\-=|&=|
93+ \^=|\b(?<![\.\$])(instanceof|new|delete|typeof|and|or|is|isnt|not|super)\b
94+ scope: keyword.operator.coffee
95+ - match: '([a-zA-Z\$_](\w|\$|\.)*\s*(?!\::)((:)|(=[^=]))(?!(\s*\(.*\))?\s*((=|-)>)))'
96+ scope: variable.assignment.coffee
97+ captures:
98+ 1: variable.assignment.coffee
99+ 4: punctuation.separator.key-value
100+ 5: keyword.operator.coffee
101+ - match: '(?<=\s|^)([\[\{])(?=.*?[\]\}]\s+[:=])'
102+ captures:
103+ 0: keyword.operator.coffee
104+ push:
105+ - meta_scope: meta.variable.assignment.destructured.coffee
106+ - match: '([\]\}]\s*[:=])'
107+ captures:
108+ 0: keyword.operator.coffee
109+ pop: true
110+ - include: variable_name
111+ - include: instance_variable
112+ - include: single_quoted_string
113+ - include: double_quoted_string
114+ - include: numeric
115+ - match: |-
116+ (?x)
117+ (\s*)
118+ (?=[a-zA-Z\$_])
119+ (
120+ [a-zA-Z\$_](\w|\$|:|\.)*\s*
121+ (?=[:=](\s*\(.*\))?\s*([=-]>))
122+ )
123+ scope: meta.function.coffee
124+ captures:
125+ 2: entity.name.function.coffee
126+ 3: entity.name.function.coffee
127+ 4: variable.parameter.function.coffee
128+ 5: storage.type.function.coffee
129+ - match: ^\s*(describe|it|app\.(get|post|put|all|del|delete))
130+ comment: Show well-known functions from Express and Mocha in Go To Symbol view
131+ push:
132+ - meta_scope: meta.function.symbols.coffee
133+ - match: $
134+ pop: true
135+ - include: main
136+ - match: "[=-]>"
137+ scope: storage.type.function.coffee
138+ - match: '\b(?<!\.)(true|on|yes)(?!\s*[:=])\b'
139+ scope: constant.language.boolean.true.coffee
140+ - match: '\b(?<!\.)(false|off|no)(?!\s*[:=])\b'
141+ scope: constant.language.boolean.false.coffee
142+ - match: '\b(?<!\.)null(?!\s*[:=])\b'
143+ scope: constant.language.null.coffee
144+ - match: '\b(?<!\.)(this|extends)(?!\s*[:=])\b'
145+ scope: variable.language.coffee
146+ - match: '(class\b)\s+(@?[a-zA-Z\$_][\w\.]*)?(?:\s+(extends)\s+(@?[a-zA-Z\$\._][\w\.]*))?'
147+ scope: meta.class.coffee
148+ captures:
149+ 1: storage.type.class.coffee
150+ 2: entity.name.type.class.coffee
151+ 3: keyword.control.inheritance.coffee
152+ 4: entity.other.inherited-class.coffee
153+ - match: \b(debugger|\\)\b
154+ scope: keyword.other.coffee
155+ - match: |-
156+ (?x)\b(
157+ Array|ArrayBuffer|Blob|Boolean|Date|document|event|Function|
158+ Int(8|16|32|64)Array|Math|Map|Number|
159+ Object|Proxy|RegExp|Set|String|WeakMap|
160+ window|Uint(8|16|32|64)Array|XMLHttpRequest
161+ )\b
162+ scope: support.class.coffee
163+ - match: ((?<=console\.)(debug|warn|info|log|error|time|timeEnd|assert))\b
164+ scope: support.function.console.coffee
165+ - match: |-
166+ (?x)\b(
167+ decodeURI(Component)?|encodeURI(Component)?|eval|parse(Float|Int)|require
168+ )\b
169+ scope: support.function.coffee
170+ - match: |-
171+ (?x)((?<=\.)(
172+ apply|call|concat|every|filter|forEach|from|hasOwnProperty|indexOf|
173+ isPrototypeOf|join|lastIndexOf|map|of|pop|propertyIsEnumerable|push|
174+ reduce(Right)?|reverse|shift|slice|some|sort|splice|to(Locale)?String|
175+ unshift|valueOf
176+ ))\b
177+ scope: support.function.method.array.coffee
178+ - match: |-
179+ (?x)((?<=Array\.)(
180+ isArray
181+ ))\b
182+ scope: support.function.static.array.coffee
183+ - match: |-
184+ (?x)((?<=Object\.)(
185+ create|definePropert(ies|y)|freeze|getOwnProperty(Descriptors?|Names)|
186+ getProperty(Descriptor|Names)|getPrototypeOf|is(Extensible|Frozen|Sealed)?|
187+ isnt|keys|preventExtensions|seal
188+ ))\b
189+ scope: support.function.static.object.coffee
190+ - match: |-
191+ (?x)((?<=Math\.)(
192+ abs|acos|acosh|asin|asinh|atan|atan2|atanh|ceil|cos|cosh|exp|expm1|floor|
193+ hypot|log|log10|log1p|log2|max|min|pow|random|round|sign|sin|sinh|sqrt|
194+ tan|tanh|trunc
195+ ))\b
196+ scope: support.function.static.math.coffee
197+ - match: |-
198+ (?x)((?<=Number\.)(
199+ is(Finite|Integer|NaN)|toInteger
200+ ))\b
201+ scope: support.function.static.number.coffee
202+ - match: \b(Infinity|NaN|undefined)\b
203+ scope: constant.language.coffee
204+ - match: \;
205+ scope: punctuation.terminator.statement.coffee
206+ - match: ',[ |\t]*'
207+ scope: meta.delimiter.object.comma.coffee
208+ - match: \.
209+ scope: meta.delimiter.method.period.coffee
210+ - match: '\{|\}'
211+ scope: meta.brace.curly.coffee
212+ - match: \(|\)
213+ scope: meta.brace.round.coffee
214+ - match: '\[|\]\s*'
215+ scope: meta.brace.square.coffee
216+ - include: instance_variable
217+ - include: single_quoted_string
218+ - include: double_quoted_string
219+ - include: numeric
220+ double_quoted_string:
221+ - match: '"'
222+ captures:
223+ 0: punctuation.definition.string.begin.coffee
224+ push:
225+ - meta_scope: string.quoted.double.coffee
226+ - match: '"'
227+ captures:
228+ 0: punctuation.definition.string.end.coffee
229+ pop: true
230+ - match: '\\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)'
231+ scope: constant.character.escape.coffee
232+ - include: interpolated_coffee
233+ embedded_comment:
234+ - match: (?<!\\)(#).*$\n?
235+ scope: comment.line.number-sign.coffee
236+ captures:
237+ 1: punctuation.definition.comment.coffee
238+ instance_variable:
239+ - match: '(@)([a-zA-Z_\$]\w*)?'
240+ scope: variable.other.readwrite.instance.coffee
241+ interpolated_coffee:
242+ - match: '\#\{'
243+ captures:
244+ 0: punctuation.section.embedded.coffee
245+ push:
246+ - meta_scope: source.coffee.embedded.source
247+ - match: '\}'
248+ captures:
249+ 0: punctuation.section.embedded.coffee
250+ pop: true
251+ - include: main
252+ numeric:
253+ - match: '(?<!\$)\b((0([box])[0-9a-fA-F]+)|([0-9]+(\.[0-9]+)?(e[+\-]?[0-9]+)?))\b'
254+ scope: constant.numeric.coffee
255+ single_quoted_string:
256+ - match: "'"
257+ captures:
258+ 0: punctuation.definition.string.begin.coffee
259+ push:
260+ - meta_scope: string.quoted.single.coffee
261+ - match: "'"
262+ captures:
263+ 0: punctuation.definition.string.end.coffee
264+ pop: true
265+ - match: '\\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)'
266+ scope: constant.character.escape.coffee
267+ variable_name:
268+ - match: '([a-zA-Z\$_]\w*(\.\w+)*)'
269+ scope: variable.assignment.coffee
270+ captures:
271+ 1: variable.assignment.coffee