irb 1.12.0 → 1.13.0
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/README.md +3 -11
- data/Rakefile +10 -0
- data/irb.gemspec +1 -1
- data/lib/irb/cmd/nop.rb +1 -1
- data/lib/irb/color.rb +2 -2
- data/lib/irb/command/backtrace.rb +2 -6
- data/lib/irb/command/base.rb +7 -9
- data/lib/irb/command/break.rb +2 -6
- data/lib/irb/command/catch.rb +2 -6
- data/lib/irb/command/chws.rb +11 -5
- data/lib/irb/command/context.rb +16 -0
- data/lib/irb/command/continue.rb +2 -2
- data/lib/irb/command/debug.rb +8 -1
- data/lib/irb/command/delete.rb +2 -2
- data/lib/irb/command/disable_irb.rb +19 -0
- data/lib/irb/command/edit.rb +6 -13
- data/lib/irb/command/exit.rb +1 -3
- data/lib/irb/command/finish.rb +2 -2
- data/lib/irb/command/force_exit.rb +1 -3
- data/lib/irb/command/help.rb +8 -17
- data/lib/irb/command/history.rb +4 -6
- data/lib/irb/command/info.rb +2 -6
- data/lib/irb/command/internal_helpers.rb +27 -0
- data/lib/irb/command/irb_info.rb +2 -2
- data/lib/irb/command/load.rb +20 -3
- data/lib/irb/command/ls.rb +20 -10
- data/lib/irb/command/measure.rb +12 -6
- data/lib/irb/command/next.rb +2 -2
- data/lib/irb/command/pushws.rb +10 -5
- data/lib/irb/command/show_doc.rb +9 -18
- data/lib/irb/command/show_source.rb +5 -12
- data/lib/irb/command/step.rb +2 -2
- data/lib/irb/command/subirb.rb +28 -12
- data/lib/irb/command/whereami.rb +1 -1
- data/lib/irb/command.rb +8 -303
- data/lib/irb/completion.rb +16 -5
- data/lib/irb/context.rb +21 -19
- data/lib/irb/default_commands.rb +260 -0
- data/lib/irb/ext/change-ws.rb +3 -5
- data/lib/irb/ext/multi-irb.rb +4 -4
- data/lib/irb/ext/workspaces.rb +3 -4
- data/lib/irb/help.rb +1 -1
- 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/history.rb +6 -3
- data/lib/irb/init.rb +60 -44
- data/lib/irb/input-method.rb +18 -10
- data/lib/irb/lc/error.rb +0 -5
- data/lib/irb/lc/ja/error.rb +0 -5
- data/lib/irb/lc/ja/help-message +10 -0
- data/lib/irb/statement.rb +5 -27
- data/lib/irb/version.rb +2 -2
- data/lib/irb/workspace.rb +18 -2
- data/lib/irb.rb +675 -624
- metadata +12 -5
| @@ -0,0 +1,260 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require_relative "command"
         | 
| 4 | 
            +
            require_relative "command/internal_helpers"
         | 
| 5 | 
            +
            require_relative "command/context"
         | 
| 6 | 
            +
            require_relative "command/exit"
         | 
| 7 | 
            +
            require_relative "command/force_exit"
         | 
| 8 | 
            +
            require_relative "command/chws"
         | 
| 9 | 
            +
            require_relative "command/pushws"
         | 
| 10 | 
            +
            require_relative "command/subirb"
         | 
| 11 | 
            +
            require_relative "command/load"
         | 
| 12 | 
            +
            require_relative "command/debug"
         | 
| 13 | 
            +
            require_relative "command/edit"
         | 
| 14 | 
            +
            require_relative "command/break"
         | 
| 15 | 
            +
            require_relative "command/catch"
         | 
| 16 | 
            +
            require_relative "command/next"
         | 
| 17 | 
            +
            require_relative "command/delete"
         | 
| 18 | 
            +
            require_relative "command/step"
         | 
| 19 | 
            +
            require_relative "command/continue"
         | 
| 20 | 
            +
            require_relative "command/finish"
         | 
| 21 | 
            +
            require_relative "command/backtrace"
         | 
| 22 | 
            +
            require_relative "command/info"
         | 
| 23 | 
            +
            require_relative "command/help"
         | 
| 24 | 
            +
            require_relative "command/show_doc"
         | 
| 25 | 
            +
            require_relative "command/irb_info"
         | 
| 26 | 
            +
            require_relative "command/ls"
         | 
| 27 | 
            +
            require_relative "command/measure"
         | 
| 28 | 
            +
            require_relative "command/show_source"
         | 
| 29 | 
            +
            require_relative "command/whereami"
         | 
| 30 | 
            +
            require_relative "command/history"
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            module IRB
         | 
| 33 | 
            +
              module Command
         | 
| 34 | 
            +
                NO_OVERRIDE = 0
         | 
| 35 | 
            +
                OVERRIDE_PRIVATE_ONLY = 0x01
         | 
| 36 | 
            +
                OVERRIDE_ALL = 0x02
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                class << self
         | 
| 39 | 
            +
                  # This API is for IRB's internal use only and may change at any time.
         | 
| 40 | 
            +
                  # Please do NOT use it.
         | 
| 41 | 
            +
                  def _register_with_aliases(name, command_class, *aliases)
         | 
| 42 | 
            +
                    @commands[name.to_sym] = [command_class, aliases]
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  def all_commands_info
         | 
| 46 | 
            +
                    user_aliases = IRB.CurrentContext.command_aliases.each_with_object({}) do |(alias_name, target), result|
         | 
| 47 | 
            +
                      result[target] ||= []
         | 
| 48 | 
            +
                      result[target] << alias_name
         | 
| 49 | 
            +
                    end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                    commands.map do |command_name, (command_class, aliases)|
         | 
| 52 | 
            +
                      aliases = aliases.map { |a| a.first }
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                      if additional_aliases = user_aliases[command_name]
         | 
| 55 | 
            +
                        aliases += additional_aliases
         | 
| 56 | 
            +
                      end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                      display_name = aliases.shift || command_name
         | 
| 59 | 
            +
                      {
         | 
| 60 | 
            +
                        display_name: display_name,
         | 
| 61 | 
            +
                        description: command_class.description,
         | 
| 62 | 
            +
                        category: command_class.category
         | 
| 63 | 
            +
                      }
         | 
| 64 | 
            +
                    end
         | 
| 65 | 
            +
                  end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                  def command_override_policies
         | 
| 68 | 
            +
                    @@command_override_policies ||= commands.flat_map do |cmd_name, (cmd_class, aliases)|
         | 
| 69 | 
            +
                      [[cmd_name, OVERRIDE_ALL]] + aliases
         | 
| 70 | 
            +
                    end.to_h
         | 
| 71 | 
            +
                  end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                  def execute_as_command?(name, public_method:, private_method:)
         | 
| 74 | 
            +
                    case command_override_policies[name]
         | 
| 75 | 
            +
                    when OVERRIDE_ALL
         | 
| 76 | 
            +
                      true
         | 
| 77 | 
            +
                    when OVERRIDE_PRIVATE_ONLY
         | 
| 78 | 
            +
                      !public_method
         | 
| 79 | 
            +
                    when NO_OVERRIDE
         | 
| 80 | 
            +
                      !public_method && !private_method
         | 
| 81 | 
            +
                    end
         | 
| 82 | 
            +
                  end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                  def command_names
         | 
| 85 | 
            +
                    command_override_policies.keys.map(&:to_s)
         | 
| 86 | 
            +
                  end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                  # Convert a command name to its implementation class if such command exists
         | 
| 89 | 
            +
                  def load_command(command)
         | 
| 90 | 
            +
                    command = command.to_sym
         | 
| 91 | 
            +
                    commands.each do |command_name, (command_class, aliases)|
         | 
| 92 | 
            +
                      if command_name == command || aliases.any? { |alias_name, _| alias_name == command }
         | 
| 93 | 
            +
                        return command_class
         | 
| 94 | 
            +
                      end
         | 
| 95 | 
            +
                    end
         | 
| 96 | 
            +
                    nil
         | 
| 97 | 
            +
                  end
         | 
| 98 | 
            +
                end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                _register_with_aliases(:irb_context, Command::Context,
         | 
| 101 | 
            +
                  [:context, NO_OVERRIDE]
         | 
| 102 | 
            +
                )
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                _register_with_aliases(:irb_exit, Command::Exit,
         | 
| 105 | 
            +
                  [:exit, OVERRIDE_PRIVATE_ONLY],
         | 
| 106 | 
            +
                  [:quit, OVERRIDE_PRIVATE_ONLY],
         | 
| 107 | 
            +
                  [:irb_quit, OVERRIDE_PRIVATE_ONLY]
         | 
| 108 | 
            +
                )
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                _register_with_aliases(:irb_exit!, Command::ForceExit,
         | 
| 111 | 
            +
                  [:exit!, OVERRIDE_PRIVATE_ONLY]
         | 
| 112 | 
            +
                )
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                _register_with_aliases(:irb_current_working_workspace, Command::CurrentWorkingWorkspace,
         | 
| 115 | 
            +
                  [:cwws, NO_OVERRIDE],
         | 
| 116 | 
            +
                  [:pwws, NO_OVERRIDE],
         | 
| 117 | 
            +
                  [:irb_print_working_workspace, OVERRIDE_ALL],
         | 
| 118 | 
            +
                  [:irb_cwws, OVERRIDE_ALL],
         | 
| 119 | 
            +
                  [:irb_pwws, OVERRIDE_ALL],
         | 
| 120 | 
            +
                  [:irb_current_working_binding, OVERRIDE_ALL],
         | 
| 121 | 
            +
                  [:irb_print_working_binding, OVERRIDE_ALL],
         | 
| 122 | 
            +
                  [:irb_cwb, OVERRIDE_ALL],
         | 
| 123 | 
            +
                  [:irb_pwb, OVERRIDE_ALL],
         | 
| 124 | 
            +
                )
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                _register_with_aliases(:irb_change_workspace, Command::ChangeWorkspace,
         | 
| 127 | 
            +
                  [:chws, NO_OVERRIDE],
         | 
| 128 | 
            +
                  [:cws, NO_OVERRIDE],
         | 
| 129 | 
            +
                  [:irb_chws, OVERRIDE_ALL],
         | 
| 130 | 
            +
                  [:irb_cws, OVERRIDE_ALL],
         | 
| 131 | 
            +
                  [:irb_change_binding, OVERRIDE_ALL],
         | 
| 132 | 
            +
                  [:irb_cb, OVERRIDE_ALL],
         | 
| 133 | 
            +
                  [:cb, NO_OVERRIDE],
         | 
| 134 | 
            +
                )
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                _register_with_aliases(:irb_workspaces, Command::Workspaces,
         | 
| 137 | 
            +
                  [:workspaces, NO_OVERRIDE],
         | 
| 138 | 
            +
                  [:irb_bindings, OVERRIDE_ALL],
         | 
| 139 | 
            +
                  [:bindings, NO_OVERRIDE],
         | 
| 140 | 
            +
                )
         | 
| 141 | 
            +
             | 
| 142 | 
            +
                _register_with_aliases(:irb_push_workspace, Command::PushWorkspace,
         | 
| 143 | 
            +
                  [:pushws, NO_OVERRIDE],
         | 
| 144 | 
            +
                  [:irb_pushws, OVERRIDE_ALL],
         | 
| 145 | 
            +
                  [:irb_push_binding, OVERRIDE_ALL],
         | 
| 146 | 
            +
                  [:irb_pushb, OVERRIDE_ALL],
         | 
| 147 | 
            +
                  [:pushb, NO_OVERRIDE],
         | 
| 148 | 
            +
                )
         | 
| 149 | 
            +
             | 
| 150 | 
            +
                _register_with_aliases(:irb_pop_workspace, Command::PopWorkspace,
         | 
| 151 | 
            +
                  [:popws, NO_OVERRIDE],
         | 
| 152 | 
            +
                  [:irb_popws, OVERRIDE_ALL],
         | 
| 153 | 
            +
                  [:irb_pop_binding, OVERRIDE_ALL],
         | 
| 154 | 
            +
                  [:irb_popb, OVERRIDE_ALL],
         | 
| 155 | 
            +
                  [:popb, NO_OVERRIDE],
         | 
| 156 | 
            +
                )
         | 
| 157 | 
            +
             | 
| 158 | 
            +
                _register_with_aliases(:irb_load, Command::Load)
         | 
| 159 | 
            +
                _register_with_aliases(:irb_require, Command::Require)
         | 
| 160 | 
            +
                _register_with_aliases(:irb_source, Command::Source,
         | 
| 161 | 
            +
                  [:source, NO_OVERRIDE]
         | 
| 162 | 
            +
                )
         | 
| 163 | 
            +
             | 
| 164 | 
            +
                _register_with_aliases(:irb, Command::IrbCommand)
         | 
| 165 | 
            +
                _register_with_aliases(:irb_jobs, Command::Jobs,
         | 
| 166 | 
            +
                  [:jobs, NO_OVERRIDE]
         | 
| 167 | 
            +
                )
         | 
| 168 | 
            +
                _register_with_aliases(:irb_fg, Command::Foreground,
         | 
| 169 | 
            +
                  [:fg, NO_OVERRIDE]
         | 
| 170 | 
            +
                )
         | 
| 171 | 
            +
                _register_with_aliases(:irb_kill, Command::Kill,
         | 
| 172 | 
            +
                  [:kill, OVERRIDE_PRIVATE_ONLY]
         | 
| 173 | 
            +
                )
         | 
| 174 | 
            +
             | 
| 175 | 
            +
                _register_with_aliases(:irb_debug, Command::Debug,
         | 
| 176 | 
            +
                  [:debug, NO_OVERRIDE]
         | 
| 177 | 
            +
                )
         | 
| 178 | 
            +
                _register_with_aliases(:irb_edit, Command::Edit,
         | 
| 179 | 
            +
                  [:edit, NO_OVERRIDE]
         | 
| 180 | 
            +
                )
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                _register_with_aliases(:irb_break, Command::Break)
         | 
| 183 | 
            +
                _register_with_aliases(:irb_catch, Command::Catch)
         | 
| 184 | 
            +
                _register_with_aliases(:irb_next, Command::Next)
         | 
| 185 | 
            +
                _register_with_aliases(:irb_delete, Command::Delete,
         | 
| 186 | 
            +
                  [:delete, NO_OVERRIDE]
         | 
| 187 | 
            +
                )
         | 
| 188 | 
            +
             | 
| 189 | 
            +
                _register_with_aliases(:irb_step, Command::Step,
         | 
| 190 | 
            +
                  [:step, NO_OVERRIDE]
         | 
| 191 | 
            +
                )
         | 
| 192 | 
            +
                _register_with_aliases(:irb_continue, Command::Continue,
         | 
| 193 | 
            +
                  [:continue, NO_OVERRIDE]
         | 
| 194 | 
            +
                )
         | 
| 195 | 
            +
                _register_with_aliases(:irb_finish, Command::Finish,
         | 
| 196 | 
            +
                  [:finish, NO_OVERRIDE]
         | 
| 197 | 
            +
                )
         | 
| 198 | 
            +
                _register_with_aliases(:irb_backtrace, Command::Backtrace,
         | 
| 199 | 
            +
                  [:backtrace, NO_OVERRIDE],
         | 
| 200 | 
            +
                  [:bt, NO_OVERRIDE]
         | 
| 201 | 
            +
                )
         | 
| 202 | 
            +
             | 
| 203 | 
            +
                _register_with_aliases(:irb_debug_info, Command::Info,
         | 
| 204 | 
            +
                  [:info, NO_OVERRIDE]
         | 
| 205 | 
            +
                )
         | 
| 206 | 
            +
             | 
| 207 | 
            +
                _register_with_aliases(:irb_help, Command::Help,
         | 
| 208 | 
            +
                  [:help, NO_OVERRIDE],
         | 
| 209 | 
            +
                  [:show_cmds, NO_OVERRIDE]
         | 
| 210 | 
            +
                )
         | 
| 211 | 
            +
             | 
| 212 | 
            +
                _register_with_aliases(:irb_show_doc, Command::ShowDoc,
         | 
| 213 | 
            +
                  [:show_doc, NO_OVERRIDE]
         | 
| 214 | 
            +
                )
         | 
| 215 | 
            +
             | 
| 216 | 
            +
                _register_with_aliases(:irb_info, Command::IrbInfo)
         | 
| 217 | 
            +
             | 
| 218 | 
            +
                _register_with_aliases(:irb_ls, Command::Ls,
         | 
| 219 | 
            +
                  [:ls, NO_OVERRIDE]
         | 
| 220 | 
            +
                )
         | 
| 221 | 
            +
             | 
| 222 | 
            +
                _register_with_aliases(:irb_measure, Command::Measure,
         | 
| 223 | 
            +
                  [:measure, NO_OVERRIDE]
         | 
| 224 | 
            +
                )
         | 
| 225 | 
            +
             | 
| 226 | 
            +
                _register_with_aliases(:irb_show_source, Command::ShowSource,
         | 
| 227 | 
            +
                  [:show_source, NO_OVERRIDE]
         | 
| 228 | 
            +
                )
         | 
| 229 | 
            +
             | 
| 230 | 
            +
                _register_with_aliases(:irb_whereami, Command::Whereami,
         | 
| 231 | 
            +
                  [:whereami, NO_OVERRIDE]
         | 
| 232 | 
            +
                )
         | 
| 233 | 
            +
             | 
| 234 | 
            +
                _register_with_aliases(:irb_history, Command::History,
         | 
| 235 | 
            +
                  [:history, NO_OVERRIDE],
         | 
| 236 | 
            +
                  [:hist, NO_OVERRIDE]
         | 
| 237 | 
            +
                )
         | 
| 238 | 
            +
              end
         | 
| 239 | 
            +
             | 
| 240 | 
            +
              ExtendCommand = Command
         | 
| 241 | 
            +
             | 
| 242 | 
            +
              # For backward compatibility, we need to keep this module:
         | 
| 243 | 
            +
              # - As a container of helper methods
         | 
| 244 | 
            +
              # - As a place to register commands with the deprecated def_extend_command method
         | 
| 245 | 
            +
              module ExtendCommandBundle
         | 
| 246 | 
            +
                # For backward compatibility
         | 
| 247 | 
            +
                NO_OVERRIDE = Command::NO_OVERRIDE
         | 
| 248 | 
            +
                OVERRIDE_PRIVATE_ONLY = Command::OVERRIDE_PRIVATE_ONLY
         | 
| 249 | 
            +
                OVERRIDE_ALL = Command::OVERRIDE_ALL
         | 
| 250 | 
            +
             | 
| 251 | 
            +
                # Deprecated. Doesn't have any effect.
         | 
| 252 | 
            +
                @EXTEND_COMMANDS = []
         | 
| 253 | 
            +
             | 
| 254 | 
            +
                # Drepcated. Use Command.regiser instead.
         | 
| 255 | 
            +
                def self.def_extend_command(cmd_name, cmd_class, _, *aliases)
         | 
| 256 | 
            +
                  Command._register_with_aliases(cmd_name, cmd_class, *aliases)
         | 
| 257 | 
            +
                  Command.class_variable_set(:@@command_override_policies, nil)
         | 
| 258 | 
            +
                end
         | 
| 259 | 
            +
              end
         | 
| 260 | 
            +
            end
         | 
    
        data/lib/irb/ext/change-ws.rb
    CHANGED
    
    | @@ -29,11 +29,9 @@ module IRB # :nodoc: | |
| 29 29 | 
             
                    return main
         | 
| 30 30 | 
             
                  end
         | 
| 31 31 |  | 
| 32 | 
            -
                   | 
| 33 | 
            -
             | 
| 34 | 
            -
                   | 
| 35 | 
            -
                    main.extend ExtendCommandBundle
         | 
| 36 | 
            -
                  end
         | 
| 32 | 
            +
                  workspace = WorkSpace.new(_main[0])
         | 
| 33 | 
            +
                  replace_workspace(workspace)
         | 
| 34 | 
            +
                  workspace.load_helper_methods_to_main
         | 
| 37 35 | 
             
                end
         | 
| 38 36 | 
             
              end
         | 
| 39 37 | 
             
            end
         | 
    
        data/lib/irb/ext/multi-irb.rb
    CHANGED
    
    | @@ -5,7 +5,7 @@ | |
| 5 5 | 
             
            #
         | 
| 6 6 |  | 
| 7 7 | 
             
            module IRB
         | 
| 8 | 
            -
              class JobManager
         | 
| 8 | 
            +
              class JobManager # :nodoc:
         | 
| 9 9 |  | 
| 10 10 | 
             
                # Creates a new JobManager object
         | 
| 11 11 | 
             
                def initialize
         | 
| @@ -166,12 +166,12 @@ module IRB | |
| 166 166 | 
             
              @JobManager = JobManager.new
         | 
| 167 167 |  | 
| 168 168 | 
             
              # The current JobManager in the session
         | 
| 169 | 
            -
              def IRB.JobManager
         | 
| 169 | 
            +
              def IRB.JobManager # :nodoc:
         | 
| 170 170 | 
             
                @JobManager
         | 
| 171 171 | 
             
              end
         | 
| 172 172 |  | 
| 173 173 | 
             
              # The current Context in this session
         | 
| 174 | 
            -
              def IRB.CurrentContext
         | 
| 174 | 
            +
              def IRB.CurrentContext # :nodoc:
         | 
| 175 175 | 
             
                IRB.JobManager.irb(Thread.current).context
         | 
| 176 176 | 
             
              end
         | 
| 177 177 |  | 
| @@ -179,7 +179,7 @@ module IRB | |
| 179 179 | 
             
              #
         | 
| 180 180 | 
             
              # The optional +file+ argument is given to Context.new, along with the
         | 
| 181 181 | 
             
              # workspace created with the remaining arguments, see WorkSpace.new
         | 
| 182 | 
            -
              def IRB.irb(file = nil, *main)
         | 
| 182 | 
            +
              def IRB.irb(file = nil, *main) # :nodoc:
         | 
| 183 183 | 
             
                workspace = WorkSpace.new(*main)
         | 
| 184 184 | 
             
                parent_thread = Thread.current
         | 
| 185 185 | 
             
                Thread.start do
         | 
    
        data/lib/irb/ext/workspaces.rb
    CHANGED
    
    | @@ -19,10 +19,9 @@ module IRB # :nodoc: | |
| 19 19 | 
             
                      @workspace_stack.push current_workspace, previous_workspace
         | 
| 20 20 | 
             
                    end
         | 
| 21 21 | 
             
                  else
         | 
| 22 | 
            -
                     | 
| 23 | 
            -
                     | 
| 24 | 
            -
             | 
| 25 | 
            -
                    end
         | 
| 22 | 
            +
                    new_workspace = WorkSpace.new(workspace.binding, _main[0])
         | 
| 23 | 
            +
                    @workspace_stack.push new_workspace
         | 
| 24 | 
            +
                    new_workspace.load_helper_methods_to_main
         | 
| 26 25 | 
             
                  end
         | 
| 27 26 | 
             
                end
         | 
| 28 27 |  | 
    
        data/lib/irb/help.rb
    CHANGED
    
    
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            require_relative "helper_method/base"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module IRB
         | 
| 4 | 
            +
              module HelperMethod
         | 
| 5 | 
            +
                @helper_methods = {}
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                class << self
         | 
| 8 | 
            +
                  attr_reader :helper_methods
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  def register(name, helper_class)
         | 
| 11 | 
            +
                    @helper_methods[name] = helper_class
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    if defined?(HelpersContainer)
         | 
| 14 | 
            +
                      HelpersContainer.install_helper_methods
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  def all_helper_methods_info
         | 
| 19 | 
            +
                    @helper_methods.map do |name, helper_class|
         | 
| 20 | 
            +
                      { display_name: name, description: helper_class.description }
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                # Default helper_methods
         | 
| 26 | 
            +
                require_relative "helper_method/conf"
         | 
| 27 | 
            +
                register(:conf, HelperMethod::Conf)
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
            end
         | 
    
        data/lib/irb/history.rb
    CHANGED
    
    | @@ -16,8 +16,8 @@ module IRB | |
| 16 16 | 
             
                  if history_file = IRB.conf[:HISTORY_FILE]
         | 
| 17 17 | 
             
                    history_file = File.expand_path(history_file)
         | 
| 18 18 | 
             
                  end
         | 
| 19 | 
            -
                  history_file = IRB. | 
| 20 | 
            -
                  if File.exist?(history_file)
         | 
| 19 | 
            +
                  history_file = IRB.rc_file("_history") unless history_file
         | 
| 20 | 
            +
                  if history_file && File.exist?(history_file)
         | 
| 21 21 | 
             
                    File.open(history_file, "r:#{IRB.conf[:LC_MESSAGES].encoding}") do |f|
         | 
| 22 22 | 
             
                      f.each { |l|
         | 
| 23 23 | 
             
                        l = l.chomp
         | 
| @@ -41,7 +41,10 @@ module IRB | |
| 41 41 | 
             
                    if history_file = IRB.conf[:HISTORY_FILE]
         | 
| 42 42 | 
             
                      history_file = File.expand_path(history_file)
         | 
| 43 43 | 
             
                    end
         | 
| 44 | 
            -
                    history_file = IRB. | 
| 44 | 
            +
                    history_file = IRB.rc_file("_history") unless history_file
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                    # When HOME and XDG_CONFIG_HOME are not available, history_file might be nil
         | 
| 47 | 
            +
                    return unless history_file
         | 
| 45 48 |  | 
| 46 49 | 
             
                    # Change the permission of a file that already exists[BUG #7694]
         | 
| 47 50 | 
             
                    begin
         | 
    
        data/lib/irb/init.rb
    CHANGED
    
    | @@ -395,10 +395,8 @@ module IRB # :nodoc: | |
| 395 395 | 
             
              # Run the config file
         | 
| 396 396 | 
             
              def IRB.run_config
         | 
| 397 397 | 
             
                if @CONF[:RC]
         | 
| 398 | 
            -
                   | 
| 399 | 
            -
                     | 
| 400 | 
            -
                    # Otherwise, it'd be very noisy.
         | 
| 401 | 
            -
                    load rc if File.exist?(rc)
         | 
| 398 | 
            +
                  irbrc_files.each do |rc|
         | 
| 399 | 
            +
                    load rc
         | 
| 402 400 | 
             
                  rescue StandardError, ScriptError => e
         | 
| 403 401 | 
             
                    warn "Error loading RC file '#{rc}':\n#{e.full_message(highlight: false)}"
         | 
| 404 402 | 
             
                  end
         | 
| @@ -406,53 +404,27 @@ module IRB # :nodoc: | |
| 406 404 | 
             
              end
         | 
| 407 405 |  | 
| 408 406 | 
             
              IRBRC_EXT = "rc"
         | 
| 409 | 
            -
              def IRB.rc_file(ext = IRBRC_EXT)
         | 
| 410 | 
            -
                warn "rc_file is deprecated, please use rc_files instead."
         | 
| 411 | 
            -
                rc_files(ext).first
         | 
| 412 | 
            -
              end
         | 
| 413 | 
            -
             | 
| 414 | 
            -
              def IRB.rc_files(ext = IRBRC_EXT)
         | 
| 415 | 
            -
                if !@CONF[:RC_NAME_GENERATOR]
         | 
| 416 | 
            -
                  @CONF[:RC_NAME_GENERATOR] ||= []
         | 
| 417 | 
            -
                  existing_rc_file_generators = []
         | 
| 418 407 |  | 
| 419 | 
            -
             | 
| 420 | 
            -
             | 
| 421 | 
            -
                    existing_rc_file_generators << rcgen if File.exist?(rcgen.call(ext))
         | 
| 422 | 
            -
                  end
         | 
| 408 | 
            +
              def IRB.rc_file(ext)
         | 
| 409 | 
            +
                prepare_irbrc_name_generators
         | 
| 423 410 |  | 
| 424 | 
            -
             | 
| 425 | 
            -
             | 
| 426 | 
            -
                   | 
| 411 | 
            +
                # When irbrc exist in default location
         | 
| 412 | 
            +
                if (rcgen = @existing_rc_name_generators.first)
         | 
| 413 | 
            +
                  return rcgen.call(ext)
         | 
| 427 414 | 
             
                end
         | 
| 428 415 |  | 
| 429 | 
            -
                 | 
| 430 | 
            -
             | 
| 431 | 
            -
                   | 
| 432 | 
            -
                  rc_file
         | 
| 416 | 
            +
                # When irbrc does not exist in default location
         | 
| 417 | 
            +
                rc_file_generators do |rcgen|
         | 
| 418 | 
            +
                  return rcgen.call(ext)
         | 
| 433 419 | 
             
                end
         | 
| 420 | 
            +
             | 
| 421 | 
            +
                # When HOME and XDG_CONFIG_HOME are not available
         | 
| 422 | 
            +
                nil
         | 
| 434 423 | 
             
              end
         | 
| 435 424 |  | 
| 436 | 
            -
               | 
| 437 | 
            -
             | 
| 438 | 
            -
                 | 
| 439 | 
            -
                  yield proc{|rc| rc == "rc" ? irbrc : irbrc+rc}
         | 
| 440 | 
            -
                end
         | 
| 441 | 
            -
                if xdg_config_home = ENV["XDG_CONFIG_HOME"]
         | 
| 442 | 
            -
                  irb_home = File.join(xdg_config_home, "irb")
         | 
| 443 | 
            -
                  if File.directory?(irb_home)
         | 
| 444 | 
            -
                    yield proc{|rc| irb_home + "/irb#{rc}"}
         | 
| 445 | 
            -
                  end
         | 
| 446 | 
            -
                end
         | 
| 447 | 
            -
                if home = ENV["HOME"]
         | 
| 448 | 
            -
                  yield proc{|rc| home+"/.irb#{rc}"}
         | 
| 449 | 
            -
                  yield proc{|rc| home+"/.config/irb/irb#{rc}"}
         | 
| 450 | 
            -
                end
         | 
| 451 | 
            -
                current_dir = Dir.pwd
         | 
| 452 | 
            -
                yield proc{|rc| current_dir+"/.irb#{rc}"}
         | 
| 453 | 
            -
                yield proc{|rc| current_dir+"/irb#{rc.sub(/\A_?/, '.')}"}
         | 
| 454 | 
            -
                yield proc{|rc| current_dir+"/_irb#{rc}"}
         | 
| 455 | 
            -
                yield proc{|rc| current_dir+"/$irb#{rc}"}
         | 
| 425 | 
            +
              def IRB.irbrc_files
         | 
| 426 | 
            +
                prepare_irbrc_name_generators
         | 
| 427 | 
            +
                @irbrc_files
         | 
| 456 428 | 
             
              end
         | 
| 457 429 |  | 
| 458 430 | 
             
              # loading modules
         | 
| @@ -468,6 +440,50 @@ module IRB # :nodoc: | |
| 468 440 |  | 
| 469 441 | 
             
              class << IRB
         | 
| 470 442 | 
             
                private
         | 
| 443 | 
            +
             | 
| 444 | 
            +
                def prepare_irbrc_name_generators
         | 
| 445 | 
            +
                  return if @existing_rc_name_generators
         | 
| 446 | 
            +
             | 
| 447 | 
            +
                  @existing_rc_name_generators = []
         | 
| 448 | 
            +
                  @irbrc_files = []
         | 
| 449 | 
            +
                  rc_file_generators do |rcgen|
         | 
| 450 | 
            +
                    irbrc = rcgen.call(IRBRC_EXT)
         | 
| 451 | 
            +
                    if File.exist?(irbrc)
         | 
| 452 | 
            +
                      @irbrc_files << irbrc
         | 
| 453 | 
            +
                      @existing_rc_name_generators << rcgen
         | 
| 454 | 
            +
                    end
         | 
| 455 | 
            +
                  end
         | 
| 456 | 
            +
                  generate_current_dir_irbrc_files.each do |irbrc|
         | 
| 457 | 
            +
                    @irbrc_files << irbrc if File.exist?(irbrc)
         | 
| 458 | 
            +
                  end
         | 
| 459 | 
            +
                  @irbrc_files.uniq!
         | 
| 460 | 
            +
                end
         | 
| 461 | 
            +
             | 
| 462 | 
            +
                # enumerate possible rc-file base name generators
         | 
| 463 | 
            +
                def rc_file_generators
         | 
| 464 | 
            +
                  if irbrc = ENV["IRBRC"]
         | 
| 465 | 
            +
                    yield proc{|rc| rc == "rc" ? irbrc : irbrc+rc}
         | 
| 466 | 
            +
                  end
         | 
| 467 | 
            +
                  if xdg_config_home = ENV["XDG_CONFIG_HOME"]
         | 
| 468 | 
            +
                    irb_home = File.join(xdg_config_home, "irb")
         | 
| 469 | 
            +
                    if File.directory?(irb_home)
         | 
| 470 | 
            +
                      yield proc{|rc| irb_home + "/irb#{rc}"}
         | 
| 471 | 
            +
                    end
         | 
| 472 | 
            +
                  end
         | 
| 473 | 
            +
                  if home = ENV["HOME"]
         | 
| 474 | 
            +
                    yield proc{|rc| home+"/.irb#{rc}"}
         | 
| 475 | 
            +
                    if xdg_config_home.nil? || xdg_config_home.empty?
         | 
| 476 | 
            +
                      yield proc{|rc| home+"/.config/irb/irb#{rc}"}
         | 
| 477 | 
            +
                    end
         | 
| 478 | 
            +
                  end
         | 
| 479 | 
            +
                end
         | 
| 480 | 
            +
             | 
| 481 | 
            +
                # possible irbrc files in current directory
         | 
| 482 | 
            +
                def generate_current_dir_irbrc_files
         | 
| 483 | 
            +
                  current_dir = Dir.pwd
         | 
| 484 | 
            +
                  %w[.irbrc irbrc _irbrc $irbrc].map { |file| "#{current_dir}/#{file}" }
         | 
| 485 | 
            +
                end
         | 
| 486 | 
            +
             | 
| 471 487 | 
             
                def set_encoding(extern, intern = nil, override: true)
         | 
| 472 488 | 
             
                  verbose, $VERBOSE = $VERBOSE, nil
         | 
| 473 489 | 
             
                  Encoding.default_external = extern unless extern.nil? || extern.empty?
         | 
    
        data/lib/irb/input-method.rb
    CHANGED
    
    | @@ -308,6 +308,20 @@ module IRB | |
| 308 308 | 
             
                  @completor.doc_namespace(preposing, matched, postposing, bind: bind)
         | 
| 309 309 | 
             
                end
         | 
| 310 310 |  | 
| 311 | 
            +
                def rdoc_ri_driver
         | 
| 312 | 
            +
                  return @rdoc_ri_driver if defined?(@rdoc_ri_driver)
         | 
| 313 | 
            +
             | 
| 314 | 
            +
                  begin
         | 
| 315 | 
            +
                    require 'rdoc'
         | 
| 316 | 
            +
                  rescue LoadError
         | 
| 317 | 
            +
                    @rdoc_ri_driver = nil
         | 
| 318 | 
            +
                  else
         | 
| 319 | 
            +
                    options = {}
         | 
| 320 | 
            +
                    options[:extra_doc_dirs] = IRB.conf[:EXTRA_DOC_DIRS] unless IRB.conf[:EXTRA_DOC_DIRS].empty?
         | 
| 321 | 
            +
                    @rdoc_ri_driver = RDoc::RI::Driver.new(options)
         | 
| 322 | 
            +
                  end
         | 
| 323 | 
            +
                end
         | 
| 324 | 
            +
             | 
| 311 325 | 
             
                def show_doc_dialog_proc
         | 
| 312 326 | 
             
                  input_method = self # self is changed in the lambda below.
         | 
| 313 327 | 
             
                  ->() {
         | 
| @@ -331,9 +345,7 @@ module IRB | |
| 331 345 |  | 
| 332 346 | 
             
                    show_easter_egg = name&.match?(/\ARubyVM/) && !ENV['RUBY_YES_I_AM_NOT_A_NORMAL_USER']
         | 
| 333 347 |  | 
| 334 | 
            -
                     | 
| 335 | 
            -
                    options[:extra_doc_dirs] = IRB.conf[:EXTRA_DOC_DIRS] unless IRB.conf[:EXTRA_DOC_DIRS].empty?
         | 
| 336 | 
            -
                    driver = RDoc::RI::Driver.new(options)
         | 
| 348 | 
            +
                    driver = input_method.rdoc_ri_driver
         | 
| 337 349 |  | 
| 338 350 | 
             
                    if key.match?(dialog.name)
         | 
| 339 351 | 
             
                      if show_easter_egg
         | 
| @@ -421,12 +433,9 @@ module IRB | |
| 421 433 | 
             
                  }
         | 
| 422 434 | 
             
                end
         | 
| 423 435 |  | 
| 424 | 
            -
                def display_document(matched | 
| 425 | 
            -
                   | 
| 426 | 
            -
             | 
| 427 | 
            -
                  rescue LoadError
         | 
| 428 | 
            -
                    return
         | 
| 429 | 
            -
                  end
         | 
| 436 | 
            +
                def display_document(matched)
         | 
| 437 | 
            +
                  driver = rdoc_ri_driver
         | 
| 438 | 
            +
                  return unless driver
         | 
| 430 439 |  | 
| 431 440 | 
             
                  if matched =~ /\A(?:::)?RubyVM/ and not ENV['RUBY_YES_I_AM_NOT_A_NORMAL_USER']
         | 
| 432 441 | 
             
                    IRB.__send__(:easter_egg)
         | 
| @@ -436,7 +445,6 @@ module IRB | |
| 436 445 | 
             
                  namespace = retrieve_doc_namespace(matched)
         | 
| 437 446 | 
             
                  return unless namespace
         | 
| 438 447 |  | 
| 439 | 
            -
                  driver ||= RDoc::RI::Driver.new
         | 
| 440 448 | 
             
                  if namespace.is_a?(Array)
         | 
| 441 449 | 
             
                    out = RDoc::Markup::Document.new
         | 
| 442 450 | 
             
                    namespace.each do |m|
         | 
    
        data/lib/irb/lc/error.rb
    CHANGED
    
    
    
        data/lib/irb/lc/ja/error.rb
    CHANGED
    
    
    
        data/lib/irb/lc/ja/help-message
    CHANGED
    
    | @@ -9,10 +9,18 @@ Usage:  irb.rb [options] [programfile] [arguments] | |
| 9 9 | 
             
              -W[level=2]       ruby -W と同じ.
         | 
| 10 10 | 
             
              --context-mode n  新しいワークスペースを作成した時に関連する Binding
         | 
| 11 11 | 
             
            		    オブジェクトの作成方法を 0 から 3 のいずれかに設定する.
         | 
| 12 | 
            +
              --extra-doc-dir   指定したディレクトリのドキュメントを追加で読み込む.
         | 
| 12 13 | 
             
              --echo	    実行結果を表示する(デフォルト).
         | 
| 13 14 | 
             
              --noecho	    実行結果を表示しない.
         | 
| 15 | 
            +
              --echo-on-assignment
         | 
| 16 | 
            +
                                代入結果を表示する.
         | 
| 17 | 
            +
              --noecho-on-assignment
         | 
| 18 | 
            +
                                代入結果を表示しない.
         | 
| 19 | 
            +
              --truncate-echo-on-assignment
         | 
| 20 | 
            +
                                truncateされた代入結果を表示する(デフォルト).
         | 
| 14 21 | 
             
              --inspect	    結果出力にinspectを用いる.
         | 
| 15 22 | 
             
              --noinspect	    結果出力にinspectを用いない.
         | 
| 23 | 
            +
              --no-pager        ページャを使用しない.
         | 
| 16 24 | 
             
              --multiline       マルチラインエディタを利用する.
         | 
| 17 25 | 
             
              --nomultiline     マルチラインエディタを利用しない.
         | 
| 18 26 | 
             
              --singleline      シングルラインエディタを利用する.
         | 
| @@ -34,6 +42,8 @@ Usage:  irb.rb [options] [programfile] [arguments] | |
| 34 42 | 
             
              --sample-book-mode/--simple-prompt
         | 
| 35 43 | 
             
            		    非常にシンプルなプロンプトを用いるモードです.
         | 
| 36 44 | 
             
              --noprompt	    プロンプト表示を行なわない.
         | 
| 45 | 
            +
              --script          スクリプトモード(最初の引数をスクリプトファイルとして扱う、デフォルト)
         | 
| 46 | 
            +
              --noscript        引数をargvとして扱う.
         | 
| 37 47 | 
             
              --single-irb	    irb 中で self を実行して得られるオブジェクトをサ
         | 
| 38 48 | 
             
            		    ブ irb と共有する.
         | 
| 39 49 | 
             
              --tracer	    コマンド実行時にトレースを行なう.
         |