Namespace
- CLASS IRB::Color::SymbolState
Methods
Constants
| BLACK | = | 30 |
| BLUE | = | 34 |
| BOLD | = | 1 |
| CLEAR | = | 0 |
| CYAN | = | 36 |
| GREEN | = | 32 |
| MAGENTA | = | 35 |
| RED | = | 31 |
| REVERSE | = | 7 |
| UNDERLINE | = | 4 |
| WHITE | = | 37 |
| YELLOW | = | 33 |
Class Public methods
clear(colorable: colorable?) Link
colorable?() Link
# File ruby/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?) Link
colorize_code(code, complete: true, ignore_error: false, colorable: colorable?, local_variables: []) Link
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 ruby/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) Link
# File ruby/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