Module: IRB::Color (Ruby 2.7.2)
Description: Module : IRB::Color - Ruby 2.7.2

### Home Classes Methods

### In Files

- irb/color.rb

### Namespace

- CLASS IRB::Color::SymbolState

### Methods

- ::clear
- ::colorable?
- ::colorize
- ::colorize_code
- ::inspect_colorable?

### Class/Module Index

Quicksearch

- Binding
- IRB::Abort
- IRB::Canvas
- IRB::Color
- IRB::Color::SymbolState
- IRB::Context
- IRB::ContextExtender
- IRB::ExtendCommandBundle
- IRB::FileInputMethod
- IRB::Frame
- IRB::Frame::FrameOverflow
- IRB::Frame::FrameUnderflow
- IRB::History
- IRB::InputMethod
- IRB::Inspector
- IRB::Irb
- IRB::IrbLoader
- IRB::JobManager
- IRB::LoadAbort
- IRB::MethodExtender
- IRB::Notifier
- IRB::Notifier::AbstractNotifier
- IRB::Notifier::CompositeNotifier
- IRB::Notifier::ErrUndefinedNotifier
- IRB::Notifier::ErrUnrecognizedLevel
- IRB::Notifier::LeveledNotifier
- IRB::Notifier::NoMsgNotifier
- IRB::OutputMethod
- IRB::OutputMethod::NotImplementedError
- IRB::RDoc
- IRB::RDoc::RI
- IRB::ReadlineInputMethod
- IRB::ReidlineInputMethod
- IRB::Reline
- IRB::RubyModel
- IRB::StdioInputMethod
- IRB::StdioOutputMethod
- IRB::Vec
- IRB::WorkSpace
- Object
- XMP
- XMP::StringInputMethod

No matching classes.

# IRB::Color

### Constants

ALL

  A constant of all-bit 1 to match any Ripper’s state in dispatch_seq

BLUE
BOLD
CLEAR
CYAN
GREEN
MAGENTA
RED
REVERSE
TOKEN_KEYWORDS
TOKEN_SEQ_EXPRS

  Following pry’s colors where possible, but sometimes having a compromise like making backtick and regexp as red (string’s color, because they’re sharing tokens).

UNDERLINE
YELLOW

### Public Class Methods

clear() click to toggle source

                   # File irb/color.rb, line 96
    def clear
      return '' unless colorable?
      "\e[#{CLEAR}m"
    end

colorable?() click to toggle source

                   # File irb/color.rb, line 71
    def colorable?
      $stdout.tty? && supported? && (/mswin|mingw/ =~ RUBY_PLATFORM || (ENV.key?('TERM') && ENV['TERM'] != 'dumb'))
    end

colorize(text, seq) click to toggle source

                   # File irb/color.rb, line 101
    def colorize(text, seq)
      return text unless colorable?
      seq = seq.map { |s| "\e[#{const_get(s)}m" }.join('')
      "#{seq}#{text}#{clear}"
    end

colorize_code(code, complete: true) click to toggle source

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 irb/color.rb, line 110
    def colorize_code(code, complete: true)
      return code unless colorable?

      symbol_state = SymbolState.new
      colored = +''
      length = 0

      scan(code, allow_last_error: !complete) do |token, str, expr|
        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)
          else
            colored << line
          end
        end
        length += str.bytesize
      end

      # give up colorizing incomplete Ripper tokens
      if length != code.bytesize
        return Reline::Unicode.escape_for_print(code)
      end

      colored
    end

inspect_colorable?(obj, seen: {}.compare_by_identity) click to toggle source

                   # File irb/color.rb, line 75
    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