pry-stack_explorer 0.3.5 → 0.3.6
Sign up to get free protection for your applications and to get access to all the features.
@@ -3,14 +3,21 @@ require 'pry'
|
|
3
3
|
module PryStackExplorer
|
4
4
|
module FrameHelpers
|
5
5
|
private
|
6
|
+
|
7
|
+
# @return [PryStackExplorer::FrameManager] The active frame manager for
|
8
|
+
# the current `Pry` instance.
|
6
9
|
def frame_manager
|
7
10
|
PryStackExplorer.frame_manager(_pry_)
|
8
11
|
end
|
9
12
|
|
13
|
+
# @return [Array<PryStackExplorer::FrameManager>] All the frame
|
14
|
+
# managers for the current `Pry` instance.
|
10
15
|
def frame_managers
|
11
16
|
PryStackExplorer.frame_managers(_pry_)
|
12
17
|
end
|
13
18
|
|
19
|
+
# @return [Boolean] Whether there is a context to return to once
|
20
|
+
# the current `frame_manager` is popped.
|
14
21
|
def prior_context_exists?
|
15
22
|
frame_managers.count > 1 || frame_manager.prior_binding
|
16
23
|
end
|
@@ -59,6 +66,8 @@ module PryStackExplorer
|
|
59
66
|
end
|
60
67
|
end
|
61
68
|
|
69
|
+
# @param [Pry::Method] meth_obj The method object.
|
70
|
+
# @return [String] Signature for the method object in Class#method format.
|
62
71
|
def signature_with_owner(meth_obj)
|
63
72
|
if !meth_obj.undefined?
|
64
73
|
args = meth_obj.parameters.inject([]) do |arr, (type, name)|
|
@@ -136,6 +145,8 @@ module PryStackExplorer
|
|
136
145
|
|
137
146
|
def options(opt)
|
138
147
|
opt.on :v, :verbose, "Include extra information."
|
148
|
+
opt.on :H, :head, "Display the first N stack frames (defaults to 10).", :optional => true, :as => Integer, :default => 10
|
149
|
+
opt.on :T, :tail, "Display the last N stack frames (defaults to 10).", :optional => true, :as => Integer, :default => 10
|
139
150
|
end
|
140
151
|
|
141
152
|
def memoized_info(index, b, verbose)
|
@@ -148,6 +159,28 @@ module PryStackExplorer
|
|
148
159
|
end
|
149
160
|
end
|
150
161
|
|
162
|
+
private :memoized_info
|
163
|
+
|
164
|
+
# @return [Array<Fixnum, Array<Binding>>] Return tuple of
|
165
|
+
# base_frame_index and the array of frames.
|
166
|
+
def selected_stack_frames
|
167
|
+
if opts.present?(:head)
|
168
|
+
[0, frame_manager.bindings[0..(opts[:head] - 1)]]
|
169
|
+
elsif opts.present?(:tail)
|
170
|
+
tail = opts[:tail]
|
171
|
+
if tail > frame_manager.bindings.size
|
172
|
+
tail = frame_manager.bindings.size
|
173
|
+
end
|
174
|
+
|
175
|
+
base_frame_index = frame_manager.bindings.size - tail
|
176
|
+
[base_frame_index, frame_manager.bindings[base_frame_index..-1]]
|
177
|
+
else
|
178
|
+
[0, frame_manager.bindings]
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
private :selected_stack_frames
|
183
|
+
|
151
184
|
def process
|
152
185
|
if !frame_manager
|
153
186
|
output.puts "No caller stack available!"
|
@@ -155,7 +188,9 @@ module PryStackExplorer
|
|
155
188
|
content = ""
|
156
189
|
content << "\n#{text.bold("Showing all accessible frames in stack (#{frame_manager.bindings.size} in total):")}\n--\n"
|
157
190
|
|
158
|
-
|
191
|
+
base_frame_index, frames = selected_stack_frames
|
192
|
+
frames.each_with_index do |b, index|
|
193
|
+
i = index + base_frame_index
|
159
194
|
if i == frame_manager.binding_index
|
160
195
|
content << "=> ##{i} #{memoized_info(i, b, opts[:v])}\n"
|
161
196
|
else
|
@@ -169,7 +204,6 @@ module PryStackExplorer
|
|
169
204
|
end
|
170
205
|
end
|
171
206
|
|
172
|
-
|
173
207
|
create_command "frame", "Switch to a particular frame. Accepts numeric parameter for the target frame to switch to (use with show-stack). Negative frame numbers allowed." do
|
174
208
|
include FrameHelpers
|
175
209
|
|
data/pry-stack_explorer.gemspec
CHANGED