rf-web/vendor/bundle/gems/rouge-3.12.0/lib/rouge/lexers/irb.rb

68 lines
1.3 KiB
Ruby
Raw Normal View History

2019-10-21 08:18:17 +00:00
# -*- coding: utf-8 -*- #
# frozen_string_literal: true
module Rouge
module Lexers
load_lexer 'console.rb'
class IRBLexer < ConsoleLexer
tag 'irb'
aliases 'pry'
desc 'Shell sessions in IRB or Pry'
# unlike the superclass, we do not accept any options
@option_docs = {}
def output_lexer
@output_lexer ||= IRBOutputLexer.new(@options)
end
def lang_lexer
@lang_lexer ||= Ruby.new(@options)
end
def prompt_regex
/^.*?(irb|pry).*?[>"*]/
end
def allow_comments?
true
end
end
load_lexer 'ruby.rb'
class IRBOutputLexer < Ruby
tag 'irb_output'
start do
push :stdout
end
state :has_irb_output do
rule %r(=>), Punctuation, :pop!
rule %r/.+?(\n|$)/, Generic::Output
end
state :irb_error do
rule %r/.+?(\n|$)/, Generic::Error
mixin :has_irb_output
end
state :stdout do
rule %r/\w+?(Error|Exception):.+?(\n|$)/, Generic::Error, :irb_error
mixin :has_irb_output
end
prepend :root do
rule %r/#</, Keyword::Type, :irb_object
end
state :irb_object do
rule %r/>/, Keyword::Type, :pop!
mixin :root
end
end
end
end