on 5f6e310 help sign in
bat/assets/syntaxes/02_Extra/CoffeeScript.sublime-syntax
271 lines 9.5 kB history raw
1%YAML 1.2
2---
3# http://www.sublimetext.com/docs/3/syntax.html
4name: CoffeeScript
5comment: "CoffeeScript Syntax: version 1"
6file_extensions:
7 - coffee
8 - Cakefile
9 - coffee.erb
10 - cson
11first_line_match: ^#!.*\bcoffee
12scope: source.coffee
13contexts:
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