Skip to content

Commit c74b08d

Browse files
authored
enh(ruby) support multi-line irb prompts (#3488)
1 parent 7169cd8 commit c74b08d

File tree

4 files changed

+34
-6
lines changed

4 files changed

+34
-6
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ New Grammars:
1010

1111
Grammars:
1212

13+
- enh(ruby ) better support multi-line IRB prompts
1314
- enh(bash) improved keyword `$pattern` (numbers allowed in command names) [Martin Mattel][]
1415
- fix(markdown) Handle `***Hello world***` without breaking [Josh Goebel][]
1516
- enh(php) add support for PHP Attributes [Wojciech Kania][]

src/languages/ruby.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ export default function(hljs) {
276276
// ?>
277277
const SIMPLE_PROMPT = "[>?]>";
278278
// irb(main):001:0>
279-
const DEFAULT_PROMPT = "[\\w#]+\\(\\w+\\):\\d+:\\d+>";
279+
const DEFAULT_PROMPT = "[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]";
280280
const RVM_PROMPT = "(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>";
281281

282282
const IRB_DEFAULT = [
@@ -292,6 +292,7 @@ export default function(hljs) {
292292
begin: '^(' + SIMPLE_PROMPT + "|" + DEFAULT_PROMPT + '|' + RVM_PROMPT + ')(?=[ ])',
293293
starts: {
294294
end: '$',
295+
keywords: RUBY_KEYWORDS,
295296
contains: RUBY_DEFAULT_CONTAINS
296297
}
297298
}

test/markup/ruby/prompt.expect.txt

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<span class="hljs-meta">2.0.0p0 :001 &gt;</span> [<span class="hljs-string">&#x27;some&#x27;</span>]
22
=&gt; [<span class="hljs-string">&quot;some&quot;</span>]
3-
<span class="hljs-meta">2.0.0p0 :002 &gt;</span> if true
3+
<span class="hljs-meta">2.0.0p0 :002 &gt;</span> <span class="hljs-keyword">if</span> <span class="hljs-literal">true</span>
44
<span class="hljs-meta">2.0.0p0 :003?&gt;</span> <span class="hljs-string">&quot;yop&quot;</span>
5-
<span class="hljs-meta">2.0.0p0 :004?&gt;</span> end
5+
<span class="hljs-meta">2.0.0p0 :004?&gt;</span> <span class="hljs-keyword">end</span>
66
=&gt; <span class="hljs-string">&quot;yop&quot;</span>
77

88
<span class="hljs-meta">jruby-1.7.16 :001 &gt;</span> <span class="hljs-string">&quot;RVM-Format&quot;</span>
@@ -13,11 +13,24 @@
1313
=&gt; [#&lt;OpenStruct integer=987, symbol=:so_great&gt;, #&lt;OpenStruct integer=987, symbol=:so_great&gt;, #&lt;OpenStruct integer=987, symbol=:so_great&gt;]
1414
<span class="hljs-meta">&gt;&gt;</span> {<span class="hljs-number">1</span> =&gt; obj, <span class="hljs-number">2</span> =&gt; obj}
1515
=&gt; {<span class="hljs-number">1</span>=&gt;#&lt;OpenStruct integer=987, symbol=:so_great&gt;, <span class="hljs-number">2</span>=&gt;#&lt;OpenStruct integer=987, symbol=:so_great&gt;}
16-
<span class="hljs-meta">&gt;&gt;</span> if <span class="hljs-number">10</span> &gt; <span class="hljs-number">20</span>
16+
<span class="hljs-meta">&gt;&gt;</span> <span class="hljs-keyword">if</span> <span class="hljs-number">10</span> &gt; <span class="hljs-number">20</span>
1717
<span class="hljs-meta">&gt;&gt;</span> <span class="hljs-string">&quot;YEAH&quot;</span>
18-
<span class="hljs-meta">&gt;&gt;</span> else
18+
<span class="hljs-meta">&gt;&gt;</span> <span class="hljs-keyword">else</span>
1919
<span class="hljs-meta">?&gt;</span> <span class="hljs-string">&quot;NO&quot;</span>
20-
<span class="hljs-meta">&gt;&gt;</span> end
20+
<span class="hljs-meta">&gt;&gt;</span> <span class="hljs-keyword">end</span>
2121
=&gt; <span class="hljs-string">&quot;NO&quot;</span>
2222

2323
<span class="hljs-meta">irb(main):002:0&gt;</span> test = <span class="hljs-number">1</span>
24+
25+
<span class="hljs-meta">irb(main):001:1*</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Secret</span></span>
26+
<span class="hljs-meta">irb(main):002:2*</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">[]</span><span class="hljs-params">(x)</span></span>
27+
<span class="hljs-meta">irb(main):003:2*</span> <span class="hljs-string">&quot;TREASURE&quot;</span> <span class="hljs-keyword">if</span> x==<span class="hljs-number">42</span>
28+
<span class="hljs-meta">irb(main):004:1*</span> <span class="hljs-keyword">end</span>
29+
<span class="hljs-meta">irb(main):005:0&gt;</span> <span class="hljs-keyword">end</span>
30+
=&gt; <span class="hljs-symbol">:[]</span>
31+
<span class="hljs-meta">irb(main):006:0&gt;</span> Secret.new[<span class="hljs-number">0</span>]
32+
=&gt; nil
33+
<span class="hljs-meta">irb(main):008:0&gt;</span> Secret.new[<span class="hljs-number">2239232</span>]
34+
=&gt; nil
35+
<span class="hljs-meta">irb(main):009:0&gt;</span> Secret.new[<span class="hljs-number">42</span>]
36+
=&gt; <span class="hljs-string">&quot;TREASURE&quot;</span>

test/markup/ruby/prompt.txt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,16 @@ jruby-1.7.16 :001 > "RVM-Format"
2121
=> "NO"
2222

2323
irb(main):002:0> test = 1
24+
25+
irb(main):001:1* class Secret
26+
irb(main):002:2* def [](x)
27+
irb(main):003:2* "TREASURE" if x==42
28+
irb(main):004:1* end
29+
irb(main):005:0> end
30+
=> :[]
31+
irb(main):006:0> Secret.new[0]
32+
=> nil
33+
irb(main):008:0> Secret.new[2239232]
34+
=> nil
35+
irb(main):009:0> Secret.new[42]
36+
=> "TREASURE"

0 commit comments

Comments
 (0)