irb 1.5.1 → 1.6.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e7dc14606c6de90f8f56048a7ec6f8ca2bc83a8d4e0aa50d60dbe84141389601
4
- data.tar.gz: bca1a92ee2088e483073d48dd9e0b3cdbf9b8d67768ed3fd922bb7e91da68039
3
+ metadata.gz: 7a14d4867e5744e554edbcd7e87f397bd01305fd2e5dca129bfa4d0a49abdd12
4
+ data.tar.gz: b6ed771b62fc49d60ac292a87cd5bafb2ec79b5715ec73bc816923fcb68de2ea
5
5
  SHA512:
6
- metadata.gz: b44c813a4fc0010423d0e7ac189dc264ea92587db1b05e16e6c8ec49ff20bc2b4c18b5cfa454543b7d894be0b6610c96a3bf17b85b31d9083d962665063c8a85
7
- data.tar.gz: af7f077aa6b2c67ccbe67209a35e622bff087a28615b3086a0511188da1b09d2284b662d659d3b308bf251488547aeaecf9da2b29454c2031d52c0e902ba7889
6
+ metadata.gz: 0acdbeae9c9aa9a83677a903ddf5006f82dc2dd4697d1e089ec360d0f77f049ebbaf3492b3ca5bda0a7c8814bac0e5ccde351e5a2d2c487170761d874204f02c
7
+ data.tar.gz: 4f92f7aadb2876a4d774ac52f27701cb8c723f400000a560f2452779b9562ad0d1a202b4534a52029662d0a2f910cdd816bdf43e275b800211c9ec062ae1241e
data/Gemfile CHANGED
@@ -11,5 +11,5 @@ group :development do
11
11
  gem "stackprof" if is_unix && !is_truffleruby
12
12
  gem "test-unit"
13
13
  gem "reline", github: "ruby/reline" if ENV["WITH_LATEST_RELINE"] == "true"
14
- gem "debug"
14
+ gem "debug", github: "ruby/debug"
15
15
  end
data/README.md CHANGED
@@ -42,56 +42,57 @@ The Readline extension module can be used with irb. Use of Readline is default i
42
42
 
43
43
  ## Commands
44
44
 
45
- The following commands are available on IRB.
46
-
47
- * `cwws`
48
- * Show the current workspace.
49
- * `cb`, `cws`, `chws`
50
- * Change the current workspace to an object.
51
- * `bindings`, `workspaces`
52
- * Show workspaces.
53
- * `edit`
54
- * Open a file with the editor command defined with `ENV["EDITOR"]`
55
- * `edit` - opens the file the current context belongs to (if applicable)
56
- * `edit foo.rb` - opens `foo.rb`
57
- * `edit Foo` - opens the location of `Foo`
58
- * `edit Foo.bar` - opens the location of `Foo.bar`
59
- * `edit Foo#bar` - opens the location of `Foo#bar`
60
- * `pushb`, `pushws`
61
- * Push an object to the workspace stack.
62
- * `popb`, `popws`
63
- * Pop a workspace from the workspace stack.
64
- * `load`
65
- * Load a Ruby file.
66
- * `require`
67
- * Require a Ruby file.
68
- * `source`
69
- * Loads a given file in the current session.
70
- * `irb`
71
- * Start a child IRB.
72
- * `jobs`
73
- * List of current sessions.
74
- * `fg`
75
- * Switches to the session of the given number.
76
- * `kill`
77
- * Kills the session with the given number.
78
- * `help`
79
- * Enter the mode to look up RI documents.
80
- * `irb_info`
81
- * Show information about IRB.
82
- * `ls`
83
- * Show methods, constants, and variables.
84
- `-g [query]` or `-G [query]` allows you to filter out the output.
85
- * `measure`
86
- * `measure` enables the mode to measure processing time. `measure :off` disables it.
87
- * `$`, `show_source`
88
- * Show the source code of a given method or constant.
89
- * `@`, `whereami`
90
- * Show the source code around binding.irb again.
91
- * `debug`
92
- * Start the debugger of debug.gem.
93
- * `break`, `delete`, `next`, `step`, `continue`, `finish`, `backtrace`, `info`, `catch`
94
- * Start the debugger of debug.gem and run the command on it.
45
+ The following commands are available on IRB. You can get the same output from the `show_cmds` command.
46
+
47
+
48
+ ```
49
+ IRB
50
+ cwws Show the current workspace.
51
+ chws Change the current workspace to an object.
52
+ workspaces Show workspaces.
53
+ pushws Push an object to the workspace stack.
54
+ popws Pop a workspace from the workspace stack.
55
+ irb_load Load a Ruby file.
56
+ irb_require Require a Ruby file.
57
+ source Loads a given file in the current session.
58
+ irb Start a child IRB.
59
+ jobs List of current sessions.
60
+ fg Switches to the session of the given number.
61
+ kill Kills the session with the given number.
62
+ irb_info Show information about IRB.
63
+ show_cmds List all available commands and their description.
64
+
65
+ Debugging
66
+ debug Start the debugger of debug.gem.
67
+ break Start the debugger of debug.gem and run its `break` command.
68
+ catch Start the debugger of debug.gem and run its `catch` command.
69
+ next Start the debugger of debug.gem and run its `next` command.
70
+ delete Start the debugger of debug.gem and run its `delete` command.
71
+ step Start the debugger of debug.gem and run its `step` command.
72
+ continue Start the debugger of debug.gem and run its `continue` command.
73
+ finish Start the debugger of debug.gem and run its `finish` command.
74
+ backtrace Start the debugger of debug.gem and run its `backtrace` command.
75
+ info Start the debugger of debug.gem and run its `info` command.
76
+
77
+ Misc
78
+ edit Open a file with the editor command defined with `ENV["EDITOR"]`.
79
+ measure `measure` enables the mode to measure processing time. `measure :off` disables it.
80
+
81
+ Context
82
+ show_doc Enter the mode to look up RI documents.
83
+ ls Show methods, constants, and variables. `-g [query]` or `-G [query]` allows you to filter out the output.
84
+ show_source Show the source code of a given method or constant.
85
+ whereami Show the source code around binding.irb again.
86
+ ```
87
+
88
+ ## Configuration
89
+
90
+ ### Environment Variables
91
+
92
+ - `NO_COLOR`: Assigning a value to it disables IRB's colorization.
93
+ - `IRB_USE_AUTOCOMPLETE`: Setting it to `false` disables IRB's autocompletion.
94
+ - `EDITOR`: Its value would be used to open files by the `edit` command.
95
+ - `IRBRC`: The file specified would be evaluated as IRB's rc-file.
95
96
 
96
97
  ## Documentation
97
98
 
@@ -6,7 +6,7 @@ module IRB
6
6
  # :stopdoc:
7
7
 
8
8
  module ExtendCommand
9
- class Backtrace < Debug
9
+ class Backtrace < DebugCommand
10
10
  def self.transform_args(args)
11
11
  args&.dump
12
12
  end
data/lib/irb/cmd/break.rb CHANGED
@@ -6,7 +6,7 @@ module IRB
6
6
  # :stopdoc:
7
7
 
8
8
  module ExtendCommand
9
- class Break < Debug
9
+ class Break < DebugCommand
10
10
  def self.transform_args(args)
11
11
  args&.dump
12
12
  end
data/lib/irb/cmd/catch.rb CHANGED
@@ -6,7 +6,7 @@ module IRB
6
6
  # :stopdoc:
7
7
 
8
8
  module ExtendCommand
9
- class Catch < Debug
9
+ class Catch < DebugCommand
10
10
  def self.transform_args(args)
11
11
  args&.dump
12
12
  end
data/lib/irb/cmd/chws.rb CHANGED
@@ -19,12 +19,18 @@ module IRB
19
19
  module ExtendCommand
20
20
 
21
21
  class CurrentWorkingWorkspace < Nop
22
+ category "IRB"
23
+ description "Show the current workspace."
24
+
22
25
  def execute(*obj)
23
26
  irb_context.main
24
27
  end
25
28
  end
26
29
 
27
30
  class ChangeWorkspace < Nop
31
+ category "IRB"
32
+ description "Change the current workspace to an object."
33
+
28
34
  def execute(*obj)
29
35
  irb_context.change_workspace(*obj)
30
36
  irb_context.main
@@ -6,7 +6,7 @@ module IRB
6
6
  # :stopdoc:
7
7
 
8
8
  module ExtendCommand
9
- class Continue < Debug
9
+ class Continue < DebugCommand
10
10
  def execute(*args)
11
11
  super(do_cmds: ["continue", *args].join(" "))
12
12
  end
data/lib/irb/cmd/debug.rb CHANGED
@@ -5,6 +5,9 @@ module IRB
5
5
 
6
6
  module ExtendCommand
7
7
  class Debug < Nop
8
+ category "Debugging"
9
+ description "Start the debugger of debug.gem."
10
+
8
11
  BINDING_IRB_FRAME_REGEXPS = [
9
12
  '<internal:prelude>',
10
13
  binding.method(:irb).source_location.first,
@@ -52,6 +55,13 @@ module IRB
52
55
  end
53
56
  end
54
57
 
58
+ module SkipPathHelperForIRB
59
+ def skip_internal_path?(path)
60
+ # The latter can be removed once https://github.com/ruby/debug/issues/866 is resolved
61
+ super || path.match?(IRB_DIR) || path.match?('<internal:prelude>')
62
+ end
63
+ end
64
+
55
65
  def setup_debugger
56
66
  unless defined?(DEBUGGER__::SESSION)
57
67
  begin
@@ -72,6 +82,8 @@ module IRB
72
82
  end
73
83
  frames
74
84
  end
85
+
86
+ DEBUGGER__::ThreadClient.prepend(SkipPathHelperForIRB)
75
87
  end
76
88
 
77
89
  true
@@ -108,5 +120,16 @@ module IRB
108
120
  end
109
121
  end
110
122
  end
123
+
124
+ class DebugCommand < Debug
125
+ def self.category
126
+ "Debugging"
127
+ end
128
+
129
+ def self.description
130
+ command_name = self.name.split("::").last.downcase
131
+ "Start the debugger of debug.gem and run its `#{command_name}` command."
132
+ end
133
+ end
111
134
  end
112
135
  end
@@ -6,7 +6,7 @@ module IRB
6
6
  # :stopdoc:
7
7
 
8
8
  module ExtendCommand
9
- class Delete < Debug
9
+ class Delete < DebugCommand
10
10
  def execute(*args)
11
11
  super(pre_cmds: ["delete", *args].join(" "))
12
12
  end
data/lib/irb/cmd/edit.rb CHANGED
@@ -6,6 +6,9 @@ module IRB
6
6
 
7
7
  module ExtendCommand
8
8
  class Edit < Nop
9
+ category "Misc"
10
+ description 'Open a file with the editor command defined with `ENV["EDITOR"]`.'
11
+
9
12
  class << self
10
13
  def transform_args(args)
11
14
  # Return a string literal as is for backward compatibility
@@ -15,13 +18,6 @@ module IRB
15
18
  args.strip.dump
16
19
  end
17
20
  end
18
-
19
- private
20
-
21
- def string_literal?(args)
22
- sexp = Ripper.sexp(args)
23
- sexp && sexp.size == 2 && sexp.last&.first&.first == :string_literal
24
- end
25
21
  end
26
22
 
27
23
  def execute(*args)
@@ -6,7 +6,7 @@ module IRB
6
6
  # :stopdoc:
7
7
 
8
8
  module ExtendCommand
9
- class Finish < Debug
9
+ class Finish < DebugCommand
10
10
  def execute(*args)
11
11
  super(do_cmds: ["finish", *args].join(" "))
12
12
  end
data/lib/irb/cmd/help.rb CHANGED
@@ -16,6 +16,20 @@ module IRB
16
16
 
17
17
  module ExtendCommand
18
18
  class Help < Nop
19
+ class << self
20
+ def transform_args(args)
21
+ # Return a string literal as is for backward compatibility
22
+ if args.empty? || string_literal?(args)
23
+ args
24
+ else # Otherwise, consider the input as a String for convenience
25
+ args.strip.dump
26
+ end
27
+ end
28
+ end
29
+
30
+ category "Context"
31
+ description "Enter the mode to look up RI documents."
32
+
19
33
  def execute(*names)
20
34
  require 'rdoc/ri/driver'
21
35
  opts = RDoc::RI::Driver.process_args([])
data/lib/irb/cmd/info.rb CHANGED
@@ -6,7 +6,7 @@ module IRB
6
6
  # :stopdoc:
7
7
 
8
8
  module ExtendCommand
9
- class Info < Debug
9
+ class Info < DebugCommand
10
10
  def self.transform_args(args)
11
11
  args&.dump
12
12
  end
@@ -7,6 +7,9 @@ module IRB
7
7
 
8
8
  module ExtendCommand
9
9
  class IrbInfo < Nop
10
+ category "IRB"
11
+ description "Show information about IRB."
12
+
10
13
  def execute
11
14
  Class.new {
12
15
  def inspect
data/lib/irb/cmd/load.rb CHANGED
@@ -17,18 +17,29 @@ module IRB
17
17
  # :stopdoc:
18
18
 
19
19
  module ExtendCommand
20
- class Load < Nop
20
+ class LoaderCommand < Nop
21
21
  include IrbLoader
22
22
 
23
- def execute(file_name, priv = nil)
24
- return irb_load(file_name, priv)
23
+ def raise_cmd_argument_error
24
+ raise CommandArgumentError.new("Please specify the file name.")
25
25
  end
26
26
  end
27
27
 
28
- class Require < Nop
29
- include IrbLoader
28
+ class Load < LoaderCommand
29
+ category "IRB"
30
+ description "Load a Ruby file."
31
+
32
+ def execute(file_name = nil, priv = nil)
33
+ raise_cmd_argument_error unless file_name
34
+ irb_load(file_name, priv)
35
+ end
36
+ end
30
37
 
31
- def execute(file_name)
38
+ class Require < LoaderCommand
39
+ category "IRB"
40
+ description "Require a Ruby file."
41
+ def execute(file_name = nil)
42
+ raise_cmd_argument_error unless file_name
32
43
 
33
44
  rex = Regexp.new("#{Regexp.quote(file_name)}(\.o|\.rb)?")
34
45
  return false if $".find{|f| f =~ rex}
@@ -56,13 +67,16 @@ module IRB
56
67
  end
57
68
  end
58
69
 
59
- class Source < Nop
60
- include IrbLoader
61
- def execute(file_name)
70
+ class Source < LoaderCommand
71
+ category "IRB"
72
+ description "Loads a given file in the current session."
73
+
74
+ def execute(file_name = nil)
75
+ raise_cmd_argument_error unless file_name
76
+
62
77
  source_file(file_name)
63
78
  end
64
79
  end
65
80
  end
66
-
67
81
  # :startdoc:
68
82
  end
data/lib/irb/cmd/ls.rb CHANGED
@@ -9,6 +9,9 @@ module IRB
9
9
 
10
10
  module ExtendCommand
11
11
  class Ls < Nop
12
+ category "Context"
13
+ description "Show methods, constants, and variables. `-g [query]` or `-G [query]` allows you to filter out the output."
14
+
12
15
  def self.transform_args(args)
13
16
  if match = args&.match(/\A(?<args>.+\s|)(-g|-G)\s+(?<grep>[^\s]+)\s*\n\z/)
14
17
  args = match[:args]
@@ -30,6 +33,7 @@ module IRB
30
33
  o.dump("instance variables", obj.instance_variables)
31
34
  o.dump("class variables", klass.class_variables)
32
35
  o.dump("locals", locals)
36
+ nil
33
37
  end
34
38
 
35
39
  def dump_methods(o, klass, obj)
@@ -5,6 +5,9 @@ module IRB
5
5
 
6
6
  module ExtendCommand
7
7
  class Measure < Nop
8
+ category "Misc"
9
+ description "`measure` enables the mode to measure processing time. `measure :off` disables it."
10
+
8
11
  def initialize(*args)
9
12
  super(*args)
10
13
  end
data/lib/irb/cmd/next.rb CHANGED
@@ -6,7 +6,7 @@ module IRB
6
6
  # :stopdoc:
7
7
 
8
8
  module ExtendCommand
9
- class Next < Debug
9
+ class Next < DebugCommand
10
10
  def execute(*args)
11
11
  super(do_cmds: ["next", *args].join(" "))
12
12
  end
data/lib/irb/cmd/nop.rb CHANGED
@@ -13,17 +13,41 @@ module IRB
13
13
  # :stopdoc:
14
14
 
15
15
  module ExtendCommand
16
+ class CommandArgumentError < StandardError; end
17
+
16
18
  class Nop
19
+ class << self
20
+ def category(category = nil)
21
+ @category = category if category
22
+ @category
23
+ end
24
+
25
+ def description(description = nil)
26
+ @description = description if description
27
+ @description
28
+ end
29
+
30
+ private
31
+
32
+ def string_literal?(args)
33
+ sexp = Ripper.sexp(args)
34
+ sexp && sexp.size == 2 && sexp.last&.first&.first == :string_literal
35
+ end
36
+ end
17
37
 
18
38
  if RUBY_ENGINE == "ruby" && RUBY_VERSION >= "2.7.0"
19
39
  def self.execute(conf, *opts, **kwargs, &block)
20
40
  command = new(conf)
21
41
  command.execute(*opts, **kwargs, &block)
42
+ rescue CommandArgumentError => e
43
+ puts e.message
22
44
  end
23
45
  else
24
46
  def self.execute(conf, *opts, &block)
25
47
  command = new(conf)
26
48
  command.execute(*opts, &block)
49
+ rescue CommandArgumentError => e
50
+ puts e.message
27
51
  end
28
52
  end
29
53
 
@@ -18,12 +18,18 @@ module IRB
18
18
 
19
19
  module ExtendCommand
20
20
  class Workspaces < Nop
21
+ category "IRB"
22
+ description "Show workspaces."
23
+
21
24
  def execute(*obj)
22
25
  irb_context.workspaces.collect{|ws| ws.main}
23
26
  end
24
27
  end
25
28
 
26
29
  class PushWorkspace < Workspaces
30
+ category "IRB"
31
+ description "Push an object to the workspace stack."
32
+
27
33
  def execute(*obj)
28
34
  irb_context.push_workspace(*obj)
29
35
  super
@@ -31,6 +37,9 @@ module IRB
31
37
  end
32
38
 
33
39
  class PopWorkspace < Workspaces
40
+ category "IRB"
41
+ description "Pop a workspace from the workspace stack."
42
+
34
43
  def execute(*obj)
35
44
  irb_context.pop_workspace(*obj)
36
45
  super
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "stringio"
4
+ require_relative "nop"
5
+
6
+ module IRB
7
+ # :stopdoc:
8
+
9
+ module ExtendCommand
10
+ class ShowCmds < Nop
11
+ category "IRB"
12
+ description "List all available commands and their description."
13
+
14
+ def execute(*args)
15
+ commands_info = IRB::ExtendCommandBundle.all_commands_info
16
+ commands_grouped_by_categories = commands_info.group_by { |cmd| cmd[:category] }
17
+ longest_cmd_name_length = commands_info.map { |c| c[:display_name] }.max { |a, b| a.length <=> b.length }.length
18
+
19
+ output = StringIO.new
20
+
21
+ commands_grouped_by_categories.each do |category, cmds|
22
+ output.puts Color.colorize(category, [:BOLD])
23
+
24
+ cmds.each do |cmd|
25
+ output.puts " #{cmd[:display_name].to_s.ljust(longest_cmd_name_length)} #{cmd[:description]}"
26
+ end
27
+
28
+ output.puts
29
+ end
30
+
31
+ puts output.string
32
+
33
+ nil
34
+ end
35
+ end
36
+ end
37
+
38
+ # :startdoc:
39
+ end
@@ -9,6 +9,9 @@ module IRB
9
9
 
10
10
  module ExtendCommand
11
11
  class ShowSource < Nop
12
+ category "Context"
13
+ description "Show the source code of a given method or constant."
14
+
12
15
  class << self
13
16
  def transform_args(args)
14
17
  # Return a string literal as is for backward compatibility
@@ -62,11 +65,6 @@ module IRB
62
65
  end
63
66
  first_line
64
67
  end
65
-
66
- def string_literal?(args)
67
- sexp = Ripper.sexp(args)
68
- sexp && sexp.size == 2 && sexp.last&.first&.first == :string_literal
69
- end
70
68
  end
71
69
 
72
70
  def execute(str = nil)
data/lib/irb/cmd/step.rb CHANGED
@@ -6,10 +6,9 @@ module IRB
6
6
  # :stopdoc:
7
7
 
8
8
  module ExtendCommand
9
- class Step < Debug
9
+ class Step < DebugCommand
10
10
  def execute(*args)
11
- # Run `next` first to move out of binding.irb
12
- super(pre_cmds: "next", do_cmds: ["step", *args].join(" "))
11
+ super(do_cmds: ["step", *args].join(" "))
13
12
  end
14
13
  end
15
14
  end
@@ -10,31 +10,57 @@
10
10
  #
11
11
 
12
12
  require_relative "nop"
13
- require_relative "../ext/multi-irb"
14
13
 
15
14
  module IRB
16
15
  # :stopdoc:
17
16
 
18
17
  module ExtendCommand
19
- class IrbCommand < Nop
18
+ class MultiIRBCommand < Nop
19
+ def initialize(conf)
20
+ super
21
+ extend_irb_context
22
+ end
23
+
24
+ private
25
+
26
+ def extend_irb_context
27
+ # this extension patches IRB context like IRB.CurrentContext
28
+ require_relative "../ext/multi-irb"
29
+ end
30
+ end
31
+
32
+ class IrbCommand < MultiIRBCommand
33
+ category "IRB"
34
+ description "Start a child IRB."
35
+
20
36
  def execute(*obj)
21
37
  IRB.irb(nil, *obj)
22
38
  end
23
39
  end
24
40
 
25
- class Jobs < Nop
41
+ class Jobs < MultiIRBCommand
42
+ category "IRB"
43
+ description "List of current sessions."
44
+
26
45
  def execute
27
46
  IRB.JobManager
28
47
  end
29
48
  end
30
49
 
31
- class Foreground < Nop
32
- def execute(key)
50
+ class Foreground < MultiIRBCommand
51
+ category "IRB"
52
+ description "Switches to the session of the given number."
53
+
54
+ def execute(key = nil)
55
+ raise CommandArgumentError.new("Please specify the id of target IRB job (listed in the `jobs` command).") unless key
33
56
  IRB.JobManager.switch(key)
34
57
  end
35
58
  end
36
59
 
37
- class Kill < Nop
60
+ class Kill < MultiIRBCommand
61
+ category "IRB"
62
+ description "Kills the session with the given number."
63
+
38
64
  def execute(*keys)
39
65
  IRB.JobManager.kill(*keys)
40
66
  end
@@ -7,6 +7,9 @@ module IRB
7
7
 
8
8
  module ExtendCommand
9
9
  class Whereami < Nop
10
+ category "Context"
11
+ description "Show the source code around binding.irb again."
12
+
10
13
  def execute(*)
11
14
  code = irb_context.workspace.code_around_binding
12
15
  if code
@@ -70,7 +70,7 @@ module IRB
70
70
  end
71
71
  history_file = IRB.rc_file("_history") unless history_file
72
72
  if File.exist?(history_file)
73
- open(history_file, "r:#{IRB.conf[:LC_MESSAGES].encoding}") do |f|
73
+ File.open(history_file, "r:#{IRB.conf[:LC_MESSAGES].encoding}") do |f|
74
74
  f.each { |l|
75
75
  l = l.chomp
76
76
  if self.class == RelineInputMethod and history.last&.end_with?("\\")
@@ -45,14 +45,15 @@ module IRB # :nodoc:
45
45
  [:quit, :irb_exit, OVERRIDE_PRIVATE_ONLY],
46
46
  ]
47
47
 
48
+
48
49
  @EXTEND_COMMANDS = [
49
50
  [
50
51
  :irb_current_working_workspace, :CurrentWorkingWorkspace, "cmd/chws",
52
+ [:cwws, NO_OVERRIDE],
53
+ [:pwws, NO_OVERRIDE],
51
54
  [:irb_print_working_workspace, OVERRIDE_ALL],
52
55
  [:irb_cwws, OVERRIDE_ALL],
53
56
  [:irb_pwws, OVERRIDE_ALL],
54
- [:cwws, NO_OVERRIDE],
55
- [:pwws, NO_OVERRIDE],
56
57
  [:irb_current_working_binding, OVERRIDE_ALL],
57
58
  [:irb_print_working_binding, OVERRIDE_ALL],
58
59
  [:irb_cwb, OVERRIDE_ALL],
@@ -60,10 +61,10 @@ module IRB # :nodoc:
60
61
  ],
61
62
  [
62
63
  :irb_change_workspace, :ChangeWorkspace, "cmd/chws",
63
- [:irb_chws, OVERRIDE_ALL],
64
- [:irb_cws, OVERRIDE_ALL],
65
64
  [:chws, NO_OVERRIDE],
66
65
  [:cws, NO_OVERRIDE],
66
+ [:irb_chws, OVERRIDE_ALL],
67
+ [:irb_cws, OVERRIDE_ALL],
67
68
  [:irb_change_binding, OVERRIDE_ALL],
68
69
  [:irb_cb, OVERRIDE_ALL],
69
70
  [:cb, NO_OVERRIDE],
@@ -77,16 +78,16 @@ module IRB # :nodoc:
77
78
  ],
78
79
  [
79
80
  :irb_push_workspace, :PushWorkspace, "cmd/pushws",
80
- [:irb_pushws, OVERRIDE_ALL],
81
81
  [:pushws, NO_OVERRIDE],
82
+ [:irb_pushws, OVERRIDE_ALL],
82
83
  [:irb_push_binding, OVERRIDE_ALL],
83
84
  [:irb_pushb, OVERRIDE_ALL],
84
85
  [:pushb, NO_OVERRIDE],
85
86
  ],
86
87
  [
87
88
  :irb_pop_workspace, :PopWorkspace, "cmd/pushws",
88
- [:irb_popws, OVERRIDE_ALL],
89
89
  [:popws, NO_OVERRIDE],
90
+ [:irb_popws, OVERRIDE_ALL],
90
91
  [:irb_pop_binding, OVERRIDE_ALL],
91
92
  [:irb_popb, OVERRIDE_ALL],
92
93
  [:popb, NO_OVERRIDE],
@@ -131,7 +132,7 @@ module IRB # :nodoc:
131
132
  :irb_catch, :Catch, "cmd/catch",
132
133
  ],
133
134
  [
134
- :irb_next, :Next, "cmd/next",
135
+ :irb_next, :Next, "cmd/next"
135
136
  ],
136
137
  [
137
138
  :irb_delete, :Delete, "cmd/delete",
@@ -161,6 +162,7 @@ module IRB # :nodoc:
161
162
 
162
163
  [
163
164
  :irb_help, :Help, "cmd/help",
165
+ [:show_doc, NO_OVERRIDE],
164
166
  [:help, NO_OVERRIDE],
165
167
  ],
166
168
 
@@ -187,9 +189,41 @@ module IRB # :nodoc:
187
189
  :irb_whereami, :Whereami, "cmd/whereami",
188
190
  [:whereami, NO_OVERRIDE],
189
191
  ],
190
-
192
+ [
193
+ :irb_show_cmds, :ShowCmds, "cmd/show_cmds",
194
+ [:show_cmds, NO_OVERRIDE],
195
+ ]
191
196
  ]
192
197
 
198
+
199
+ @@commands = []
200
+
201
+ def self.all_commands_info
202
+ return @@commands unless @@commands.empty?
203
+ user_aliases = IRB.CurrentContext.command_aliases.each_with_object({}) do |(alias_name, target), result|
204
+ result[target] ||= []
205
+ result[target] << alias_name
206
+ end
207
+
208
+ @EXTEND_COMMANDS.each do |cmd_name, cmd_class, load_file, *aliases|
209
+ if !defined?(ExtendCommand) || !ExtendCommand.const_defined?(cmd_class, false)
210
+ require_relative load_file
211
+ end
212
+
213
+ klass = ExtendCommand.const_get(cmd_class, false)
214
+ aliases = aliases.map { |a| a.first }
215
+
216
+ if additional_aliases = user_aliases[cmd_name]
217
+ aliases += additional_aliases
218
+ end
219
+
220
+ display_name = aliases.shift || cmd_name
221
+ @@commands << { display_name: display_name, description: klass.description, category: klass.category }
222
+ end
223
+
224
+ @@commands
225
+ end
226
+
193
227
  # Convert a command name to its implementation class if such command exists
194
228
  def self.load_command(command)
195
229
  command = command.to_sym
data/lib/irb/init.rb CHANGED
@@ -45,7 +45,7 @@ module IRB # :nodoc:
45
45
 
46
46
  @CONF[:USE_SINGLELINE] = false unless defined?(ReadlineInputMethod)
47
47
  @CONF[:USE_COLORIZE] = (nc = ENV['NO_COLOR']).nil? || nc.empty?
48
- @CONF[:USE_AUTOCOMPLETE] = true
48
+ @CONF[:USE_AUTOCOMPLETE] = ENV.fetch("IRB_USE_AUTOCOMPLETE", "true") != "false"
49
49
  @CONF[:INSPECT_MODE] = true
50
50
  @CONF[:USE_TRACER] = false
51
51
  @CONF[:USE_LOADER] = false
data/lib/irb/version.rb CHANGED
@@ -11,7 +11,7 @@
11
11
  #
12
12
 
13
13
  module IRB # :nodoc:
14
- VERSION = "1.5.1"
14
+ VERSION = "1.6.1"
15
15
  @RELEASE_VERSION = VERSION
16
- @LAST_UPDATE_DATE = "2022-11-28"
16
+ @LAST_UPDATE_DATE = "2022-12-13"
17
17
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: irb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - aycabta
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2022-11-28 00:00:00.000000000 Z
12
+ date: 2022-12-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: reline
@@ -65,6 +65,7 @@ files:
65
65
  - lib/irb/cmd/next.rb
66
66
  - lib/irb/cmd/nop.rb
67
67
  - lib/irb/cmd/pushws.rb
68
+ - lib/irb/cmd/show_cmds.rb
68
69
  - lib/irb/cmd/show_source.rb
69
70
  - lib/irb/cmd/step.rb
70
71
  - lib/irb/cmd/subirb.rb
@@ -125,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
126
  - !ruby/object:Gem::Version
126
127
  version: '0'
127
128
  requirements: []
128
- rubygems_version: 3.3.26
129
+ rubygems_version: 3.3.7
129
130
  signing_key:
130
131
  specification_version: 4
131
132
  summary: Interactive Ruby command-line tool for REPL (Read Eval Print Loop).