byebug 5.0.0 → 6.0.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/CHANGELOG.md +26 -1
- data/CONTRIBUTING.md +35 -13
- data/GUIDE.md +256 -198
- data/README.md +5 -11
- data/ext/byebug/byebug.c +5 -43
- data/ext/byebug/byebug.h +6 -1
- data/ext/byebug/context.c +4 -5
- data/lib/byebug/command.rb +64 -64
- data/lib/byebug/command_list.rb +32 -0
- data/lib/byebug/commands.rb +37 -0
- data/lib/byebug/commands/break.rb +45 -37
- data/lib/byebug/commands/catch.rb +52 -28
- data/lib/byebug/commands/condition.rb +19 -13
- data/lib/byebug/commands/continue.rb +15 -11
- data/lib/byebug/commands/delete.rb +18 -12
- data/lib/byebug/commands/disable.rb +9 -10
- data/lib/byebug/commands/disable/breakpoints.rb +13 -11
- data/lib/byebug/commands/disable/display.rb +13 -11
- data/lib/byebug/commands/display.rb +32 -24
- data/lib/byebug/commands/down.rb +18 -14
- data/lib/byebug/commands/edit.rb +42 -26
- data/lib/byebug/commands/enable.rb +9 -3
- data/lib/byebug/commands/enable/breakpoints.rb +13 -11
- data/lib/byebug/commands/enable/display.rb +13 -11
- data/lib/byebug/commands/finish.rb +23 -14
- data/lib/byebug/commands/frame.rb +21 -18
- data/lib/byebug/commands/help.rb +39 -16
- data/lib/byebug/commands/history.rb +16 -10
- data/lib/byebug/commands/info.rb +8 -5
- data/lib/byebug/commands/info/breakpoints.rb +16 -14
- data/lib/byebug/commands/info/display.rb +18 -18
- data/lib/byebug/commands/info/file.rb +22 -22
- data/lib/byebug/commands/info/line.rb +13 -11
- data/lib/byebug/commands/info/program.rb +13 -17
- data/lib/byebug/commands/interrupt.rb +13 -11
- data/lib/byebug/commands/irb.rb +16 -10
- data/lib/byebug/commands/kill.rb +19 -13
- data/lib/byebug/commands/list.rb +35 -24
- data/lib/byebug/commands/method.rb +25 -15
- data/lib/byebug/commands/next.rb +15 -13
- data/lib/byebug/commands/pry.rb +18 -11
- data/lib/byebug/commands/ps.rb +21 -23
- data/lib/byebug/commands/quit.rb +17 -11
- data/lib/byebug/commands/restart.rb +28 -24
- data/lib/byebug/commands/save.rb +23 -15
- data/lib/byebug/commands/set.rb +26 -19
- data/lib/byebug/commands/show.rb +20 -14
- data/lib/byebug/commands/source.rb +15 -14
- data/lib/byebug/commands/step.rb +15 -13
- data/lib/byebug/commands/thread.rb +8 -4
- data/lib/byebug/commands/thread/current.rb +11 -11
- data/lib/byebug/commands/thread/list.rb +14 -14
- data/lib/byebug/commands/thread/resume.rb +14 -14
- data/lib/byebug/commands/thread/stop.rb +14 -14
- data/lib/byebug/commands/thread/switch.rb +15 -14
- data/lib/byebug/commands/tracevar.rb +20 -16
- data/lib/byebug/commands/undisplay.rb +22 -18
- data/lib/byebug/commands/untracevar.rb +13 -11
- data/lib/byebug/commands/up.rb +18 -14
- data/lib/byebug/commands/var.rb +10 -3
- data/lib/byebug/commands/var/all.rb +15 -13
- data/lib/byebug/commands/var/args.rb +37 -0
- data/lib/byebug/commands/var/const.rb +25 -14
- data/lib/byebug/commands/var/global.rb +13 -11
- data/lib/byebug/commands/var/instance.rb +13 -11
- data/lib/byebug/commands/var/local.rb +13 -11
- data/lib/byebug/commands/where.rb +15 -11
- data/lib/byebug/context.rb +71 -73
- data/lib/byebug/core.rb +45 -26
- data/lib/byebug/errors.rb +27 -0
- data/lib/byebug/frame.rb +181 -0
- data/lib/byebug/helpers/eval.rb +67 -26
- data/lib/byebug/helpers/file.rb +18 -3
- data/lib/byebug/helpers/frame.rb +36 -39
- data/lib/byebug/helpers/parse.rb +15 -13
- data/lib/byebug/helpers/path.rb +21 -0
- data/lib/byebug/helpers/reflection.rb +17 -0
- data/lib/byebug/helpers/thread.rb +20 -14
- data/lib/byebug/helpers/toggle.rb +10 -5
- data/lib/byebug/helpers/var.rb +36 -15
- data/lib/byebug/interface.rb +27 -9
- data/lib/byebug/option_setter.rb +93 -0
- data/lib/byebug/printers/base.rb +3 -0
- data/lib/byebug/printers/plain.rb +4 -14
- data/lib/byebug/printers/texts/base.yml +2 -7
- data/lib/byebug/processors/command_processor.rb +101 -102
- data/lib/byebug/processors/control_processor.rb +20 -0
- data/lib/byebug/processors/post_mortem_processor.rb +16 -0
- data/lib/byebug/processors/script_processor.rb +49 -0
- data/lib/byebug/remote.rb +13 -7
- data/lib/byebug/runner.rb +39 -65
- data/lib/byebug/setting.rb +4 -1
- data/lib/byebug/settings/post_mortem.rb +0 -16
- data/lib/byebug/settings/savefile.rb +1 -4
- data/lib/byebug/subcommands.rb +27 -29
- data/lib/byebug/version.rb +4 -1
- metadata +14 -29
- data/lib/byebug/commands/eval.rb +0 -43
- data/lib/byebug/commands/info/args.rb +0 -39
- data/lib/byebug/commands/info/catch.rb +0 -39
- data/lib/byebug/commands/pp.rb +0 -41
- data/lib/byebug/commands/putl.rb +0 -43
- data/lib/byebug/processor.rb +0 -43
- data/lib/byebug/processors/control_command_processor.rb +0 -48
- data/lib/byebug/settings/verbose.rb +0 -20
- data/lib/byebug/state.rb +0 -12
- data/lib/byebug/states/control_state.rb +0 -26
- data/lib/byebug/states/regular_state.rb +0 -187
- data/lib/byebug/subcommand_list.rb +0 -33
data/lib/byebug/state.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'byebug/state'
|
2
|
-
|
3
|
-
module Byebug
|
4
|
-
#
|
5
|
-
# Controls state of Byebug's REPL when in control mode
|
6
|
-
#
|
7
|
-
class ControlState < State
|
8
|
-
def proceed
|
9
|
-
end
|
10
|
-
|
11
|
-
extend Forwardable
|
12
|
-
def_delegators :@interface, :errmsg, :puts
|
13
|
-
|
14
|
-
def confirm(*_args)
|
15
|
-
'y'
|
16
|
-
end
|
17
|
-
|
18
|
-
def context
|
19
|
-
nil
|
20
|
-
end
|
21
|
-
|
22
|
-
def file
|
23
|
-
errmsg 'No filename given.'
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,187 +0,0 @@
|
|
1
|
-
require 'byebug/state'
|
2
|
-
require 'byebug/helpers/file'
|
3
|
-
|
4
|
-
module Byebug
|
5
|
-
#
|
6
|
-
# Controls state of Byebug's REPL when in normal mode
|
7
|
-
#
|
8
|
-
class RegularState < State
|
9
|
-
include Helpers::FileHelper
|
10
|
-
|
11
|
-
attr_accessor :context, :frame, :display, :file, :line, :prev_line
|
12
|
-
attr_writer :interface
|
13
|
-
|
14
|
-
def initialize(context, display, file, interface, line)
|
15
|
-
super(interface)
|
16
|
-
@context = context
|
17
|
-
@display = display
|
18
|
-
@file = file
|
19
|
-
@frame = 0
|
20
|
-
@line = line
|
21
|
-
@prev_line = nil
|
22
|
-
@proceed = false
|
23
|
-
end
|
24
|
-
|
25
|
-
extend Forwardable
|
26
|
-
def_delegators :@interface, :errmsg, :puts, :print, :confirm
|
27
|
-
|
28
|
-
#
|
29
|
-
# Checks whether that execution can proceed
|
30
|
-
#
|
31
|
-
def proceed?
|
32
|
-
@proceed
|
33
|
-
end
|
34
|
-
|
35
|
-
#
|
36
|
-
# Signals the REPL that the execution can proceed
|
37
|
-
#
|
38
|
-
def proceed
|
39
|
-
@proceed = true
|
40
|
-
end
|
41
|
-
|
42
|
-
#
|
43
|
-
# Current (formatted) location
|
44
|
-
#
|
45
|
-
def location
|
46
|
-
l = "#{normalize(file)} @ #{line}\n"
|
47
|
-
l += "#{get_line(file, line)}\n" unless %w((irb) -e').include?(file)
|
48
|
-
l
|
49
|
-
end
|
50
|
-
|
51
|
-
#
|
52
|
-
# Builds a string containing the class associated to frame number +pos+
|
53
|
-
# or an empty string if the current +callstyle+ setting is 'short'
|
54
|
-
#
|
55
|
-
# @param pos [Integer] Frame position.
|
56
|
-
#
|
57
|
-
def frame_class(pos)
|
58
|
-
return '' if Setting[:callstyle] == 'short'
|
59
|
-
|
60
|
-
klass = context.frame_class(pos)
|
61
|
-
return '' if klass.to_s.empty?
|
62
|
-
|
63
|
-
"#{klass}."
|
64
|
-
end
|
65
|
-
|
66
|
-
#
|
67
|
-
# Builds a formatted string containing information about block and method
|
68
|
-
# of the frame in position +pos+
|
69
|
-
#
|
70
|
-
# @param pos [Integer] Frame position.
|
71
|
-
#
|
72
|
-
def frame_block_and_method(pos)
|
73
|
-
deco_regexp = /((?:block(?: \(\d+ levels\))?|rescue) in )?(.+)/
|
74
|
-
deco_method = "#{context.frame_method(pos)}"
|
75
|
-
block_and_method = deco_regexp.match(deco_method)[1..2]
|
76
|
-
block_and_method.map { |x| x.nil? ? '' : x }
|
77
|
-
end
|
78
|
-
|
79
|
-
#
|
80
|
-
# Builds a string containing all available args in frame number +pos+, in a
|
81
|
-
# verbose or non verbose way according to the value of the +callstyle+
|
82
|
-
# setting
|
83
|
-
#
|
84
|
-
# @param pos [Integer] Frame position.
|
85
|
-
#
|
86
|
-
def frame_args(pos)
|
87
|
-
args = context.frame_args(pos)
|
88
|
-
return '' if args.empty?
|
89
|
-
|
90
|
-
locals = context.frame_locals(pos) unless Setting[:callstyle] == 'short'
|
91
|
-
my_args = args.map do |arg|
|
92
|
-
prefix, default = prefix_and_default_from(arg[0])
|
93
|
-
|
94
|
-
kls = if Setting[:callstyle] == 'short' || arg[1].nil? || locals.empty?
|
95
|
-
''
|
96
|
-
else
|
97
|
-
"##{locals[arg[1]].class}"
|
98
|
-
end
|
99
|
-
|
100
|
-
"#{prefix}#{arg[1] || default}#{kls}"
|
101
|
-
end
|
102
|
-
|
103
|
-
"(#{my_args.join(', ')})"
|
104
|
-
end
|
105
|
-
|
106
|
-
#
|
107
|
-
# Builds a formatted string containing information about current method
|
108
|
-
# call in frame number +pos+.
|
109
|
-
#
|
110
|
-
# @param pos [Integer] Frame position.
|
111
|
-
#
|
112
|
-
def frame_call(pos)
|
113
|
-
block, method = frame_block_and_method(pos)
|
114
|
-
|
115
|
-
block + frame_class(pos) + method + frame_args(pos)
|
116
|
-
end
|
117
|
-
|
118
|
-
#
|
119
|
-
# Formatted filename in frame number +pos+
|
120
|
-
#
|
121
|
-
# @param pos [Integer] Frame position.
|
122
|
-
#
|
123
|
-
def frame_file(pos)
|
124
|
-
fullpath = context.frame_file(pos)
|
125
|
-
Setting[:fullpath] ? fullpath : shortpath(fullpath)
|
126
|
-
end
|
127
|
-
|
128
|
-
#
|
129
|
-
# Line number in frame number +pos+
|
130
|
-
#
|
131
|
-
# @param pos [Integer] Frame position.
|
132
|
-
#
|
133
|
-
def frame_line(pos)
|
134
|
-
context.frame_line(pos)
|
135
|
-
end
|
136
|
-
|
137
|
-
#
|
138
|
-
# Properly formatted frame number of frame in position +pos+
|
139
|
-
#
|
140
|
-
# @param pos [Integer] Frame position.
|
141
|
-
#
|
142
|
-
def frame_pos(pos)
|
143
|
-
format('%-2d', pos)
|
144
|
-
end
|
145
|
-
|
146
|
-
#
|
147
|
-
# Formatted mark for number of frame in position +pos+. The mark can
|
148
|
-
# contain the current frame symbo (-->), the c_frame symbol (ͱ--) or both
|
149
|
-
#
|
150
|
-
# @param pos [Integer] Frame position.
|
151
|
-
#
|
152
|
-
def frame_mark(pos)
|
153
|
-
mark = frame == pos ? '-->' : ' '
|
154
|
-
|
155
|
-
c_frame?(pos) ? mark + ' ͱ--' : mark
|
156
|
-
end
|
157
|
-
|
158
|
-
#
|
159
|
-
# Checks whether the frame in position +pos+ is a c-frame or not
|
160
|
-
#
|
161
|
-
# @param pos [Integer] Frame position.
|
162
|
-
#
|
163
|
-
def c_frame?(pos)
|
164
|
-
context.frame_binding(pos).nil?
|
165
|
-
end
|
166
|
-
|
167
|
-
private
|
168
|
-
|
169
|
-
def shortpath(fullpath)
|
170
|
-
components = Pathname(fullpath).each_filename.to_a
|
171
|
-
return fullpath if components.size <= 2
|
172
|
-
|
173
|
-
File.join('...', components[-3..-1])
|
174
|
-
end
|
175
|
-
|
176
|
-
def prefix_and_default_from(arg_type)
|
177
|
-
case arg_type
|
178
|
-
when :block
|
179
|
-
return ['&', 'block']
|
180
|
-
when :rest
|
181
|
-
return ['*', 'args']
|
182
|
-
else
|
183
|
-
return ['', nil]
|
184
|
-
end
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module Byebug
|
2
|
-
#
|
3
|
-
# Holds an array of subcommands for a command
|
4
|
-
#
|
5
|
-
class SubcommandList
|
6
|
-
def initialize(commands, parent)
|
7
|
-
@commands = commands
|
8
|
-
@parent = parent
|
9
|
-
end
|
10
|
-
|
11
|
-
def find(name)
|
12
|
-
@commands.find { |cmd| cmd.match(name) }
|
13
|
-
end
|
14
|
-
|
15
|
-
def help(name)
|
16
|
-
subcmd = find(name)
|
17
|
-
return errmsg("Unknown subcommand '#{name}'") unless subcmd
|
18
|
-
|
19
|
-
subcmd.help
|
20
|
-
end
|
21
|
-
|
22
|
-
def to_s
|
23
|
-
width = @commands.map(&:to_name).max_by(&:size).size
|
24
|
-
|
25
|
-
formatted_cmds = @commands.map do |subcmd|
|
26
|
-
format("%s %-#{width}s -- %s\n",
|
27
|
-
@parent, subcmd.to_name, subcmd.short_description)
|
28
|
-
end
|
29
|
-
|
30
|
-
formatted_cmds.join
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|