irb 1.7.1 → 1.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.document +1 -1
- data/Gemfile +10 -1
- data/README.md +265 -20
- data/Rakefile +13 -10
- data/doc/irb/irb.rd.ja +1 -3
- data/irb.gemspec +2 -1
- data/lib/irb/cmd/nop.rb +3 -52
- data/lib/irb/color.rb +4 -2
- data/lib/irb/command/backtrace.rb +17 -0
- data/lib/irb/command/base.rb +62 -0
- data/lib/irb/command/break.rb +17 -0
- data/lib/irb/command/catch.rb +17 -0
- data/lib/irb/command/chws.rb +40 -0
- data/lib/irb/command/context.rb +16 -0
- data/lib/irb/{cmd → command}/continue.rb +3 -3
- data/lib/irb/command/debug.rb +71 -0
- data/lib/irb/{cmd → command}/delete.rb +3 -3
- data/lib/irb/command/disable_irb.rb +19 -0
- data/lib/irb/command/edit.rb +63 -0
- data/lib/irb/command/exit.rb +18 -0
- data/lib/irb/{cmd → command}/finish.rb +3 -3
- data/lib/irb/command/force_exit.rb +18 -0
- data/lib/irb/command/help.rb +83 -0
- data/lib/irb/command/history.rb +45 -0
- data/lib/irb/command/info.rb +17 -0
- data/lib/irb/command/internal_helpers.rb +27 -0
- data/lib/irb/{cmd → command}/irb_info.rb +7 -7
- data/lib/irb/{cmd → command}/load.rb +23 -8
- data/lib/irb/{cmd → command}/ls.rb +42 -19
- data/lib/irb/{cmd → command}/measure.rb +18 -17
- data/lib/irb/{cmd → command}/next.rb +3 -3
- data/lib/irb/command/pushws.rb +65 -0
- data/lib/irb/command/show_doc.rb +51 -0
- data/lib/irb/command/show_source.rb +74 -0
- data/lib/irb/{cmd → command}/step.rb +3 -3
- data/lib/irb/command/subirb.rb +123 -0
- data/lib/irb/{cmd → command}/whereami.rb +3 -5
- data/lib/irb/command.rb +23 -0
- data/lib/irb/completion.rb +133 -102
- data/lib/irb/context.rb +182 -66
- data/lib/irb/debug/ui.rb +103 -0
- data/lib/irb/{cmd/debug.rb → debug.rb} +53 -59
- data/lib/irb/default_commands.rb +265 -0
- data/lib/irb/easter-egg.rb +16 -6
- data/lib/irb/ext/change-ws.rb +6 -8
- data/lib/irb/ext/{history.rb → eval_history.rb} +7 -7
- data/lib/irb/ext/loader.rb +4 -4
- data/lib/irb/ext/multi-irb.rb +5 -5
- data/lib/irb/ext/tracer.rb +12 -51
- data/lib/irb/ext/use-loader.rb +6 -8
- data/lib/irb/ext/workspaces.rb +10 -34
- data/lib/irb/frame.rb +1 -1
- data/lib/irb/help.rb +3 -3
- data/lib/irb/helper_method/base.rb +16 -0
- data/lib/irb/helper_method/conf.rb +11 -0
- data/lib/irb/helper_method.rb +29 -0
- data/lib/irb/{ext/save-history.rb → history.rb} +20 -58
- data/lib/irb/init.rb +154 -58
- data/lib/irb/input-method.rb +238 -203
- data/lib/irb/inspector.rb +3 -3
- data/lib/irb/lc/error.rb +1 -11
- data/lib/irb/lc/help-message +4 -0
- data/lib/irb/lc/ja/error.rb +1 -11
- data/lib/irb/lc/ja/help-message +13 -0
- data/lib/irb/locale.rb +2 -2
- data/lib/irb/nesting_parser.rb +13 -3
- data/lib/irb/notifier.rb +1 -1
- data/lib/irb/output-method.rb +2 -8
- data/lib/irb/pager.rb +91 -0
- data/lib/irb/ruby-lex.rb +391 -471
- data/lib/irb/ruby_logo.aa +43 -0
- data/lib/irb/source_finder.rb +139 -0
- data/lib/irb/statement.rb +80 -0
- data/lib/irb/version.rb +3 -3
- data/lib/irb/workspace.rb +24 -4
- data/lib/irb/ws-for-case-2.rb +1 -1
- data/lib/irb/xmp.rb +3 -3
- data/lib/irb.rb +1232 -604
- data/man/irb.1 +7 -0
- metadata +60 -32
- data/lib/irb/cmd/backtrace.rb +0 -21
- data/lib/irb/cmd/break.rb +0 -21
- data/lib/irb/cmd/catch.rb +0 -21
- data/lib/irb/cmd/chws.rb +0 -36
- data/lib/irb/cmd/edit.rb +0 -61
- data/lib/irb/cmd/help.rb +0 -23
- data/lib/irb/cmd/info.rb +0 -21
- data/lib/irb/cmd/pushws.rb +0 -45
- data/lib/irb/cmd/show_cmds.rb +0 -39
- data/lib/irb/cmd/show_doc.rb +0 -48
- data/lib/irb/cmd/show_source.rb +0 -113
- data/lib/irb/cmd/subirb.rb +0 -66
- data/lib/irb/extend-command.rb +0 -356
- data/lib/irb/src_encoding.rb +0 -7
| @@ -1,10 +1,10 @@ | |
| 1 | 
            -
            require_relative "nop"
         | 
| 2 | 
            -
             | 
| 3 1 | 
             
            module IRB
         | 
| 4 2 | 
             
              # :stopdoc:
         | 
| 5 3 |  | 
| 6 | 
            -
              module  | 
| 7 | 
            -
                class Measure <  | 
| 4 | 
            +
              module Command
         | 
| 5 | 
            +
                class Measure < Base
         | 
| 6 | 
            +
                  include RubyArgsExtractor
         | 
| 7 | 
            +
             | 
| 8 8 | 
             
                  category "Misc"
         | 
| 9 9 | 
             
                  description "`measure` enables the mode to measure processing time. `measure :off` disables it."
         | 
| 10 10 |  | 
| @@ -12,32 +12,33 @@ module IRB | |
| 12 12 | 
             
                    super(*args)
         | 
| 13 13 | 
             
                  end
         | 
| 14 14 |  | 
| 15 | 
            -
                  def execute( | 
| 15 | 
            +
                  def execute(arg)
         | 
| 16 | 
            +
                    if arg&.match?(/^do$|^do[^\w]|^\{/)
         | 
| 17 | 
            +
                      warn 'Configure IRB.conf[:MEASURE_PROC] to add custom measure methods.'
         | 
| 18 | 
            +
                      return
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
                    args, kwargs = ruby_args(arg)
         | 
| 21 | 
            +
                    execute_internal(*args, **kwargs)
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  def execute_internal(type = nil, arg = nil)
         | 
| 16 25 | 
             
                    # Please check IRB.init_config in lib/irb/init.rb that sets
         | 
| 17 26 | 
             
                    # IRB.conf[:MEASURE_PROC] to register default "measure" methods,
         | 
| 18 27 | 
             
                    # "measure :time" (abbreviated as "measure") and "measure :stackprof".
         | 
| 28 | 
            +
             | 
| 19 29 | 
             
                    case type
         | 
| 20 30 | 
             
                    when :off
         | 
| 21 | 
            -
                      IRB.conf[:MEASURE] = nil
         | 
| 22 31 | 
             
                      IRB.unset_measure_callback(arg)
         | 
| 23 32 | 
             
                    when :list
         | 
| 24 33 | 
             
                      IRB.conf[:MEASURE_CALLBACKS].each do |type_name, _, arg_val|
         | 
| 25 34 | 
             
                        puts "- #{type_name}" + (arg_val ? "(#{arg_val.inspect})" : '')
         | 
| 26 35 | 
             
                      end
         | 
| 27 36 | 
             
                    when :on
         | 
| 28 | 
            -
                       | 
| 29 | 
            -
                      added = IRB.set_measure_callback(type, arg)
         | 
| 37 | 
            +
                      added = IRB.set_measure_callback(arg)
         | 
| 30 38 | 
             
                      puts "#{added[0]} is added." if added
         | 
| 31 39 | 
             
                    else
         | 
| 32 | 
            -
                       | 
| 33 | 
            -
             | 
| 34 | 
            -
                        added = IRB.set_measure_callback(&block)
         | 
| 35 | 
            -
                        puts "#{added[0]} is added." if added
         | 
| 36 | 
            -
                      else
         | 
| 37 | 
            -
                        IRB.conf[:MEASURE] = true
         | 
| 38 | 
            -
                        added = IRB.set_measure_callback(type, arg)
         | 
| 39 | 
            -
                        puts "#{added[0]} is added." if added
         | 
| 40 | 
            -
                      end
         | 
| 40 | 
            +
                      added = IRB.set_measure_callback(type, arg)
         | 
| 41 | 
            +
                      puts "#{added[0]} is added." if added
         | 
| 41 42 | 
             
                    end
         | 
| 42 43 | 
             
                    nil
         | 
| 43 44 | 
             
                  end
         | 
| @@ -5,10 +5,10 @@ require_relative "debug" | |
| 5 5 | 
             
            module IRB
         | 
| 6 6 | 
             
              # :stopdoc:
         | 
| 7 7 |  | 
| 8 | 
            -
              module  | 
| 8 | 
            +
              module Command
         | 
| 9 9 | 
             
                class Next < DebugCommand
         | 
| 10 | 
            -
                  def execute( | 
| 11 | 
            -
                     | 
| 10 | 
            +
                  def execute(arg)
         | 
| 11 | 
            +
                    execute_debug_command(do_cmds: "next #{arg}")
         | 
| 12 12 | 
             
                  end
         | 
| 13 13 | 
             
                end
         | 
| 14 14 | 
             
              end
         | 
| @@ -0,0 +1,65 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
            #
         | 
| 3 | 
            +
            #   change-ws.rb -
         | 
| 4 | 
            +
            #   	by Keiju ISHITSUKA(keiju@ruby-lang.org)
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            require_relative "../ext/workspaces"
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            module IRB
         | 
| 10 | 
            +
              # :stopdoc:
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              module Command
         | 
| 13 | 
            +
                class Workspaces < Base
         | 
| 14 | 
            +
                  category "Workspace"
         | 
| 15 | 
            +
                  description "Show workspaces."
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  def execute(_arg)
         | 
| 18 | 
            +
                    inspection_resuls = irb_context.instance_variable_get(:@workspace_stack).map do |ws|
         | 
| 19 | 
            +
                      truncated_inspect(ws.main)
         | 
| 20 | 
            +
                    end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                    puts "[" + inspection_resuls.join(", ") + "]"
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  private
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  def truncated_inspect(obj)
         | 
| 28 | 
            +
                    obj_inspection = obj.inspect
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                    if obj_inspection.size > 20
         | 
| 31 | 
            +
                      obj_inspection = obj_inspection[0, 19] + "...>"
         | 
| 32 | 
            +
                    end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                    obj_inspection
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                class PushWorkspace < Workspaces
         | 
| 39 | 
            +
                  category "Workspace"
         | 
| 40 | 
            +
                  description "Push an object to the workspace stack."
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  def execute(arg)
         | 
| 43 | 
            +
                    if arg.empty?
         | 
| 44 | 
            +
                      irb_context.push_workspace
         | 
| 45 | 
            +
                    else
         | 
| 46 | 
            +
                      obj = eval(arg, irb_context.workspace.binding)
         | 
| 47 | 
            +
                      irb_context.push_workspace(obj)
         | 
| 48 | 
            +
                    end
         | 
| 49 | 
            +
                    super
         | 
| 50 | 
            +
                  end
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                class PopWorkspace < Workspaces
         | 
| 54 | 
            +
                  category "Workspace"
         | 
| 55 | 
            +
                  description "Pop a workspace from the workspace stack."
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  def execute(_arg)
         | 
| 58 | 
            +
                    irb_context.pop_workspace
         | 
| 59 | 
            +
                    super
         | 
| 60 | 
            +
                  end
         | 
| 61 | 
            +
                end
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
              # :startdoc:
         | 
| 65 | 
            +
            end
         | 
| @@ -0,0 +1,51 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module IRB
         | 
| 4 | 
            +
              module Command
         | 
| 5 | 
            +
                class ShowDoc < Base
         | 
| 6 | 
            +
                  include RubyArgsExtractor
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  category "Context"
         | 
| 9 | 
            +
                  description "Look up documentation with RI."
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  help_message <<~HELP_MESSAGE
         | 
| 12 | 
            +
                    Usage: show_doc [name]
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                    When name is provided, IRB will look up the documentation for the given name.
         | 
| 15 | 
            +
                    When no name is provided, a RI session will be started.
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    Examples:
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                      show_doc
         | 
| 20 | 
            +
                      show_doc Array
         | 
| 21 | 
            +
                      show_doc Array#each
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  HELP_MESSAGE
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  def execute(arg)
         | 
| 26 | 
            +
                    # Accept string literal for backward compatibility
         | 
| 27 | 
            +
                    name = unwrap_string_literal(arg)
         | 
| 28 | 
            +
                    require 'rdoc/ri/driver'
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                    unless ShowDoc.const_defined?(:Ri)
         | 
| 31 | 
            +
                      opts = RDoc::RI::Driver.process_args([])
         | 
| 32 | 
            +
                      ShowDoc.const_set(:Ri, RDoc::RI::Driver.new(opts))
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    if name.nil?
         | 
| 36 | 
            +
                      Ri.interactive
         | 
| 37 | 
            +
                    else
         | 
| 38 | 
            +
                      begin
         | 
| 39 | 
            +
                        Ri.display_name(name)
         | 
| 40 | 
            +
                      rescue RDoc::RI::Error
         | 
| 41 | 
            +
                        puts $!.message
         | 
| 42 | 
            +
                      end
         | 
| 43 | 
            +
                    end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                    nil
         | 
| 46 | 
            +
                  rescue LoadError, SystemExit
         | 
| 47 | 
            +
                    warn "Can't display document because `rdoc` is not installed."
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
                end
         | 
| 50 | 
            +
              end
         | 
| 51 | 
            +
            end
         | 
| @@ -0,0 +1,74 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require_relative "../source_finder"
         | 
| 4 | 
            +
            require_relative "../pager"
         | 
| 5 | 
            +
            require_relative "../color"
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            module IRB
         | 
| 8 | 
            +
              module Command
         | 
| 9 | 
            +
                class ShowSource < Base
         | 
| 10 | 
            +
                  include RubyArgsExtractor
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  category "Context"
         | 
| 13 | 
            +
                  description "Show the source code of a given method, class/module, or constant."
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  help_message <<~HELP_MESSAGE
         | 
| 16 | 
            +
                    Usage: show_source [target] [-s]
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                      -s  Show the super method. You can stack it like `-ss` to show the super of the super, etc.
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                    Examples:
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                      show_source Foo
         | 
| 23 | 
            +
                      show_source Foo#bar
         | 
| 24 | 
            +
                      show_source Foo#bar -s
         | 
| 25 | 
            +
                      show_source Foo.baz
         | 
| 26 | 
            +
                      show_source Foo::BAR
         | 
| 27 | 
            +
                  HELP_MESSAGE
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  def execute(arg)
         | 
| 30 | 
            +
                    # Accept string literal for backward compatibility
         | 
| 31 | 
            +
                    str = unwrap_string_literal(arg)
         | 
| 32 | 
            +
                    unless str.is_a?(String)
         | 
| 33 | 
            +
                      puts "Error: Expected a string but got #{str.inspect}"
         | 
| 34 | 
            +
                      return
         | 
| 35 | 
            +
                    end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                    str, esses = str.split(" -")
         | 
| 38 | 
            +
                    super_level = esses ? esses.count("s") : 0
         | 
| 39 | 
            +
                    source = SourceFinder.new(@irb_context).find_source(str, super_level)
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                    if source
         | 
| 42 | 
            +
                      show_source(source)
         | 
| 43 | 
            +
                    elsif super_level > 0
         | 
| 44 | 
            +
                      puts "Error: Couldn't locate a super definition for #{str}"
         | 
| 45 | 
            +
                    else
         | 
| 46 | 
            +
                      puts "Error: Couldn't locate a definition for #{str}"
         | 
| 47 | 
            +
                    end
         | 
| 48 | 
            +
                    nil
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  private
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                  def show_source(source)
         | 
| 54 | 
            +
                    if source.binary_file?
         | 
| 55 | 
            +
                      content = "\n#{bold('Defined in binary file')}: #{source.file}\n\n"
         | 
| 56 | 
            +
                    else
         | 
| 57 | 
            +
                      code = source.colorized_content || 'Source not available'
         | 
| 58 | 
            +
                      content = <<~CONTENT
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                        #{bold("From")}: #{source.file}:#{source.line}
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                        #{code.chomp}
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                      CONTENT
         | 
| 65 | 
            +
                    end
         | 
| 66 | 
            +
                    Pager.page_content(content)
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                  def bold(str)
         | 
| 70 | 
            +
                    Color.colorize(str, [:BOLD])
         | 
| 71 | 
            +
                  end
         | 
| 72 | 
            +
                end
         | 
| 73 | 
            +
              end
         | 
| 74 | 
            +
            end
         | 
| @@ -5,10 +5,10 @@ require_relative "debug" | |
| 5 5 | 
             
            module IRB
         | 
| 6 6 | 
             
              # :stopdoc:
         | 
| 7 7 |  | 
| 8 | 
            -
              module  | 
| 8 | 
            +
              module Command
         | 
| 9 9 | 
             
                class Step < DebugCommand
         | 
| 10 | 
            -
                  def execute( | 
| 11 | 
            -
                     | 
| 10 | 
            +
                  def execute(arg)
         | 
| 11 | 
            +
                    execute_debug_command(do_cmds: "step #{arg}")
         | 
| 12 12 | 
             
                  end
         | 
| 13 13 | 
             
                end
         | 
| 14 14 | 
             
              end
         | 
| @@ -0,0 +1,123 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
            #
         | 
| 3 | 
            +
            #   multi.rb -
         | 
| 4 | 
            +
            #   	by Keiju ISHITSUKA(keiju@ruby-lang.org)
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            module IRB
         | 
| 8 | 
            +
              # :stopdoc:
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              module Command
         | 
| 11 | 
            +
                class MultiIRBCommand < Base
         | 
| 12 | 
            +
                  include RubyArgsExtractor
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  private
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  def print_deprecated_warning
         | 
| 17 | 
            +
                    warn <<~MSG
         | 
| 18 | 
            +
                      Multi-irb commands are deprecated and will be removed in IRB 2.0.0. Please use workspace commands instead.
         | 
| 19 | 
            +
                      If you have any use case for multi-irb, please leave a comment at https://github.com/ruby/irb/issues/653
         | 
| 20 | 
            +
                    MSG
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  def extend_irb_context
         | 
| 24 | 
            +
                    # this extension patches IRB context like IRB.CurrentContext
         | 
| 25 | 
            +
                    require_relative "../ext/multi-irb"
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  def print_debugger_warning
         | 
| 29 | 
            +
                    warn "Multi-IRB commands are not available when the debugger is enabled."
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                class IrbCommand < MultiIRBCommand
         | 
| 34 | 
            +
                  category "Multi-irb (DEPRECATED)"
         | 
| 35 | 
            +
                  description "Start a child IRB."
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  def execute(arg)
         | 
| 38 | 
            +
                    args, kwargs = ruby_args(arg)
         | 
| 39 | 
            +
                    execute_internal(*args, **kwargs)
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  def execute_internal(*obj)
         | 
| 43 | 
            +
                    print_deprecated_warning
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                    if irb_context.with_debugger
         | 
| 46 | 
            +
                      print_debugger_warning
         | 
| 47 | 
            +
                      return
         | 
| 48 | 
            +
                    end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                    extend_irb_context
         | 
| 51 | 
            +
                    IRB.irb(nil, *obj)
         | 
| 52 | 
            +
                    puts IRB.JobManager.inspect
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
                end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                class Jobs < MultiIRBCommand
         | 
| 57 | 
            +
                  category "Multi-irb (DEPRECATED)"
         | 
| 58 | 
            +
                  description "List of current sessions."
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                  def execute(_arg)
         | 
| 61 | 
            +
                    print_deprecated_warning
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                    if irb_context.with_debugger
         | 
| 64 | 
            +
                      print_debugger_warning
         | 
| 65 | 
            +
                      return
         | 
| 66 | 
            +
                    end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                    extend_irb_context
         | 
| 69 | 
            +
                    puts IRB.JobManager.inspect
         | 
| 70 | 
            +
                  end
         | 
| 71 | 
            +
                end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                class Foreground < MultiIRBCommand
         | 
| 74 | 
            +
                  category "Multi-irb (DEPRECATED)"
         | 
| 75 | 
            +
                  description "Switches to the session of the given number."
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                  def execute(arg)
         | 
| 78 | 
            +
                    args, kwargs = ruby_args(arg)
         | 
| 79 | 
            +
                    execute_internal(*args, **kwargs)
         | 
| 80 | 
            +
                  end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                  def execute_internal(key = nil)
         | 
| 83 | 
            +
                    print_deprecated_warning
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                    if irb_context.with_debugger
         | 
| 86 | 
            +
                      print_debugger_warning
         | 
| 87 | 
            +
                      return
         | 
| 88 | 
            +
                    end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                    extend_irb_context
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                    raise CommandArgumentError.new("Please specify the id of target IRB job (listed in the `jobs` command).") unless key
         | 
| 93 | 
            +
                    IRB.JobManager.switch(key)
         | 
| 94 | 
            +
                    puts IRB.JobManager.inspect
         | 
| 95 | 
            +
                  end
         | 
| 96 | 
            +
                end
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                class Kill < MultiIRBCommand
         | 
| 99 | 
            +
                  category "Multi-irb (DEPRECATED)"
         | 
| 100 | 
            +
                  description "Kills the session with the given number."
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                  def execute(arg)
         | 
| 103 | 
            +
                    args, kwargs = ruby_args(arg)
         | 
| 104 | 
            +
                    execute_internal(*args, **kwargs)
         | 
| 105 | 
            +
                  end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                  def execute_internal(*keys)
         | 
| 108 | 
            +
                    print_deprecated_warning
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                    if irb_context.with_debugger
         | 
| 111 | 
            +
                      print_debugger_warning
         | 
| 112 | 
            +
                      return
         | 
| 113 | 
            +
                    end
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                    extend_irb_context
         | 
| 116 | 
            +
                    IRB.JobManager.kill(*keys)
         | 
| 117 | 
            +
                    puts IRB.JobManager.inspect
         | 
| 118 | 
            +
                  end
         | 
| 119 | 
            +
                end
         | 
| 120 | 
            +
              end
         | 
| 121 | 
            +
             | 
| 122 | 
            +
              # :startdoc:
         | 
| 123 | 
            +
            end
         | 
| @@ -1,16 +1,14 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require_relative "nop"
         | 
| 4 | 
            -
             | 
| 5 3 | 
             
            module IRB
         | 
| 6 4 | 
             
              # :stopdoc:
         | 
| 7 5 |  | 
| 8 | 
            -
              module  | 
| 9 | 
            -
                class Whereami <  | 
| 6 | 
            +
              module Command
         | 
| 7 | 
            +
                class Whereami < Base
         | 
| 10 8 | 
             
                  category "Context"
         | 
| 11 9 | 
             
                  description "Show the source code around binding.irb again."
         | 
| 12 10 |  | 
| 13 | 
            -
                  def execute( | 
| 11 | 
            +
                  def execute(_arg)
         | 
| 14 12 | 
             
                    code = irb_context.workspace.code_around_binding
         | 
| 15 13 | 
             
                    if code
         | 
| 16 14 | 
             
                      puts code
         | 
    
        data/lib/irb/command.rb
    ADDED
    
    | @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
            #
         | 
| 3 | 
            +
            #   irb/command.rb - irb command
         | 
| 4 | 
            +
            #   	by Keiju ISHITSUKA(keiju@ruby-lang.org)
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            require_relative "command/base"
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            module IRB # :nodoc:
         | 
| 10 | 
            +
              module Command
         | 
| 11 | 
            +
                @commands = {}
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                class << self
         | 
| 14 | 
            +
                  attr_reader :commands
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  # Registers a command with the given name.
         | 
| 17 | 
            +
                  # Aliasing is intentionally not supported at the moment.
         | 
| 18 | 
            +
                  def register(name, command_class)
         | 
| 19 | 
            +
                    @commands[name.to_sym] = [command_class, []]
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
            end
         |