byebug 10.0.2 → 11.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +358 -287
  3. data/CONTRIBUTING.md +6 -34
  4. data/GUIDE.md +9 -8
  5. data/LICENSE +18 -18
  6. data/README.md +83 -79
  7. data/ext/byebug/byebug.c +4 -9
  8. data/ext/byebug/byebug.h +4 -2
  9. data/ext/byebug/context.c +15 -2
  10. data/lib/byebug.rb +1 -1
  11. data/lib/byebug/attacher.rb +4 -4
  12. data/lib/byebug/command.rb +2 -2
  13. data/lib/byebug/command_list.rb +1 -1
  14. data/lib/byebug/commands.rb +38 -37
  15. data/lib/byebug/commands/break.rb +10 -14
  16. data/lib/byebug/commands/catch.rb +4 -8
  17. data/lib/byebug/commands/condition.rb +3 -5
  18. data/lib/byebug/commands/continue.rb +27 -9
  19. data/lib/byebug/commands/debug.rb +2 -2
  20. data/lib/byebug/commands/delete.rb +3 -5
  21. data/lib/byebug/commands/disable.rb +4 -4
  22. data/lib/byebug/commands/disable/breakpoints.rb +1 -1
  23. data/lib/byebug/commands/disable/display.rb +1 -1
  24. data/lib/byebug/commands/display.rb +2 -2
  25. data/lib/byebug/commands/down.rb +3 -3
  26. data/lib/byebug/commands/edit.rb +2 -1
  27. data/lib/byebug/commands/enable.rb +3 -3
  28. data/lib/byebug/commands/enable/breakpoints.rb +1 -1
  29. data/lib/byebug/commands/enable/display.rb +1 -1
  30. data/lib/byebug/commands/finish.rb +2 -2
  31. data/lib/byebug/commands/frame.rb +3 -3
  32. data/lib/byebug/commands/help.rb +2 -2
  33. data/lib/byebug/commands/history.rb +2 -2
  34. data/lib/byebug/commands/info.rb +6 -6
  35. data/lib/byebug/commands/info/breakpoints.rb +2 -4
  36. data/lib/byebug/commands/info/display.rb +1 -3
  37. data/lib/byebug/commands/info/file.rb +2 -4
  38. data/lib/byebug/commands/interrupt.rb +1 -1
  39. data/lib/byebug/commands/irb.rb +2 -4
  40. data/lib/byebug/commands/kill.rb +3 -5
  41. data/lib/byebug/commands/list.rb +4 -4
  42. data/lib/byebug/commands/method.rb +2 -2
  43. data/lib/byebug/commands/next.rb +2 -2
  44. data/lib/byebug/commands/pry.rb +3 -5
  45. data/lib/byebug/commands/quit.rb +4 -4
  46. data/lib/byebug/commands/restart.rb +3 -3
  47. data/lib/byebug/commands/save.rb +1 -1
  48. data/lib/byebug/commands/set.rb +3 -3
  49. data/lib/byebug/commands/show.rb +1 -1
  50. data/lib/byebug/commands/skip.rb +85 -0
  51. data/lib/byebug/commands/source.rb +2 -4
  52. data/lib/byebug/commands/step.rb +2 -2
  53. data/lib/byebug/commands/thread.rb +6 -6
  54. data/lib/byebug/commands/thread/current.rb +1 -1
  55. data/lib/byebug/commands/thread/list.rb +1 -1
  56. data/lib/byebug/commands/thread/resume.rb +2 -4
  57. data/lib/byebug/commands/thread/stop.rb +1 -1
  58. data/lib/byebug/commands/thread/switch.rb +1 -1
  59. data/lib/byebug/commands/tracevar.rb +2 -5
  60. data/lib/byebug/commands/undisplay.rb +5 -6
  61. data/lib/byebug/commands/untracevar.rb +1 -1
  62. data/lib/byebug/commands/up.rb +3 -3
  63. data/lib/byebug/commands/var.rb +8 -8
  64. data/lib/byebug/commands/var/all.rb +1 -1
  65. data/lib/byebug/commands/var/args.rb +1 -1
  66. data/lib/byebug/commands/var/const.rb +2 -4
  67. data/lib/byebug/commands/var/instance.rb +1 -1
  68. data/lib/byebug/commands/var/local.rb +1 -1
  69. data/lib/byebug/commands/where.rb +2 -2
  70. data/lib/byebug/context.rb +4 -4
  71. data/lib/byebug/core.rb +10 -9
  72. data/lib/byebug/frame.rb +2 -2
  73. data/lib/byebug/helpers/frame.rb +1 -1
  74. data/lib/byebug/helpers/parse.rb +1 -3
  75. data/lib/byebug/helpers/string.rb +0 -3
  76. data/lib/byebug/helpers/toggle.rb +2 -4
  77. data/lib/byebug/helpers/var.rb +1 -1
  78. data/lib/byebug/history.rb +1 -1
  79. data/lib/byebug/interface.rb +6 -6
  80. data/lib/byebug/interfaces/local_interface.rb +21 -2
  81. data/lib/byebug/interfaces/remote_interface.rb +1 -1
  82. data/lib/byebug/interfaces/script_interface.rb +2 -1
  83. data/lib/byebug/printers/base.rb +4 -5
  84. data/lib/byebug/printers/plain.rb +1 -1
  85. data/lib/byebug/processors/command_processor.rb +2 -2
  86. data/lib/byebug/processors/control_processor.rb +1 -1
  87. data/lib/byebug/processors/post_mortem_processor.rb +1 -1
  88. data/lib/byebug/processors/script_processor.rb +1 -1
  89. data/lib/byebug/remote.rb +3 -3
  90. data/lib/byebug/remote/client.rb +2 -0
  91. data/lib/byebug/runner.rb +7 -7
  92. data/lib/byebug/setting.rb +2 -2
  93. data/lib/byebug/settings/autoirb.rb +2 -2
  94. data/lib/byebug/settings/autolist.rb +2 -2
  95. data/lib/byebug/settings/autopry.rb +2 -2
  96. data/lib/byebug/settings/autosave.rb +1 -1
  97. data/lib/byebug/settings/basename.rb +1 -1
  98. data/lib/byebug/settings/callstyle.rb +2 -2
  99. data/lib/byebug/settings/fullpath.rb +1 -1
  100. data/lib/byebug/settings/histfile.rb +1 -1
  101. data/lib/byebug/settings/histsize.rb +1 -1
  102. data/lib/byebug/settings/linetrace.rb +1 -1
  103. data/lib/byebug/settings/listsize.rb +1 -1
  104. data/lib/byebug/settings/post_mortem.rb +1 -1
  105. data/lib/byebug/settings/savefile.rb +1 -1
  106. data/lib/byebug/settings/stack_on_error.rb +1 -1
  107. data/lib/byebug/settings/width.rb +1 -1
  108. data/lib/byebug/source_file_formatter.rb +2 -2
  109. data/lib/byebug/subcommands.rb +2 -2
  110. data/lib/byebug/version.rb +1 -1
  111. metadata +9 -9
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/thread"
3
+ require_relative "../../helpers/thread"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/thread"
3
+ require_relative "../../helpers/thread"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/thread"
3
+ require_relative "../../helpers/thread"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -35,9 +35,7 @@ module Byebug
35
35
  context, err = context_from_thread(@match[1])
36
36
  return errmsg(err) if err
37
37
 
38
- unless context.suspended?
39
- return errmsg(pr("thread.errors.already_running"))
40
- end
38
+ return errmsg(pr("thread.errors.already_running")) unless context.suspended?
41
39
 
42
40
  context.resume
43
41
  display_context(context)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/thread"
3
+ require_relative "../../helpers/thread"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/thread"
3
+ require_relative "../../helpers/thread"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/command"
3
+ require_relative "../command"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -32,10 +32,7 @@ module Byebug
32
32
  def execute
33
33
  var = @match[1]
34
34
  return errmsg(pr("trace.errors.needs_global_variable")) unless var
35
-
36
- unless global_variables.include?(:"#{var}")
37
- return errmsg(pr("trace.errors.var_is_not_global", name: var))
38
- end
35
+ return errmsg(pr("trace.errors.var_is_not_global", name: var)) unless global_variables.include?(:"#{var}")
39
36
 
40
37
  stop = @match[2] && @match[2] !~ /nostop/
41
38
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/command"
4
- require "byebug/helpers/parse"
3
+ require_relative "../command"
4
+ require_relative "../helpers/parse"
5
5
 
6
6
  module Byebug
7
7
  #
@@ -37,11 +37,10 @@ module Byebug
37
37
  pos, err = get_int(@match[1], "Undisplay", 1, Byebug.displays.size)
38
38
  return errmsg(err) unless err.nil?
39
39
 
40
- unless Byebug.displays[pos - 1]
41
- return errmsg(pr("display.errors.undefined", expr: pos))
42
- end
40
+ last_display = Byebug.displays[pos - 1]
41
+ return errmsg(pr("display.errors.undefined", expr: pos)) unless last_display
43
42
 
44
- Byebug.displays[pos - 1][0] = nil
43
+ last_display[0] = nil
45
44
  else
46
45
  return unless confirm(pr("display.confirmations.clear_all"))
47
46
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/command"
3
+ require_relative "../command"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "pathname"
4
- require "byebug/command"
5
- require "byebug/helpers/frame"
6
- require "byebug/helpers/parse"
4
+ require_relative "../command"
5
+ require_relative "../helpers/frame"
6
+ require_relative "../helpers/parse"
7
7
 
8
8
  module Byebug
9
9
  #
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/subcommands"
4
-
5
- require "byebug/commands/var/all"
6
- require "byebug/commands/var/args"
7
- require "byebug/commands/var/const"
8
- require "byebug/commands/var/instance"
9
- require "byebug/commands/var/local"
10
- require "byebug/commands/var/global"
3
+ require_relative "../subcommands"
4
+
5
+ require_relative "var/all"
6
+ require_relative "var/args"
7
+ require_relative "var/const"
8
+ require_relative "var/instance"
9
+ require_relative "var/local"
10
+ require_relative "var/global"
11
11
 
12
12
  module Byebug
13
13
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/var"
3
+ require_relative "../../helpers/var"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/var"
3
+ require_relative "../../helpers/var"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/eval"
3
+ require_relative "../../helpers/eval"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -33,9 +33,7 @@ module Byebug
33
33
 
34
34
  def execute
35
35
  obj = warning_eval(str_obj)
36
- unless obj.is_a?(Module)
37
- return errmsg(pr("variable.errors.not_module", object: str_obj))
38
- end
36
+ return errmsg(pr("variable.errors.not_module", object: str_obj)) unless obj.is_a?(Module)
39
37
 
40
38
  constants = warning_eval("#{str_obj}.constants")
41
39
  puts prv(constants.sort.map { |c| [c, obj.const_get(c)] }, "constant")
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/var"
3
+ require_relative "../../helpers/var"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/var"
3
+ require_relative "../../helpers/var"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "pathname"
4
- require "byebug/command"
5
- require "byebug/helpers/frame"
4
+ require_relative "../command"
5
+ require_relative "../helpers/frame"
6
6
 
7
7
  module Byebug
8
8
  #
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/frame"
4
- require "byebug/helpers/path"
5
- require "byebug/helpers/file"
6
- require "byebug/processors/command_processor"
3
+ require_relative "frame"
4
+ require_relative "helpers/path"
5
+ require_relative "helpers/file"
6
+ require_relative "processors/command_processor"
7
7
 
8
8
  module Byebug
9
9
  #
@@ -1,15 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/reflection"
3
+ require_relative "helpers/reflection"
4
4
  require "byebug/byebug"
5
- require "byebug/context"
6
- require "byebug/breakpoint"
7
- require "byebug/interface"
8
- require "byebug/processors/script_processor"
9
- require "byebug/processors/post_mortem_processor"
10
- require "byebug/commands"
11
- require "byebug/remote"
12
- require "byebug/printers/plain"
5
+ require_relative "context"
6
+ require_relative "breakpoint"
7
+ require_relative "interface"
8
+ require_relative "processors/script_processor"
9
+ require_relative "processors/post_mortem_processor"
10
+ require_relative "commands"
11
+ require_relative "remote"
12
+ require_relative "printers/plain"
13
13
 
14
14
  #
15
15
  # Main debugger's container module. Everything is defined under this module
@@ -36,6 +36,7 @@ module Byebug
36
36
  #
37
37
  # * :attached => Attached to a running program through the `byebug` method.
38
38
  # * :standalone => Started through `byebug` script.
39
+ # * :off => Ignoring any `byebug` method calls.
39
40
  #
40
41
  attr_accessor :mode
41
42
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/file"
3
+ require_relative "helpers/file"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -118,7 +118,7 @@ module Byebug
118
118
  # Properly formatted frame number of frame
119
119
  #
120
120
  def deco_pos
121
- format("%-2d", pos)
121
+ format("%-2<pos>d", pos: pos)
122
122
  end
123
123
 
124
124
  #
@@ -21,7 +21,7 @@ module Byebug
21
21
 
22
22
  def adjust_frame(new_frame)
23
23
  return frame_err("too_low") if new_frame >= context.stack_size
24
- return frame_err("too_high") if new_frame < 0
24
+ return frame_err("too_high") if new_frame.negative?
25
25
 
26
26
  context.frame = new_frame
27
27
  processor.prev_line = nil
@@ -15,9 +15,7 @@ module Byebug
15
15
  # purpose.
16
16
  #
17
17
  def get_int(str, cmd, min = nil, max = nil)
18
- if str !~ /\A-?[0-9]+\z/
19
- return nil, pr("parse.errors.int.not_number", cmd: cmd, str: str)
20
- end
18
+ return nil, pr("parse.errors.int.not_number", cmd: cmd, str: str) unless /\A-?[0-9]+\z/.match?(str)
21
19
 
22
20
  int = str.to_i
23
21
  if min && int < min
@@ -25,9 +25,6 @@ module Byebug
25
25
  #
26
26
  # Removes a number of leading whitespace for each input line.
27
27
  #
28
- # @note Might be unnecessary when Ruby 2.2 support is dropped and we can
29
- # use squiggly heredoc's.
30
- #
31
28
  def deindent(str, leading_spaces: 6)
32
29
  str.gsub(/^ {#{leading_spaces}}/, "")
33
30
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/parse"
3
+ require_relative "parse"
4
4
 
5
5
  module Byebug
6
6
  module Helpers
@@ -15,9 +15,7 @@ module Byebug
15
15
 
16
16
  select_breakpoints(is_enable, args).each do |b|
17
17
  enabled = (is_enable == "enable")
18
- if enabled && !syntax_valid?(b.expr)
19
- raise pr("toggle.errors.expression", expr: b.expr)
20
- end
18
+ raise pr("toggle.errors.expression", expr: b.expr) if enabled && !syntax_valid?(b.expr)
21
19
 
22
20
  puts pr("toggle.messages.toggled", bpnum: b.id,
23
21
  endis: enabled ? "en" : "dis")
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/eval"
3
+ require_relative "eval"
4
4
 
5
5
  module Byebug
6
6
  module Helpers
@@ -121,7 +121,7 @@ module Byebug
121
121
  # For now, empty lines and consecutive duplicates.
122
122
  #
123
123
  def ignore?(buf)
124
- return true if /^\s*$/ =~ buf
124
+ return true if /^\s*$/.match?(buf)
125
125
  return false if Readline::HISTORY.empty?
126
126
 
127
127
  buffer[Readline::HISTORY.length - 1] == buf
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/setting"
4
- require "byebug/history"
5
- require "byebug/helpers/file"
3
+ require_relative "setting"
4
+ require_relative "history"
5
+ require_relative "helpers/file"
6
6
 
7
7
  #
8
8
  # Namespace for all of byebug's code
@@ -141,6 +141,6 @@ module Byebug
141
141
  end
142
142
  end
143
143
 
144
- require "byebug/interfaces/local_interface"
145
- require "byebug/interfaces/script_interface"
146
- require "byebug/interfaces/remote_interface"
144
+ require_relative "interfaces/local_interface"
145
+ require_relative "interfaces/script_interface"
146
+ require_relative "interfaces/remote_interface"
@@ -5,7 +5,7 @@ module Byebug
5
5
  # Interface class for standard byebug use.
6
6
  #
7
7
  class LocalInterface < Interface
8
- EOF_ALIAS = "continue".freeze
8
+ EOF_ALIAS = "continue"
9
9
 
10
10
  def initialize
11
11
  super()
@@ -21,7 +21,7 @@ module Byebug
21
21
  # @param prompt Prompt to be displayed.
22
22
  #
23
23
  def readline(prompt)
24
- with_repl_like_sigint { Readline.readline(prompt) || EOF_ALIAS }
24
+ with_repl_like_sigint { without_readline_completion { Readline.readline(prompt) || EOF_ALIAS } }
25
25
  end
26
26
 
27
27
  #
@@ -40,5 +40,24 @@ module Byebug
40
40
  ensure
41
41
  trap("INT", orig_handler)
42
42
  end
43
+
44
+ #
45
+ # Disable any Readline completion procs.
46
+ #
47
+ # Other gems, for example, IRB could've installed completion procs that are
48
+ # dependent on them being loaded. Disable those while byebug is the REPL
49
+ # making use of Readline.
50
+ #
51
+ def without_readline_completion
52
+ orig_completion = Readline.completion_proc
53
+ return yield unless orig_completion
54
+
55
+ begin
56
+ Readline.completion_proc = nil
57
+ yield
58
+ ensure
59
+ Readline.completion_proc = orig_completion
60
+ end
61
+ end
43
62
  end
44
63
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/history"
3
+ require_relative "../history"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -24,7 +24,8 @@ module Byebug
24
24
  def readline(*)
25
25
  while (result = input.gets)
26
26
  output.puts "+ #{result}" if @verbose
27
- next if result =~ /^\s*#/
27
+ next if /^\s*#/.match?(result)
28
+
28
29
  return result.chomp
29
30
  end
30
31
  end
@@ -11,7 +11,7 @@ module Byebug
11
11
  class MissedPath < StandardError; end
12
12
  class MissedArgument < StandardError; end
13
13
 
14
- SEPARATOR = ".".freeze
14
+ SEPARATOR = "."
15
15
 
16
16
  def type
17
17
  self.class.name.split("::").last.downcase
@@ -23,11 +23,12 @@ module Byebug
23
23
  result = nil
24
24
  contents.each_value do |contents|
25
25
  result = parts(path).reduce(contents) do |r, part|
26
- r && r.key?(part) ? r[part] : nil
26
+ r&.key?(part) ? r[part] : nil
27
27
  end
28
28
  break if result
29
29
  end
30
30
  raise MissedPath, "Can't find part path '#{path}'" unless result
31
+
31
32
  result
32
33
  end
33
34
 
@@ -35,9 +36,7 @@ module Byebug
35
36
  # they may contain #{} string interpolation
36
37
  string.gsub(/\|\w+$/, "").gsub(/([^#]?){([^}]*)}/) do
37
38
  key = Regexp.last_match[2].to_s
38
- unless args.key?(key.to_sym)
39
- raise MissedArgument, "Missed argument #{key} for '#{string}'"
40
- end
39
+ raise MissedArgument, "Missed argument #{key} for '#{string}'" unless args.key?(key.to_sym)
41
40
 
42
41
  "#{Regexp.last_match[1]}#{args[key.to_sym]}"
43
42
  end