byebug 10.0.0 → 11.1.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.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +350 -284
  3. data/CONTRIBUTING.md +6 -34
  4. data/GUIDE.md +9 -8
  5. data/LICENSE +18 -18
  6. data/README.md +83 -70
  7. data/exe/byebug +1 -1
  8. data/ext/byebug/breakpoint.c +1 -1
  9. data/ext/byebug/byebug.c +10 -15
  10. data/ext/byebug/byebug.h +11 -9
  11. data/ext/byebug/context.c +21 -8
  12. data/ext/byebug/locker.c +4 -4
  13. data/ext/byebug/threads.c +4 -4
  14. data/lib/byebug.rb +1 -1
  15. data/lib/byebug/attacher.rb +4 -4
  16. data/lib/byebug/command.rb +2 -2
  17. data/lib/byebug/command_list.rb +1 -1
  18. data/lib/byebug/commands.rb +38 -37
  19. data/lib/byebug/commands/break.rb +10 -14
  20. data/lib/byebug/commands/catch.rb +4 -8
  21. data/lib/byebug/commands/condition.rb +3 -5
  22. data/lib/byebug/commands/continue.rb +27 -9
  23. data/lib/byebug/commands/debug.rb +2 -2
  24. data/lib/byebug/commands/delete.rb +3 -5
  25. data/lib/byebug/commands/disable.rb +4 -4
  26. data/lib/byebug/commands/disable/breakpoints.rb +1 -1
  27. data/lib/byebug/commands/disable/display.rb +1 -1
  28. data/lib/byebug/commands/display.rb +2 -2
  29. data/lib/byebug/commands/down.rb +3 -3
  30. data/lib/byebug/commands/edit.rb +2 -1
  31. data/lib/byebug/commands/enable.rb +3 -3
  32. data/lib/byebug/commands/enable/breakpoints.rb +1 -1
  33. data/lib/byebug/commands/enable/display.rb +1 -1
  34. data/lib/byebug/commands/finish.rb +2 -2
  35. data/lib/byebug/commands/frame.rb +3 -3
  36. data/lib/byebug/commands/help.rb +2 -2
  37. data/lib/byebug/commands/history.rb +2 -2
  38. data/lib/byebug/commands/info.rb +6 -6
  39. data/lib/byebug/commands/info/breakpoints.rb +2 -4
  40. data/lib/byebug/commands/info/display.rb +1 -3
  41. data/lib/byebug/commands/info/file.rb +2 -4
  42. data/lib/byebug/commands/interrupt.rb +1 -1
  43. data/lib/byebug/commands/irb.rb +2 -4
  44. data/lib/byebug/commands/kill.rb +3 -5
  45. data/lib/byebug/commands/list.rb +4 -4
  46. data/lib/byebug/commands/method.rb +2 -2
  47. data/lib/byebug/commands/next.rb +2 -2
  48. data/lib/byebug/commands/pry.rb +3 -5
  49. data/lib/byebug/commands/quit.rb +4 -4
  50. data/lib/byebug/commands/restart.rb +3 -3
  51. data/lib/byebug/commands/save.rb +1 -1
  52. data/lib/byebug/commands/set.rb +3 -3
  53. data/lib/byebug/commands/show.rb +1 -1
  54. data/lib/byebug/commands/skip.rb +85 -0
  55. data/lib/byebug/commands/source.rb +2 -4
  56. data/lib/byebug/commands/step.rb +2 -2
  57. data/lib/byebug/commands/thread.rb +6 -6
  58. data/lib/byebug/commands/thread/current.rb +1 -1
  59. data/lib/byebug/commands/thread/list.rb +1 -1
  60. data/lib/byebug/commands/thread/resume.rb +2 -4
  61. data/lib/byebug/commands/thread/stop.rb +1 -1
  62. data/lib/byebug/commands/thread/switch.rb +1 -1
  63. data/lib/byebug/commands/tracevar.rb +2 -5
  64. data/lib/byebug/commands/undisplay.rb +5 -6
  65. data/lib/byebug/commands/untracevar.rb +1 -1
  66. data/lib/byebug/commands/up.rb +3 -3
  67. data/lib/byebug/commands/var.rb +8 -8
  68. data/lib/byebug/commands/var/all.rb +1 -1
  69. data/lib/byebug/commands/var/args.rb +1 -1
  70. data/lib/byebug/commands/var/const.rb +2 -4
  71. data/lib/byebug/commands/var/instance.rb +1 -1
  72. data/lib/byebug/commands/var/local.rb +1 -1
  73. data/lib/byebug/commands/where.rb +2 -2
  74. data/lib/byebug/context.rb +4 -4
  75. data/lib/byebug/core.rb +11 -10
  76. data/lib/byebug/frame.rb +2 -2
  77. data/lib/byebug/helpers/bin.rb +2 -2
  78. data/lib/byebug/helpers/eval.rb +7 -7
  79. data/lib/byebug/helpers/frame.rb +3 -3
  80. data/lib/byebug/helpers/parse.rb +1 -3
  81. data/lib/byebug/helpers/string.rb +0 -3
  82. data/lib/byebug/helpers/toggle.rb +2 -4
  83. data/lib/byebug/helpers/var.rb +1 -1
  84. data/lib/byebug/history.rb +5 -5
  85. data/lib/byebug/interface.rb +6 -6
  86. data/lib/byebug/interfaces/local_interface.rb +1 -1
  87. data/lib/byebug/interfaces/remote_interface.rb +1 -1
  88. data/lib/byebug/interfaces/script_interface.rb +2 -1
  89. data/lib/byebug/printers/base.rb +4 -5
  90. data/lib/byebug/printers/plain.rb +2 -2
  91. data/lib/byebug/processors/command_processor.rb +2 -2
  92. data/lib/byebug/processors/control_processor.rb +1 -1
  93. data/lib/byebug/processors/post_mortem_processor.rb +1 -1
  94. data/lib/byebug/processors/script_processor.rb +1 -1
  95. data/lib/byebug/remote.rb +3 -3
  96. data/lib/byebug/remote/client.rb +2 -0
  97. data/lib/byebug/runner.rb +7 -7
  98. data/lib/byebug/setting.rb +2 -2
  99. data/lib/byebug/settings/autoirb.rb +4 -4
  100. data/lib/byebug/settings/autolist.rb +4 -4
  101. data/lib/byebug/settings/autopry.rb +4 -4
  102. data/lib/byebug/settings/autosave.rb +1 -1
  103. data/lib/byebug/settings/basename.rb +1 -1
  104. data/lib/byebug/settings/callstyle.rb +2 -2
  105. data/lib/byebug/settings/fullpath.rb +1 -1
  106. data/lib/byebug/settings/histfile.rb +1 -1
  107. data/lib/byebug/settings/histsize.rb +1 -1
  108. data/lib/byebug/settings/linetrace.rb +3 -3
  109. data/lib/byebug/settings/listsize.rb +1 -1
  110. data/lib/byebug/settings/post_mortem.rb +3 -3
  111. data/lib/byebug/settings/savefile.rb +1 -1
  112. data/lib/byebug/settings/stack_on_error.rb +1 -1
  113. data/lib/byebug/settings/width.rb +1 -1
  114. data/lib/byebug/source_file_formatter.rb +2 -2
  115. data/lib/byebug/subcommands.rb +2 -2
  116. data/lib/byebug/version.rb +1 -1
  117. metadata +9 -9
@@ -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
  #
@@ -39,8 +39,8 @@ module Byebug
39
39
  ENV["PATHEXT"] ? ENV["PATHEXT"].split(";") : [""]
40
40
  end
41
41
 
42
- def real_executable?(f)
43
- File.executable?(f) && !File.directory?(f)
42
+ def real_executable?(file)
43
+ File.executable?(file) && !File.directory?(file)
44
44
  end
45
45
  end
46
46
  end
@@ -63,22 +63,22 @@ module Byebug
63
63
  yield(e)
64
64
  end
65
65
 
66
- def msg(e)
67
- msg = Setting[:stack_on_error] ? error_msg(e) : warning_msg(e)
66
+ def msg(exception)
67
+ msg = Setting[:stack_on_error] ? error_msg(exception) : warning_msg(exception)
68
68
 
69
69
  pr("eval.exception", text_message: msg)
70
70
  end
71
71
 
72
- def error_msg(e)
73
- at = e.backtrace
72
+ def error_msg(exception)
73
+ at = exception.backtrace
74
74
 
75
- locations = ["#{at.shift}: #{warning_msg(e)}"]
75
+ locations = ["#{at.shift}: #{warning_msg(exception)}"]
76
76
  locations += at.map { |path| " from #{path}" }
77
77
  locations.join("\n")
78
78
  end
79
79
 
80
- def warning_msg(e)
81
- "#{e.class} Exception: #{e.message}"
80
+ def warning_msg(exception)
81
+ "#{exception.class} Exception: #{exception.message}"
82
82
  end
83
83
 
84
84
  #
@@ -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
@@ -67,8 +67,8 @@ module Byebug
67
67
  #
68
68
  # @param i [Integer] Integer to be converted in a proper positive index.
69
69
  #
70
- def index_from_start(i)
71
- i >= 0 ? i : context.stack_size + i
70
+ def index_from_start(index)
71
+ index >= 0 ? index : context.stack_size + index
72
72
  end
73
73
  end
74
74
  end
@@ -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
@@ -45,7 +45,7 @@ module Byebug
45
45
  def save
46
46
  n_cmds = Setting[:histsize] > size ? size : Setting[:histsize]
47
47
 
48
- open(Setting[:histfile], "w") do |file|
48
+ File.open(Setting[:histfile], "w") do |file|
49
49
  n_cmds.times { file.puts(pop) }
50
50
  end
51
51
 
@@ -91,10 +91,10 @@ module Byebug
91
91
  end
92
92
 
93
93
  #
94
- # Array of ids of the last n commands.
94
+ # Array of ids of the last +number+ commands.
95
95
  #
96
- def last_ids(n)
97
- (1 + size - n..size).to_a
96
+ def last_ids(number)
97
+ (1 + size - number..size).to_a
98
98
  end
99
99
 
100
100
  #
@@ -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()
@@ -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
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/printers/base"
3
+ require_relative "base"
4
4
 
5
5
  module Byebug
6
6
  module Printers
@@ -22,7 +22,7 @@ module Byebug
22
22
  lines.join
23
23
  end
24
24
 
25
- def print_variables(variables, *_)
25
+ def print_variables(variables, *_unused)
26
26
  print_collection("variable.variable", variables) do |(key, value), _|
27
27
  value = value.nil? ? "nil" : value.to_s
28
28
  if "#{key} = #{value}".size > Setting[:width]
@@ -2,8 +2,8 @@
2
2
 
3
3
  require "forwardable"
4
4
 
5
- require "byebug/helpers/eval"
6
- require "byebug/errors"
5
+ require_relative "../helpers/eval"
6
+ require_relative "../errors"
7
7
 
8
8
  module Byebug
9
9
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/processors/command_processor"
3
+ require_relative "command_processor"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/processors/command_processor"
3
+ require_relative "command_processor"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/processors/command_processor"
3
+ require_relative "command_processor"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "socket"
4
- require "byebug/processors/control_processor"
5
- require "byebug/remote/server"
6
- require "byebug/remote/client"
4
+ require_relative "processors/control_processor"
5
+ require_relative "remote/server"
6
+ require_relative "remote/client"
7
7
 
8
8
  #
9
9
  # Remote debugging functionality.
@@ -26,10 +26,12 @@ module Byebug
26
26
  when /^PROMPT (.*)$/
27
27
  input = interface.read_command(Regexp.last_match[1])
28
28
  break unless input
29
+
29
30
  socket.puts input
30
31
  when /^CONFIRM (.*)$/
31
32
  input = interface.readline(Regexp.last_match[1])
32
33
  break unless input
34
+
33
35
  socket.puts input
34
36
  else
35
37
  interface.puts line
@@ -2,13 +2,13 @@
2
2
 
3
3
  require "optparse"
4
4
  require "English"
5
- require "byebug/core"
6
- require "byebug/version"
7
- require "byebug/helpers/bin"
8
- require "byebug/helpers/parse"
9
- require "byebug/helpers/string"
10
- require "byebug/option_setter"
11
- require "byebug/processors/control_processor"
5
+ require_relative "core"
6
+ require_relative "version"
7
+ require_relative "helpers/bin"
8
+ require_relative "helpers/parse"
9
+ require_relative "helpers/string"
10
+ require_relative "option_setter"
11
+ require_relative "processors/control_processor"
12
12
 
13
13
  module Byebug
14
14
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/string"
3
+ require_relative "helpers/string"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -52,7 +52,7 @@ module Byebug
52
52
  end
53
53
 
54
54
  def find(shortcut)
55
- abbr = shortcut =~ /^no/ ? shortcut[2..-1] : shortcut
55
+ abbr = /^no/.match?(shortcut) ? shortcut[2..-1] : shortcut
56
56
  matches = settings.select do |key, value|
57
57
  key =~ (value.boolean? ? /#{abbr}/ : /#{shortcut}/)
58
58
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/setting"
4
- require "byebug/commands/irb"
3
+ require_relative "../setting"
4
+ require_relative "../commands/irb"
5
5
 
6
6
  module Byebug
7
7
  #
@@ -18,8 +18,8 @@ module Byebug
18
18
  "Invoke IRB on every stop"
19
19
  end
20
20
 
21
- def value=(v)
22
- IrbCommand.always_run = v ? 1 : 0
21
+ def value=(val)
22
+ IrbCommand.always_run = val ? 1 : 0
23
23
  end
24
24
 
25
25
  def value
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/setting"
4
- require "byebug/commands/list"
3
+ require_relative "../setting"
4
+ require_relative "../commands/list"
5
5
 
6
6
  module Byebug
7
7
  #
@@ -18,8 +18,8 @@ module Byebug
18
18
  "Invoke list command on every stop"
19
19
  end
20
20
 
21
- def value=(v)
22
- ListCommand.always_run = v ? 1 : 0
21
+ def value=(val)
22
+ ListCommand.always_run = val ? 1 : 0
23
23
  end
24
24
 
25
25
  def value
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/setting"
4
- require "byebug/commands/pry"
3
+ require_relative "../setting"
4
+ require_relative "../commands/pry"
5
5
 
6
6
  module Byebug
7
7
  #
@@ -18,8 +18,8 @@ module Byebug
18
18
  "Invoke Pry on every stop"
19
19
  end
20
20
 
21
- def value=(v)
22
- PryCommand.always_run = v ? 1 : 0
21
+ def value=(val)
22
+ PryCommand.always_run = val ? 1 : 0
23
23
  end
24
24
 
25
25
  def value
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/setting"
3
+ require_relative "../setting"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/setting"
3
+ require_relative "../setting"
4
4
 
5
5
  module Byebug
6
6
  #