From 1b16496d7b958d12dd0ede0b2287c065b7f1d8de Mon Sep 17 00:00:00 2001 From: Ronan Limon Duparcmeur Date: Thu, 27 Apr 2023 09:53:58 +0200 Subject: [PATCH 1/2] irb lexer: recognize the SIMPLE prompt Added support for IRB's `:SIMPLE` prompt (`>>`), plus some tests for it and the two other supported prompts (IRB's `:STANDARD` and Pry's default). --- lib/rouge/lexers/irb.rb | 2 +- spec/lexers/irb_spec.rb | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 spec/lexers/irb_spec.rb diff --git a/lib/rouge/lexers/irb.rb b/lib/rouge/lexers/irb.rb index ed912f4ee7..d8283ba42d 100644 --- a/lib/rouge/lexers/irb.rb +++ b/lib/rouge/lexers/irb.rb @@ -23,7 +23,7 @@ def lang_lexer end def prompt_regex - /^.*?(irb|pry).*?[>"*]/ + /^.*?(irb|pry|>).*?[>"*]/ 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 From 62d171b82c3150ef55b233998b02b89819186b3e Mon Sep 17 00:00:00 2001 From: Ronan Limon Duparcmeur Date: Sun, 11 Jun 2023 16:43:24 +0200 Subject: [PATCH 2/2] Update lib/rouge/lexers/irb.rb Avoid picking output as prompt + support for multi-line prompts. Courtesy of @tancnle. Co-authored-by: Tan Le --- lib/rouge/lexers/irb.rb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/rouge/lexers/irb.rb b/lib/rouge/lexers/irb.rb index d8283ba42d..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?