Skip to content

Commit 3e0b520

Browse files
committed
(chore) lint Crystal
1 parent f863bce commit 3e0b520

File tree

1 file changed

+194
-64
lines changed

1 file changed

+194
-64
lines changed

src/languages/crystal.js

Lines changed: 194 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ Website: https://crystal-lang.org
66

77
/** @type LanguageFn */
88
export default function(hljs) {
9-
var INT_SUFFIX = '(_?[ui](8|16|32|64|128))?';
10-
var FLOAT_SUFFIX = '(_?f(32|64))?';
11-
var CRYSTAL_IDENT_RE = '[a-zA-Z_]\\w*[!?=]?';
12-
var CRYSTAL_METHOD_RE = '[a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|[=!]~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~|]|//|//=|&[-+*]=?|&\\*\\*|\\[\\][=?]?';
13-
var CRYSTAL_PATH_RE = '[A-Za-z_]\\w*(::\\w+)*(\\?|!)?';
14-
var CRYSTAL_KEYWORDS = {
9+
const INT_SUFFIX = '(_?[ui](8|16|32|64|128))?';
10+
const FLOAT_SUFFIX = '(_?f(32|64))?';
11+
const CRYSTAL_IDENT_RE = '[a-zA-Z_]\\w*[!?=]?';
12+
const CRYSTAL_METHOD_RE = '[a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|[=!]~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~|]|//|//=|&[-+*]=?|&\\*\\*|\\[\\][=?]?';
13+
const CRYSTAL_PATH_RE = '[A-Za-z_]\\w*(::\\w+)*(\\?|!)?';
14+
const CRYSTAL_KEYWORDS = {
1515
$pattern: CRYSTAL_IDENT_RE,
1616
keyword:
1717
'abstract alias annotation as as? asm begin break case class def do else elsif end ensure enum extend for fun if ' +
@@ -20,89 +20,191 @@ export default function(hljs) {
2020
'__DIR__ __END_LINE__ __FILE__ __LINE__',
2121
literal: 'false nil true'
2222
};
23-
var SUBST = {
23+
const SUBST = {
2424
className: 'subst',
25-
begin: /#\{/, end: /\}/,
25+
begin: /#\{/,
26+
end: /\}/,
2627
keywords: CRYSTAL_KEYWORDS
2728
};
28-
var EXPANSION = {
29+
const EXPANSION = {
2930
className: 'template-variable',
3031
variants: [
31-
{begin: '\\{\\{', end: '\\}\\}'},
32-
{begin: '\\{%', end: '%\\}'}
32+
{
33+
begin: '\\{\\{',
34+
end: '\\}\\}'
35+
},
36+
{
37+
begin: '\\{%',
38+
end: '%\\}'
39+
}
3340
],
3441
keywords: CRYSTAL_KEYWORDS
3542
};
3643

3744
function recursiveParen(begin, end) {
38-
var
39-
contains = [{begin: begin, end: end}];
45+
const
46+
contains = [
47+
{
48+
begin: begin,
49+
end: end
50+
}
51+
];
4052
contains[0].contains = contains;
4153
return contains;
4254
}
43-
var STRING = {
55+
const STRING = {
4456
className: 'string',
45-
contains: [hljs.BACKSLASH_ESCAPE, SUBST],
57+
contains: [
58+
hljs.BACKSLASH_ESCAPE,
59+
SUBST
60+
],
4661
variants: [
47-
{begin: /'/, end: /'/},
48-
{begin: /"/, end: /"/},
49-
{begin: /`/, end: /`/},
50-
{begin: '%[Qwi]?\\(', end: '\\)', contains: recursiveParen('\\(', '\\)')},
51-
{begin: '%[Qwi]?\\[', end: '\\]', contains: recursiveParen('\\[', '\\]')},
52-
{begin: '%[Qwi]?\\{', end: /\}/, contains: recursiveParen(/\{/, /\}/)},
53-
{begin: '%[Qwi]?<', end: '>', contains: recursiveParen('<', '>')},
54-
{begin: '%[Qwi]?\\|', end: '\\|'},
55-
{begin: /<<-\w+$/, end: /^\s*\w+$/},
62+
{
63+
begin: /'/,
64+
end: /'/
65+
},
66+
{
67+
begin: /"/,
68+
end: /"/
69+
},
70+
{
71+
begin: /`/,
72+
end: /`/
73+
},
74+
{
75+
begin: '%[Qwi]?\\(',
76+
end: '\\)',
77+
contains: recursiveParen('\\(', '\\)')
78+
},
79+
{
80+
begin: '%[Qwi]?\\[',
81+
end: '\\]',
82+
contains: recursiveParen('\\[', '\\]')
83+
},
84+
{
85+
begin: '%[Qwi]?\\{',
86+
end: /\}/,
87+
contains: recursiveParen(/\{/, /\}/)
88+
},
89+
{
90+
begin: '%[Qwi]?<',
91+
end: '>',
92+
contains: recursiveParen('<', '>')
93+
},
94+
{
95+
begin: '%[Qwi]?\\|',
96+
end: '\\|'
97+
},
98+
{
99+
begin: /<<-\w+$/,
100+
end: /^\s*\w+$/
101+
}
56102
],
57-
relevance: 0,
103+
relevance: 0
58104
};
59-
var Q_STRING = {
105+
const Q_STRING = {
60106
className: 'string',
61107
variants: [
62-
{begin: '%q\\(', end: '\\)', contains: recursiveParen('\\(', '\\)')},
63-
{begin: '%q\\[', end: '\\]', contains: recursiveParen('\\[', '\\]')},
64-
{begin: '%q\\{', end: /\}/, contains: recursiveParen(/\{/, /\}/)},
65-
{begin: '%q<', end: '>', contains: recursiveParen('<', '>')},
66-
{begin: '%q\\|', end: '\\|'},
67-
{begin: /<<-'\w+'$/, end: /^\s*\w+$/},
108+
{
109+
begin: '%q\\(',
110+
end: '\\)',
111+
contains: recursiveParen('\\(', '\\)')
112+
},
113+
{
114+
begin: '%q\\[',
115+
end: '\\]',
116+
contains: recursiveParen('\\[', '\\]')
117+
},
118+
{
119+
begin: '%q\\{',
120+
end: /\}/,
121+
contains: recursiveParen(/\{/, /\}/)
122+
},
123+
{
124+
begin: '%q<',
125+
end: '>',
126+
contains: recursiveParen('<', '>')
127+
},
128+
{
129+
begin: '%q\\|',
130+
end: '\\|'
131+
},
132+
{
133+
begin: /<<-'\w+'$/,
134+
end: /^\s*\w+$/
135+
}
68136
],
69-
relevance: 0,
137+
relevance: 0
70138
};
71-
var REGEXP = {
139+
const REGEXP = {
72140
begin: '(?!%\\})(' + hljs.RE_STARTERS_RE + '|\\n|\\b(case|if|select|unless|until|when|while)\\b)\\s*',
73141
keywords: 'case if select unless until when while',
74142
contains: [
75143
{
76144
className: 'regexp',
77-
contains: [hljs.BACKSLASH_ESCAPE, SUBST],
145+
contains: [
146+
hljs.BACKSLASH_ESCAPE,
147+
SUBST
148+
],
78149
variants: [
79-
{begin: '//[a-z]*', relevance: 0},
80-
{begin: '/(?!\\/)', end: '/[a-z]*'},
150+
{
151+
begin: '//[a-z]*',
152+
relevance: 0
153+
},
154+
{
155+
begin: '/(?!\\/)',
156+
end: '/[a-z]*'
157+
}
81158
]
82159
}
83160
],
84161
relevance: 0
85162
};
86-
var REGEXP2 = {
163+
const REGEXP2 = {
87164
className: 'regexp',
88-
contains: [hljs.BACKSLASH_ESCAPE, SUBST],
165+
contains: [
166+
hljs.BACKSLASH_ESCAPE,
167+
SUBST
168+
],
89169
variants: [
90-
{begin: '%r\\(', end: '\\)', contains: recursiveParen('\\(', '\\)')},
91-
{begin: '%r\\[', end: '\\]', contains: recursiveParen('\\[', '\\]')},
92-
{begin: '%r\\{', end: /\}/, contains: recursiveParen(/\{/, /\}/)},
93-
{begin: '%r<', end: '>', contains: recursiveParen('<', '>')},
94-
{begin: '%r\\|', end: '\\|'},
170+
{
171+
begin: '%r\\(',
172+
end: '\\)',
173+
contains: recursiveParen('\\(', '\\)')
174+
},
175+
{
176+
begin: '%r\\[',
177+
end: '\\]',
178+
contains: recursiveParen('\\[', '\\]')
179+
},
180+
{
181+
begin: '%r\\{',
182+
end: /\}/,
183+
contains: recursiveParen(/\{/, /\}/)
184+
},
185+
{
186+
begin: '%r<',
187+
end: '>',
188+
contains: recursiveParen('<', '>')
189+
},
190+
{
191+
begin: '%r\\|',
192+
end: '\\|'
193+
}
95194
],
96195
relevance: 0
97196
};
98-
var ATTRIBUTE = {
197+
const ATTRIBUTE = {
99198
className: 'meta',
100-
begin: '@\\[', end: '\\]',
199+
begin: '@\\[',
200+
end: '\\]',
101201
contains: [
102-
hljs.inherit(hljs.QUOTE_STRING_MODE, {className: 'meta-string'})
202+
hljs.inherit(hljs.QUOTE_STRING_MODE, {
203+
className: 'meta-string'
204+
})
103205
]
104206
};
105-
var CRYSTAL_DEFAULT_CONTAINS = [
207+
const CRYSTAL_DEFAULT_CONTAINS = [
106208
EXPANSION,
107209
STRING,
108210
Q_STRING,
@@ -112,36 +214,48 @@ export default function(hljs) {
112214
hljs.HASH_COMMENT_MODE,
113215
{
114216
className: 'class',
115-
beginKeywords: 'class module struct', end: '$|;',
217+
beginKeywords: 'class module struct',
218+
end: '$|;',
116219
illegal: /=/,
117220
contains: [
118221
hljs.HASH_COMMENT_MODE,
119-
hljs.inherit(hljs.TITLE_MODE, {begin: CRYSTAL_PATH_RE}),
120-
{begin: '<'} // relevance booster for inheritance
222+
hljs.inherit(hljs.TITLE_MODE, {
223+
begin: CRYSTAL_PATH_RE
224+
}),
225+
{ // relevance booster for inheritance
226+
begin: '<'
227+
}
121228
]
122229
},
123230
{
124231
className: 'class',
125-
beginKeywords: 'lib enum union', end: '$|;',
232+
beginKeywords: 'lib enum union',
233+
end: '$|;',
126234
illegal: /=/,
127235
contains: [
128236
hljs.HASH_COMMENT_MODE,
129-
hljs.inherit(hljs.TITLE_MODE, {begin: CRYSTAL_PATH_RE}),
237+
hljs.inherit(hljs.TITLE_MODE, {
238+
begin: CRYSTAL_PATH_RE
239+
})
130240
],
131241
relevance: 10
132242
},
133243
{
134-
beginKeywords: 'annotation', end: '$|;',
244+
beginKeywords: 'annotation',
245+
end: '$|;',
135246
illegal: /=/,
136247
contains: [
137248
hljs.HASH_COMMENT_MODE,
138-
hljs.inherit(hljs.TITLE_MODE, {begin: CRYSTAL_PATH_RE}),
249+
hljs.inherit(hljs.TITLE_MODE, {
250+
begin: CRYSTAL_PATH_RE
251+
})
139252
],
140253
relevance: 10
141254
},
142255
{
143256
className: 'function',
144-
beginKeywords: 'def', end: /\B\b/,
257+
beginKeywords: 'def',
258+
end: /\B\b/,
145259
contains: [
146260
hljs.inherit(hljs.TITLE_MODE, {
147261
begin: CRYSTAL_METHOD_RE,
@@ -151,7 +265,8 @@ export default function(hljs) {
151265
},
152266
{
153267
className: 'function',
154-
beginKeywords: 'fun macro', end: /\B\b/,
268+
beginKeywords: 'fun macro',
269+
end: /\B\b/,
155270
contains: [
156271
hljs.inherit(hljs.TITLE_MODE, {
157272
begin: CRYSTAL_METHOD_RE,
@@ -168,17 +283,32 @@ export default function(hljs) {
168283
{
169284
className: 'symbol',
170285
begin: ':',
171-
contains: [STRING, {begin: CRYSTAL_METHOD_RE}],
286+
contains: [
287+
STRING,
288+
{
289+
begin: CRYSTAL_METHOD_RE
290+
}
291+
],
172292
relevance: 0
173293
},
174294
{
175295
className: 'number',
176296
variants: [
177-
{ begin: '\\b0b([01_]+)' + INT_SUFFIX },
178-
{ begin: '\\b0o([0-7_]+)' + INT_SUFFIX },
179-
{ begin: '\\b0x([A-Fa-f0-9_]+)' + INT_SUFFIX },
180-
{ begin: '\\b([1-9][0-9_]*[0-9]|[0-9])(\\.[0-9][0-9_]*)?([eE]_?[-+]?[0-9_]*)?' + FLOAT_SUFFIX + '(?!_)' },
181-
{ begin: '\\b([1-9][0-9_]*|0)' + INT_SUFFIX }
297+
{
298+
begin: '\\b0b([01_]+)' + INT_SUFFIX
299+
},
300+
{
301+
begin: '\\b0o([0-7_]+)' + INT_SUFFIX
302+
},
303+
{
304+
begin: '\\b0x([A-Fa-f0-9_]+)' + INT_SUFFIX
305+
},
306+
{
307+
begin: '\\b([1-9][0-9_]*[0-9]|[0-9])(\\.[0-9][0-9_]*)?([eE]_?[-+]?[0-9_]*)?' + FLOAT_SUFFIX + '(?!_)'
308+
},
309+
{
310+
begin: '\\b([1-9][0-9_]*|0)' + INT_SUFFIX
311+
}
182312
],
183313
relevance: 0
184314
}
@@ -188,7 +318,7 @@ export default function(hljs) {
188318

189319
return {
190320
name: 'Crystal',
191-
aliases: ['cr'],
321+
aliases: [ 'cr' ],
192322
keywords: CRYSTAL_KEYWORDS,
193323
contains: CRYSTAL_DEFAULT_CONTAINS
194324
};

0 commit comments

Comments
 (0)