diff --git a/lib/rouge/lexers/irb.rb b/lib/rouge/lexers/irb.rb index ed912f4ee7..b3720ec783 100644 --- a/lib/rouge/lexers/irb.rb +++ b/lib/rouge/lexers/irb.rb @@ -23,7 +23,13 @@ def lang_lexer end def prompt_regex - /^.*?(irb|pry).*?[>"*]/ + %r( + ^.*? + ( + (irb|pry).*?[>"*] | + [>"*]> + ) + )x end def allow_comments? diff --git a/spec/lexers/irb_spec.rb b/spec/lexers/irb_spec.rb new file mode 100644 index 0000000000..d090056fd7 --- /dev/null +++ b/spec/lexers/irb_spec.rb @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- # +# frozen_string_literal: true + +describe Rouge::Lexers::IRBLexer do + let(:subject) { Rouge::Lexers::IRBLexer.new } + let(:klass) { Rouge::Lexers::IRBLexer } + + include Support::Lexing + + it "parses IRB's :DEFAULT prompt" do + assert_tokens_equal 'irb(main):001:0> self', + ['Generic.Prompt', 'irb(main):001:0>'], + ['Text.Whitespace', ' '], + ['Name.Builtin', 'self'] + end + + it "parses IRB's :SIMPLE prompt" do + assert_tokens_equal '>> self', + ['Generic.Prompt', '>>'], + ['Text.Whitespace', ' '], + ['Name.Builtin', 'self'] + end + + it "parses Pry's default prompt" do + assert_tokens_equal 'pry(main)> self', + ['Generic.Prompt', 'pry(main)>'], + ['Text.Whitespace', ' '], + ['Name.Builtin', 'self'] + end +end