Skip to content

Commit

Permalink
enh(ruby) support multi-line irb prompts (#3488)
Browse files Browse the repository at this point in the history
  • Loading branch information
joshgoebel authored Mar 2, 2022
1 parent 7169cd8 commit c74b08d
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 6 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ New Grammars:

Grammars:

- enh(ruby ) better support multi-line IRB prompts
- enh(bash) improved keyword `$pattern` (numbers allowed in command names) [Martin Mattel][]
- fix(markdown) Handle `***Hello world***` without breaking [Josh Goebel][]
- enh(php) add support for PHP Attributes [Wojciech Kania][]
Expand Down
3 changes: 2 additions & 1 deletion src/languages/ruby.js
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,7 @@ export default function(hljs) {
// ?>
const SIMPLE_PROMPT = "[>?]>";
// irb(main):001:0>
const DEFAULT_PROMPT = "[\\w#]+\\(\\w+\\):\\d+:\\d+>";
const DEFAULT_PROMPT = "[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]";
const RVM_PROMPT = "(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>";

const IRB_DEFAULT = [
Expand All @@ -292,6 +292,7 @@ export default function(hljs) {
begin: '^(' + SIMPLE_PROMPT + "|" + DEFAULT_PROMPT + '|' + RVM_PROMPT + ')(?=[ ])',
starts: {
end: '$',
keywords: RUBY_KEYWORDS,
contains: RUBY_DEFAULT_CONTAINS
}
}
Expand Down
23 changes: 18 additions & 5 deletions test/markup/ruby/prompt.expect.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<span class="hljs-meta">2.0.0p0 :001 &gt;</span> [<span class="hljs-string">&#x27;some&#x27;</span>]
=&gt; [<span class="hljs-string">&quot;some&quot;</span>]
<span class="hljs-meta">2.0.0p0 :002 &gt;</span> if true
<span class="hljs-meta">2.0.0p0 :002 &gt;</span> <span class="hljs-keyword">if</span> <span class="hljs-literal">true</span>
<span class="hljs-meta">2.0.0p0 :003?&gt;</span> <span class="hljs-string">&quot;yop&quot;</span>
<span class="hljs-meta">2.0.0p0 :004?&gt;</span> end
<span class="hljs-meta">2.0.0p0 :004?&gt;</span> <span class="hljs-keyword">end</span>
=&gt; <span class="hljs-string">&quot;yop&quot;</span>

<span class="hljs-meta">jruby-1.7.16 :001 &gt;</span> <span class="hljs-string">&quot;RVM-Format&quot;</span>
Expand All @@ -13,11 +13,24 @@
=&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;]
<span class="hljs-meta">&gt;&gt;</span> {<span class="hljs-number">1</span> =&gt; obj, <span class="hljs-number">2</span> =&gt; obj}
=&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;}
<span class="hljs-meta">&gt;&gt;</span> if <span class="hljs-number">10</span> &gt; <span class="hljs-number">20</span>
<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>
<span class="hljs-meta">&gt;&gt;</span> <span class="hljs-string">&quot;YEAH&quot;</span>
<span class="hljs-meta">&gt;&gt;</span> else
<span class="hljs-meta">&gt;&gt;</span> <span class="hljs-keyword">else</span>
<span class="hljs-meta">?&gt;</span> <span class="hljs-string">&quot;NO&quot;</span>
<span class="hljs-meta">&gt;&gt;</span> end
<span class="hljs-meta">&gt;&gt;</span> <span class="hljs-keyword">end</span>
=&gt; <span class="hljs-string">&quot;NO&quot;</span>

<span class="hljs-meta">irb(main):002:0&gt;</span> test = <span class="hljs-number">1</span>

<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>
<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>
<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>
<span class="hljs-meta">irb(main):004:1*</span> <span class="hljs-keyword">end</span>
<span class="hljs-meta">irb(main):005:0&gt;</span> <span class="hljs-keyword">end</span>
=&gt; <span class="hljs-symbol">:[]</span>
<span class="hljs-meta">irb(main):006:0&gt;</span> Secret.new[<span class="hljs-number">0</span>]
=&gt; nil
<span class="hljs-meta">irb(main):008:0&gt;</span> Secret.new[<span class="hljs-number">2239232</span>]
=&gt; nil
<span class="hljs-meta">irb(main):009:0&gt;</span> Secret.new[<span class="hljs-number">42</span>]
=&gt; <span class="hljs-string">&quot;TREASURE&quot;</span>
13 changes: 13 additions & 0 deletions test/markup/ruby/prompt.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,16 @@ jruby-1.7.16 :001 > "RVM-Format"
=> "NO"

irb(main):002:0> test = 1

irb(main):001:1* class Secret
irb(main):002:2* def [](x)
irb(main):003:2* "TREASURE" if x==42
irb(main):004:1* end
irb(main):005:0> end
=> :[]
irb(main):006:0> Secret.new[0]
=> nil
irb(main):008:0> Secret.new[2239232]
=> nil
irb(main):009:0> Secret.new[42]
=> "TREASURE"

0 comments on commit c74b08d

Please sign in to comment.