Skip to content

Commit 314bb55

Browse files
committed
fixup symbols, split out heredoc
1 parent f36f1bb commit 314bb55

File tree

3 files changed

+59
-28
lines changed

3 files changed

+59
-28
lines changed

src/languages/ruby.js

Lines changed: 47 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ export default function(hljs) {
168168
]
169169
}
170170

171+
// TODO: continue to break these out into smaller more discrete modes
171172
const OLD_STRINGS_TOO_MANY_VARIANTS = {
172173
className: 'string',
173174
contains: [ hljs.BACKSLASH_ESCAPE ],
@@ -251,31 +252,33 @@ export default function(hljs) {
251252
{ begin: /\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/ },
252253
{ begin: /\B\?\\(c|C-)[\x20-\x7e]/ },
253254
{ begin: /\B\?\\?\S/ },
254-
// heredocs
255-
{
256-
// this guard makes sure that we have an entire heredoc and not a false
257-
// positive (auto-detect, etc.)
258-
begin: regex.concat(
259-
/<<[-~]?'?/,
260-
regex.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)
261-
),
255+
]
256+
};
257+
258+
const HEREDOC = {
259+
scope: "string",
260+
// this guard makes sure that we have an entire heredoc and not a false
261+
// positive (auto-detect, etc.)
262+
begin: regex.concat(
263+
/<<[-~]?'?/,
264+
regex.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)
265+
),
266+
contains: [
267+
hljs.END_SAME_AS_BEGIN({
268+
begin: /(\w+)/,
269+
end: /(\w+)/,
262270
contains: [
263-
hljs.END_SAME_AS_BEGIN({
264-
begin: /(\w+)/,
265-
end: /(\w+)/,
266-
contains: [
267-
hljs.BACKSLASH_ESCAPE,
268-
SUBST
269-
]
270-
})
271+
hljs.BACKSLASH_ESCAPE,
272+
SUBST
271273
]
272-
}
274+
})
273275
]
274-
};
276+
}
275277

276278
const STRINGS = [
277279
SINGLE_QUOTED_STRING,
278280
DOUBLE_QUOTED_STRING,
281+
HEREDOC,
279282
OLD_STRINGS_TOO_MANY_VARIANTS
280283
]
281284

@@ -392,7 +395,33 @@ export default function(hljs) {
392395
scope: "title.class"
393396
};
394397

398+
const SYMBOL = {
399+
className: 'symbol',
400+
variants: [
401+
{
402+
begin: regex.concat(/:/, RUBY_METHOD_RE)
403+
},
404+
{
405+
begin: /:"/,
406+
end: /"/,
407+
contains: [
408+
hljs.BACKSLASH_ESCAPE,
409+
SUBST
410+
]
411+
},
412+
{
413+
begin: /:'/,
414+
end: /'/,
415+
contains: [
416+
hljs.BACKSLASH_ESCAPE
417+
]
418+
}
419+
],
420+
relevance: 0
421+
};
422+
395423
const RUBY_DEFAULT_CONTAINS = [
424+
SYMBOL,
396425
...STRINGS,
397426
CLASS_DEFINITION,
398427
INCLUDE_EXTEND,
@@ -408,16 +437,6 @@ export default function(hljs) {
408437
begin: hljs.UNDERSCORE_IDENT_RE + '(!|\\?)?:',
409438
relevance: 0
410439
},
411-
{
412-
className: 'symbol',
413-
begin: ':(?!\\s)',
414-
contains: [
415-
// TODO: STRING, STRINGS, double quoted?
416-
OLD_STRINGS_TOO_MANY_VARIANTS,
417-
{ begin: RUBY_METHOD_RE }
418-
],
419-
relevance: 0
420-
},
421440
NUMBER,
422441
{
423442
// negative-look forward attempts to prevent false matches like:

test/markup/ruby/strings.expect.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ c = <span class="hljs-string">?\c\M-x</span> <span class="hljs-comment"># me
2222
c = <span class="hljs-string">?\c?</span> <span class="hljs-comment"># delete, ASCII 7Fh (DEL)</span>
2323
c = <span class="hljs-string">?\C-?</span> <span class="hljs-comment"># delete, ASCII 7Fh (DEL)</span>
2424

25+
<span class="hljs-comment"># symbols</span>
26+
c = <span class="hljs-symbol">:booger</span> <span class="hljs-comment">#=&gt; :booger</span>
27+
c = <span class="hljs-symbol">:&quot;booger&quot;</span> <span class="hljs-comment">#=&gt; :booger</span>
28+
c = <span class="hljs-symbol">:&#x27;booger&#x27;</span> <span class="hljs-comment">#=&gt; :booger</span>
29+
c = <span class="hljs-symbol">:&quot;b<span class="hljs-subst">#{yum}</span>ger&quot;</span> <span class="hljs-comment">#=&gt; :burger</span>
30+
2531
<span class="hljs-comment"># Unicode character(s) of type \u{nnnn ....}, where each nnnn is 1-6 hexadecimal digits ([0-9a-fA-F])</span>
2632
c = <span class="hljs-string">?\u{00AF09}</span>
2733
c = <span class="hljs-string">?\u{0AF09}</span>

test/markup/ruby/strings.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ c = ?\c\M-x # meta control character, where x is an ASCII printable characte
2222
c = ?\c? # delete, ASCII 7Fh (DEL)
2323
c = ?\C-? # delete, ASCII 7Fh (DEL)
2424

25+
# symbols
26+
c = :booger #=> :booger
27+
c = :"booger" #=> :booger
28+
c = :'booger' #=> :booger
29+
c = :"b#{yum}ger" #=> :burger
30+
2531
# Unicode character(s) of type \u{nnnn ....}, where each nnnn is 1-6 hexadecimal digits ([0-9a-fA-F])
2632
c = ?\u{00AF09}
2733
c = ?\u{0AF09}

0 commit comments

Comments
 (0)