module IRB::Color
Constants
- BLACK
- BLUE
- BOLD
- CLEAR
- CYAN
- GREEN
- MAGENTA
- RED
- REVERSE
- UNDERLINE
- WHITE
- YELLOW
Public Class Methods
clear
(colorable: colorable?)
# File lib/irb/color.rb, line 114 def clear(colorable: colorable?) return '' unless colorable "\e[#{CLEAR}m" end
colorable?
()
# File lib/irb/color.rb, line 81 def colorable? supported = $stdout.tty? && (/mswin|mingw/.match?(RUBY_PLATFORM) || (ENV.key?('TERM') && ENV['TERM'] != 'dumb')) # because ruby/debug also uses irb's color module selectively, # irb won't be activated in that case. if IRB.respond_to?(:conf) supported && !!IRB.conf.fetch(:USE_COLORIZE, true) else supported end end
colorize
(text, seq, colorable: colorable?)
# File lib/irb/color.rb, line 119 def colorize(text, seq, colorable: colorable?) return text unless colorable seq = seq.map { |s| "\e[#{const_get(s)}m" }.join('') "#{seq}#{text}#{clear(colorable: colorable)}" end
colorize_code
(code, complete: true, ignore_error: false, colorable: colorable?, local_variables: [])
If ‘complete` is false (code is incomplete), this does not warn compile_error. This option is needed to avoid warning a user when the compile_error is happening because the input is not wrong but just incomplete.
# File lib/irb/color.rb, line 128 def colorize_code(code, complete: true, ignore_error: false, colorable: colorable?, local_variables: []) return code unless colorable symbol_state = SymbolState.new colored = +'' lvars_code = RubyLex.generate_local_variables_assign_code(local_variables) code_with_lvars = lvars_code ? "#{lvars_code}\n#{code}" : code scan(code_with_lvars, allow_last_error: !complete) do |token, str, expr| # handle uncolorable code if token.nil? colored << Reline::Unicode.escape_for_print(str) next end # IRB::ColorPrinter skips colorizing fragments with any invalid token if ignore_error && ERROR_TOKENS.include?(token) return Reline::Unicode.escape_for_print(code) end in_symbol = symbol_state.scan_token(token) str.each_line do |line| line = Reline::Unicode.escape_for_print(line) if seq = dispatch_seq(token, expr, line, in_symbol: in_symbol) colored << seq.map { |s| "\e[#{s}m" }.join('') colored << line.sub(/\Z/, clear(colorable: colorable)) else colored << line end end end if lvars_code raise "#{lvars_code.dump} should have no \\n" if lvars_code.include?("\n") colored.sub!(/\A.+\n/, '') # delete_prefix lvars_code with colors end colored end
inspect_colorable?
(obj, seen: {}.compare_by_identity)
# File lib/irb/color.rb, line 93 def inspect_colorable?(obj, seen: {}.compare_by_identity) case obj when String, Symbol, Regexp, Integer, Float, FalseClass, TrueClass, NilClass true when Hash without_circular_ref(obj, seen: seen) do obj.all? { |k, v| inspect_colorable?(k, seen: seen) && inspect_colorable?(v, seen: seen) } end when Array without_circular_ref(obj, seen: seen) do obj.all? { |o| inspect_colorable?(o, seen: seen) } end when Range inspect_colorable?(obj.begin, seen: seen) && inspect_colorable?(obj.end, seen: seen) when Module !obj.name.nil? else false end end