pry-stack_explorer 0.4.12 → 0.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: 466d7cd0c0e7e63ac02490ad6406d5982e34976e785548031f8216fb7f2ac425
4
- data.tar.gz: 3d33e39825f62326af401e7ef12e49c99c1f38967fa9f16a62232d4beed32c17
3
+ metadata.gz: 53b80cf3c06d7bdfaec826bed2ad1963a7bc69331d656e73b84d00e97a500197
4
+ data.tar.gz: 1942e6ad4fd0b43279d860aa06b2ca354b64eac8b713d426996b9a93a12f48d9
5
5
  SHA512:
6
- metadata.gz: fd897f24e3c68263b93d86732739bafd008c4eba56620dfa5f866fe88121add00a4fa9a1d60975de916e1a140e30e9c8a13c032ebb6815c27fa75359e2e913e9
7
- data.tar.gz: f08d59c40c3fe428755982dbda278e4f4f3e1895594b05ae34031c5db6f61c11fb2454ccf721c7a3f4736a703a68cf8975e0f7e6a03939a7cdcbad0e77a867b8
6
+ metadata.gz: 2c51eb15eb17f9edff667c93fbead5a7ffe7fa1c4cd3114e516a2057e37ab728e8436f5123908d0fac07a823b2a61fbcc50072429fc8f5081c3c85be5bcaf1d2
7
+ data.tar.gz: 24dc58f1bfda481a2eddee4e294c953e7ead4bee736da3f07bc142f237e7fcb8b41da9a1bd39517ae53fb34a892b7cd9f2faae3240c2e382031b09ba31eced21
data/README.md CHANGED
@@ -3,12 +3,10 @@ pry-stack_explorer
3
3
 
4
4
  _Walk the stack in a Pry session_
5
5
 
6
- Ruby versions: **Branch v0.5 requires Ruby 2.6+**. Branch v0.4.11+ will remain for Ruby 2.5 users until its EOL in March 2021.
7
-
8
6
  ---
9
7
 
10
- pry-stack_explorer is a plugin for the [Pry](http://pry.github.com)
11
- REPL that enables the user to navigate the call-stack.
8
+ Pry::StackExplorer is a plugin for [Pry](http://pry.github.com)
9
+ that allows navigating the call stack.
12
10
 
13
11
  From the point a Pry session is started, the user can move up the stack
14
12
  through parent frames, examine state, and even evaluate code.
@@ -17,7 +15,7 @@ Unlike `ruby-debug`, pry-stack_explorer incurs no runtime cost and
17
15
  enables navigation right up the call-stack to the birth of the
18
16
  program.
19
17
 
20
- The `up`, `down`, `frame` and `show-stack` commands are provided. See
18
+ The `up`, `down`, `frame` and `stack` commands are provided. See
21
19
  Pry's in-session help for more information on any of these commands.
22
20
 
23
21
  ## Usage
@@ -26,14 +24,14 @@ Provides commands available in Pry sessions.
26
24
  Commands:
27
25
  * `up`/`down` - Move up or down the call stack
28
26
  * `frame [n]` - Go to frame *n*
29
- * `show-stack` - Show call stack
27
+ * `stack` - Show call stack
30
28
 
31
29
 
32
30
  ## Install
33
31
 
34
32
  In Gemfile:
35
33
  ```rb
36
- gem 'pry-stack_explorer', '~> 0.5.0'
34
+ gem 'pry-stack_explorer', '~> 0.6.0'
37
35
  ```
38
36
 
39
37
  ```
@@ -43,6 +41,12 @@ gem install pry-stack_explorer
43
41
  * Read the [documentation](http://rdoc.info/github/banister/pry-stack_explorer/master/file/README.md)
44
42
  * See the [wiki](https://github.com/pry/pry-stack_explorer/wiki) for in-depth usage information.
45
43
 
44
+
45
+ ### Branches and compatible Ruby versions
46
+ * v0.5, v0.6: Ruby 2.6+, Pry 0.13+
47
+ * v0.4.11+: Ruby 2.5, Pry 0.12+ (branch `0-4` – end-of-life in March 2021)
48
+ * v0.4.9.3: Older versions (unsupported)
49
+
46
50
  Example:
47
51
  --------
48
52
  Here we run the following ruby script:
@@ -68,12 +72,6 @@ We wander around the stack a little bit, and modify the state of a frame above t
68
72
 
69
73
  Output from above is `Goodbye` as we changed the `x` local inside the `alpha` (caller) stack frame.
70
74
 
71
- Compatible versions
72
- -------------------
73
- * v0.5: Ruby 2.6+, Pry 0.13+
74
- * v0.4.11: Ruby 2.5, Pry 0.12+ (branch `works-with-ruby-2-5`)
75
- * v0.4.9.3: Older versions
76
-
77
75
 
78
76
  License
79
77
  -------
@@ -55,7 +55,7 @@ module PryStackExplorer
55
55
  sig = meth_obj ? "<#{signature_with_owner(meth_obj)}>" : ""
56
56
 
57
57
  self_clipped = "#{Pry.view_clip(b_self)}"
58
- path = "@ #{b.eval('__FILE__')}:#{b.eval('__LINE__')}"
58
+ path = '@ ' + b.source_location.join(':')
59
59
 
60
60
  if !verbose
61
61
  "#{type} #{desc} #{sig}"
@@ -231,13 +231,15 @@ module PryStackExplorer
231
231
  end
232
232
  end
233
233
 
234
- create_command "show-stack", "Show all frames" do
234
+ create_command "stack", "Show all frames" do
235
235
  include FrameHelpers
236
236
 
237
237
  banner <<-BANNER
238
- Usage: show-stack [OPTIONS]
238
+ Usage: stack [OPTIONS]
239
239
  Show all accessible stack frames.
240
- e.g: show-stack -v
240
+ e.g: stack -v
241
+
242
+ alias: show-stack
241
243
  BANNER
242
244
 
243
245
  def options(opt)
@@ -245,6 +247,7 @@ module PryStackExplorer
245
247
  opt.on :H, :head, "Display the first N stack frames (defaults to 10).", :optional_argument => true, :as => Integer, :default => 10
246
248
  opt.on :T, :tail, "Display the last N stack frames (defaults to 10).", :optional_argument => true, :as => Integer, :default => 10
247
249
  opt.on :c, :current, "Display N frames either side of current frame (default to 5).", :optional_argument => true, :as => Integer, :default => 5
250
+ opt.on :a, :app, "Display application frames only", optional_argument: true
248
251
  end
249
252
 
250
253
  def memoized_info(index, b, verbose)
@@ -288,26 +291,75 @@ module PryStackExplorer
288
291
  private :selected_stack_frames
289
292
 
290
293
  def process
291
- if !frame_manager
292
- output.puts "No caller stack available!"
294
+ return no_stack_available! unless frame_manager
295
+
296
+ title = "Showing all accessible frames in stack (#{frame_manager.bindings.size} in total):"
297
+
298
+ content = [
299
+ bold(title),
300
+ "---",
301
+ make_stack_lines
302
+ ].join("\n")
303
+
304
+ stagger_output content
305
+ end
306
+
307
+ private
308
+
309
+ def make_stack_lines
310
+ frames_with_indices.map do |b, i|
311
+ make_stack_line(b, i, (i == frame_manager.binding_index))
312
+ end.join("\n")
313
+ end
314
+
315
+ def frames_with_indices
316
+ if opts.present?(:app) && defined?(ActiveSupport::BacktraceCleaner)
317
+ app_frames
293
318
  else
294
- content = ""
295
- content << "\n#{bold("Showing all accessible frames in stack (#{frame_manager.bindings.size} in total):")}\n--\n"
296
-
297
- base_frame_index, frames = selected_stack_frames
298
- frames.each_with_index do |b, index|
299
- i = index + base_frame_index
300
- if i == frame_manager.binding_index
301
- content << "=> ##{i} #{memoized_info(i, b, opts[:v])}\n"
302
- else
303
- content << " ##{i} #{memoized_info(i, b, opts[:v])}\n"
304
- end
305
- end
319
+ offset_frames
320
+ end
321
+ end
306
322
 
307
- stagger_output content
323
+ # "=> #0 method_name <Class#method(...)>"
324
+ def make_stack_line(b, i, active)
325
+ arw = active ? "=>" : " "
326
+
327
+ "#{arw} ##{i} #{memoized_info(i, b, opts[:v])}"
328
+ end
329
+
330
+ def offset_frames
331
+ base_frame_index, frames = selected_stack_frames
332
+
333
+ frames.each_with_index.map do |frame, index|
334
+ [frame, index + base_frame_index]
308
335
  end
309
336
  end
310
337
 
338
+ def no_stack_available!
339
+ output.puts "No caller stack available!"
340
+ end
341
+
342
+ LOCATION_LAMBDA = ->(_binding){ _binding.source_location[0] }
343
+
344
+ def app_frames
345
+ locations = frame_manager.bindings.map(&LOCATION_LAMBDA)
346
+ filtered = backtrace_cleaner.clean(locations)
347
+
348
+ frame_manager.bindings
349
+ .each_with_index
350
+ .map
351
+ .select do |_binding, _index|
352
+ LOCATION_LAMBDA.call(_binding).in?(filtered)
353
+ end
354
+ end
355
+
356
+ # also see Rails::BacktraceCleaner
357
+ def backtrace_cleaner
358
+ @backtrace_cleaner ||= ActiveSupport::BacktraceCleaner.new
359
+ end
311
360
  end
361
+
362
+ alias_command "show-stack", "stack"
363
+
312
364
  end
313
365
  end
@@ -1,3 +1,3 @@
1
1
  module PryStackExplorer
2
- VERSION = '0.4.12'
2
+ VERSION = '0.6.1'
3
3
  end
@@ -47,6 +47,8 @@ module PryStackExplorer
47
47
  # remove internal frames related to setting up the session
48
48
  def remove_internal_frames(bindings)
49
49
  start_frames = internal_frames_with_indices(bindings)
50
+ return bindings if start_frames.empty?
51
+
50
52
  start_frame_index = start_frames.first.last
51
53
 
52
54
  if start_frames.size >= 2
@@ -60,7 +62,7 @@ module PryStackExplorer
60
62
 
61
63
  # remove pry-nav / pry-debugger / pry-byebug frames
62
64
  def remove_debugger_frames(bindings)
63
- bindings.drop_while { |b| b.eval("__FILE__") =~ /pry-(?:nav|debugger|byebug)/ }
65
+ bindings.drop_while { |b| b.source_location[0] =~ /pry-(?:nav|debugger|byebug)/ }
64
66
  end
65
67
 
66
68
  # binding.pry frame
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pry-stack_explorer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.12
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Mair (banisterfiend)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-17 00:00:00.000000000 Z
11
+ date: 2021-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: binding_of_caller
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.7'
19
+ version: '1.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.7'
26
+ version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: pry
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -39,19 +39,19 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.13'
41
41
  - !ruby/object:Gem::Dependency
42
- name: bacon
42
+ name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.1.0
47
+ version: '3.9'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.1.0
54
+ version: '3.9'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -67,38 +67,26 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.9'
69
69
  description:
70
- email: jrmair@gmail.com
70
+ email:
71
+ - jrmair@gmail.com
71
72
  executables: []
72
73
  extensions: []
73
74
  extra_rdoc_files: []
74
75
  files:
75
- - ".gemtest"
76
- - ".gitignore"
77
- - ".travis.yml"
78
- - ".yardopts"
79
- - CHANGELOG
80
- - Gemfile
81
76
  - LICENSE
82
77
  - README.md
83
- - Rakefile
84
- - examples/example.rb
85
- - examples/example2.rb
86
- - examples/example3.rb
87
78
  - lib/pry-stack_explorer.rb
88
79
  - lib/pry-stack_explorer/commands.rb
89
80
  - lib/pry-stack_explorer/frame_manager.rb
90
81
  - lib/pry-stack_explorer/version.rb
91
82
  - lib/pry-stack_explorer/when_started_hook.rb
92
- - pry-stack_explorer.gemspec
93
- - test/helper.rb
94
- - test/test_commands.rb
95
- - test/test_frame_manager.rb
96
- - test/test_stack_explorer.rb
97
- - tester.rb
98
83
  homepage: https://github.com/pry/pry-stack_explorer
99
84
  licenses:
100
85
  - MIT
101
- metadata: {}
86
+ metadata:
87
+ bug_tracker_uri: https://github.com/pry/pry-stack_explorer/issues
88
+ source_code_uri: https://github.com/pry/pry-stack_explorer
89
+ changelog_uri: https://github.com/pry/pry-stack_explorer/blob/master/CHANGELOG
102
90
  post_install_message:
103
91
  rdoc_options: []
104
92
  require_paths:
@@ -107,19 +95,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
107
95
  requirements:
108
96
  - - ">="
109
97
  - !ruby/object:Gem::Version
110
- version: 2.0.0
98
+ version: 2.6.0
111
99
  required_rubygems_version: !ruby/object:Gem::Requirement
112
100
  requirements:
113
101
  - - ">="
114
102
  - !ruby/object:Gem::Version
115
103
  version: '0'
116
104
  requirements: []
117
- rubygems_version: 3.1.2
105
+ rubygems_version: 3.2.3
118
106
  signing_key:
119
107
  specification_version: 4
120
108
  summary: Walk the stack in a Pry session
121
- test_files:
122
- - test/helper.rb
123
- - test/test_commands.rb
124
- - test/test_frame_manager.rb
125
- - test/test_stack_explorer.rb
109
+ test_files: []
data/.gemtest DELETED
File without changes
data/.gitignore DELETED
@@ -1,9 +0,0 @@
1
- Makefile
2
- *.so
3
- *.o
4
- *.def
5
- doc/
6
- pkg/
7
- .yardoc/
8
- Gemfile.lock
9
- *.gem
data/.travis.yml DELETED
@@ -1,27 +0,0 @@
1
- language: ruby
2
-
3
- script:
4
- rake test --trace
5
-
6
- before_install:
7
- - gem update --system
8
-
9
- rvm:
10
- - 2.5.3
11
- - 2.6.6
12
- - 2.7.1
13
- - ruby-head
14
-
15
- matrix:
16
- allow_failures:
17
- - rvm: ruby-head
18
- fast_finish: true
19
-
20
- notifications:
21
- irc: "irc.freenode.org#pry"
22
- email:
23
- - jrmair@gmail.com
24
-
25
- branches:
26
- only:
27
- - master
data/.yardopts DELETED
@@ -1 +0,0 @@
1
- --markup markdown
data/CHANGELOG DELETED
@@ -1,11 +0,0 @@
1
- ## v0.5.0 (21 May 2020)
2
- * Should fix most deprecation warnings as of release
3
- * Require Pry 0.13
4
- * Fix Pry#_pry_ => #pry_instance deprecation
5
-
6
- ## v0.4.12 (17 August 2020)
7
- * Require Ruby 2.5 in Gemspec (#54)
8
-
9
- ## v0.4.11 (21 May 2020)
10
- * Special branch for Ruby 2.5
11
- * Fix Pry 0.13+ deprecations and broken `show-stack`
data/Gemfile DELETED
@@ -1,2 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
data/Rakefile DELETED
@@ -1,114 +0,0 @@
1
- require "bundler/gem_tasks"
2
-
3
- $:.unshift 'lib'
4
-
5
- dlext = RbConfig::CONFIG['DLEXT']
6
- direc = File.dirname(__FILE__)
7
-
8
- PROJECT_NAME = "pry-stack_explorer"
9
-
10
- require 'rake/clean'
11
- require 'rubygems/package_task'
12
- require "#{PROJECT_NAME}/version"
13
-
14
- CLOBBER.include("**/*~", "**/*#*", "**/*.log")
15
- CLEAN.include("**/*#*", "**/*#*.*", "**/*_flymake*.*", "**/*_flymake",
16
- "**/*.rbc", "**/.#*.*")
17
-
18
- def apply_spec_defaults(s)
19
- s.name = PROJECT_NAME
20
- s.summary = "Walk the stack in a Pry session"
21
- s.version = PryStackExplorer::VERSION
22
- s.date = Time.now.strftime '%Y-%m-%d'
23
- s.author = "John Mair (banisterfiend)"
24
- s.email = 'jrmair@gmail.com'
25
- s.description = s.summary
26
- s.require_path = 'lib'
27
- s.add_dependency("binding_of_caller",">= 0.7")
28
- s.add_dependency("pry",">=0.9.11")
29
- s.add_development_dependency("bacon","~>1.1.0")
30
- s.add_development_dependency('rake', '~> 0.9')
31
- s.homepage = "https://github.com/pry/pry-stack_explorer"
32
- s.files = `git ls-files`.split("\n")
33
- s.test_files = `git ls-files -- test/*`.split("\n")
34
- end
35
-
36
- desc "run pry with plugin enabled"
37
- task :pry do
38
- exec("pry -I#{direc}/lib/ -r #{direc}/lib/#{PROJECT_NAME}")
39
- end
40
-
41
- desc "Run example"
42
- task :example do
43
- sh "ruby -I#{direc}/lib/ #{direc}/examples/example.rb "
44
- end
45
-
46
- desc "Run example2"
47
- task :example2 do
48
- sh "ruby -I#{direc}/lib/ #{direc}/examples/example2.rb "
49
- end
50
-
51
- desc "Run example3"
52
- task :example3 do
53
- sh "ruby -I#{direc}/lib/ #{direc}/examples/example3.rb "
54
- end
55
-
56
- desc "Show version"
57
- task :version do
58
- puts "PryStackExplorer version: #{PryStackExplorer::VERSION}"
59
- end
60
-
61
- desc "run tests"
62
- task :default => :test
63
-
64
- desc "run tests"
65
- task :test do
66
- sh "bacon -Itest -a -q"
67
- end
68
-
69
- desc "generate gemspec"
70
- task :gemspec => "ruby:gemspec"
71
-
72
- namespace :ruby do
73
- spec = Gem::Specification.new do |s|
74
- apply_spec_defaults(s)
75
- s.platform = Gem::Platform::RUBY
76
- end
77
-
78
- Gem::PackageTask.new(spec) do |pkg|
79
- pkg.need_zip = false
80
- pkg.need_tar = false
81
- end
82
-
83
- desc "Generate gemspec file"
84
- task :gemspec do
85
- File.open("#{spec.name}.gemspec", "w") do |f|
86
- f << spec.to_ruby
87
- end
88
- end
89
- end
90
-
91
- desc "build all platform gems at once"
92
- task :gems => [:clean, :rmgems, :gemspec, "ruby:gem"]
93
-
94
- desc "remove all platform gems"
95
- task :rmgems => ["ruby:clobber_package"]
96
-
97
- desc "reinstall gem"
98
- task :reinstall => :gems do
99
- sh "gem uninstall pry-stack_explorer" rescue nil
100
- sh "gem install -l #{direc}/pkg/#{PROJECT_NAME}-#{PryStackExplorer::VERSION}.gem"
101
- end
102
-
103
- task :install => :reinstall
104
-
105
- desc "build and push latest gems"
106
- task :pushgems => :gems do
107
- chdir("#{File.dirname(__FILE__)}/pkg") do
108
- Dir["*.gem"].each do |gemfile|
109
- sh "gem push #{gemfile}"
110
- end
111
- end
112
- end
113
-
114
- task :pushgem => :pushgems