Class: Byebug::IRBCommand

Inherits:
Command
  • Object
show all
Defined in:
lib/byebug/commands/repl.rb

Overview

Implements byebug’s “irb” command.

Constant Summary

Constants inherited from Command

Command::DEF_OPTIONS

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Command

commands, format_subcmd, format_subcmds, help, inherited, #initialize, load_commands, #match, method_missing, options, register_setting_get, register_setting_set, register_setting_var, settings, settings_map

Constructor Details

This class inherits a constructor from Byebug::Command

Class Method Details

.descriptionObject



104
105
106
107
108
109
110
111
112
113
# File 'lib/byebug/commands/repl.rb', line 104

def description
  %{
    irb[ -d]\tstarts an Interactive Ruby (IRB) session.

    If -d is added you can get access to byebug's state via the global
    variable $byebug_state. IRB is extended with methods "cont", "n" and
    "step" which run the corresponding byebug commands. In contrast to the
    real byebug commands these commands don't allow arguments.
  }
end

.namesObject



100
101
102
# File 'lib/byebug/commands/repl.rb', line 100

def names
  %w(irb)
end

Instance Method Details

#executeObject



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/byebug/commands/repl.rb', line 68

def execute
  unless @state.interface.kind_of?(LocalInterface)
    print "Command is available only in local mode.\n"
    throw :debug_error
  end

  add_debugging = @match.is_a?(MatchData) && '-d' == @match[1]
  $byebug_state = @state if add_debugging

  cont = IRB.start_session(get_binding)
  case cont
  when :cont
    @state.proceed
  when :step
    force = Command.settings[:force_stepping]
    @state.context.step_into 1, force
    @state.proceed
  when :next
    force = Command.settings[:force_stepping]
    @state.context.step_over 1, @state.frame_pos, force
    @state.proceed
  else
    file = @state.context.frame_file(0)
    line = @state.context.frame_line(0)
    CommandProcessor.print_location_and_text(file, line)
    @state.previous_line = nil
  end
  $byebug_state = nil if add_debugging
end

#regexpObject



62
63
64
65
66
# File 'lib/byebug/commands/repl.rb', line 62

def regexp
  /^\s* irb
    (?:\s+(-d))?
    \s*$/x
end