pryx 0.10.3 → 0.12.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4c877bb193222c2d2540f95eea205253844c0e9c874d3f6a75235c42fcaef704
4
- data.tar.gz: fec0feb940e81d862287bbd1a9e957fa2f6ae7247fe632da3c1eaf5354e96435
3
+ metadata.gz: 32be9dee5f11b22b7cc96644943a86adf5ae51a1e634e4c16a5cdd01b8245b3a
4
+ data.tar.gz: 5b2d22c7c2177ccd9ef3ac0813ec67bc354e457cb5d0880ef2f20966e2062dfd
5
5
  SHA512:
6
- metadata.gz: 2a1d57e969a8500268a5b13817de9fb90a0ab4a355f3a17af28fb83b1d1e0ad22369365b5d3377e77e14e931f96a2582fa4ff63bac5e77e581b1cab42f61eeb4
7
- data.tar.gz: bb70d8c676aeb5ee72f449e63e598deeff24415ad08a677d1beb007bcce16a1059fa703e735fff9e89f253be672641b4e1b2a3b147c8e5c350ad2967b3b151d3
6
+ metadata.gz: 6d77e2d271fe47d4b5028a7af1ea51cd1dd443220d12ce21e9c720fe356ea126607d65b3af260f902fe80efffeacf7998873dcdb5dac00ec0d2ea320dbb8d590
7
+ data.tar.gz: 1708bfeafb9e2c95e71887e7e64b7cadac8816b6797ec582dd40739629ecce302cb10340d1f5d78add4cace5151ae1a5c1f68cefc84ca6988084153bfee090bc
@@ -0,0 +1 @@
1
+ require 'pry-nav'
@@ -0,0 +1,40 @@
1
+ require 'pry' unless defined? Pry
2
+
3
+ module PryNav
4
+ Commands = Pry::CommandSet.new do
5
+ block_command 'step', 'Step execution into the next line or method.' do |steps|
6
+ check_file_context
7
+ breakout_navigation :step, steps
8
+ end
9
+
10
+ block_command 'next', 'Execute the next line within the same stack frame.' do |lines|
11
+ check_file_context
12
+ breakout_navigation :next, lines
13
+ end
14
+
15
+ block_command 'continue', 'Continue program execution and end the Pry session.' do
16
+ check_file_context
17
+ run 'exit-all'
18
+ end
19
+
20
+ helpers do
21
+ def breakout_navigation(action, times)
22
+ pry_instance.binding_stack.clear # Clear the binding stack.
23
+ throw(
24
+ :breakout_nav, # Break out of the REPL loop and
25
+ action: action, # signal the tracer.
26
+ times: times,
27
+ )
28
+ end
29
+
30
+ # Ensures that a command is executed in a local file context.
31
+ def check_file_context
32
+ unless PryNav.check_file_context(target)
33
+ raise Pry::CommandError, 'Cannot find local context. Did you use `binding.pry`?'
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ Pry.commands.import PryNav::Commands
@@ -0,0 +1,22 @@
1
+ require 'pry' unless defined? Pry
2
+ require 'pry-nav/tracer'
3
+
4
+ class << Pry
5
+ alias start_without_pry_nav start
6
+
7
+ def start_with_pry_nav(target = TOPLEVEL_BINDING, options = {})
8
+ old_options = options.reject { |k, _| k == :pry_remote }
9
+
10
+ if target.is_a?(Binding) && PryNav.check_file_context(target)
11
+ # Wrap the tracer around the usual Pry.start
12
+ PryNav::Tracer.new(options).run do
13
+ start_without_pry_nav(target, old_options)
14
+ end
15
+ else
16
+ # No need for the tracer unless we have a file context to step through
17
+ start_without_pry_nav(target, old_options)
18
+ end
19
+ end
20
+
21
+ alias start start_with_pry_nav
22
+ end
@@ -0,0 +1,41 @@
1
+ require 'pry' unless defined? Pry
2
+ require 'pry-remote'
3
+
4
+ module PryRemote
5
+ class Server
6
+ # Override the call to Pry.start to save off current Server, pass a
7
+ # pry_remote flag so pry-nav knows this is a remote session, and not kill
8
+ # the server right away
9
+ def run
10
+ if PryNav.current_remote_server
11
+ raise 'Already running a pry-remote session!'
12
+ else
13
+ PryNav.current_remote_server = self
14
+ end
15
+
16
+ setup
17
+ Pry.start(
18
+ @object,
19
+ input: client.input_proxy,
20
+ output: client.output,
21
+ pry_remote: true,
22
+ )
23
+ end
24
+
25
+ # Override to reset our saved global current server session.
26
+ alias teardown_without_pry_nav teardown
27
+ def teardown_with_pry_nav
28
+ teardown_without_pry_nav
29
+ PryNav.current_remote_server = nil
30
+ end
31
+ alias teardown teardown_with_pry_nav
32
+ end
33
+ end
34
+
35
+ # Ensure cleanup when a program finishes without another break. For example,
36
+ # 'next' on the last line of a program never hits the tracer proc, and thus
37
+ # PryNav::Tracer#run doesn't have a chance to cleanup.
38
+ at_exit do
39
+ set_trace_func nil
40
+ PryNav.current_remote_server.teardown if PryNav.current_remote_server
41
+ end
@@ -0,0 +1,91 @@
1
+ require 'pry' unless defined? Pry
2
+
3
+ module PryNav
4
+ class Tracer
5
+ def initialize(pry_start_options = {})
6
+ @step_in_lines = -1 # Break after this many lines
7
+ @frames_when_stepping = nil # Only break at this frame level
8
+ @frames = 0 # Traced stack frame level
9
+ @pry_start_options = pry_start_options # Options to use for Pry.start
10
+ end
11
+
12
+ def run
13
+ # For performance, disable any tracers while in the console.
14
+ stop
15
+
16
+ return_value = nil
17
+ command = catch(:breakout_nav) do # Coordinates with PryNav::Commands
18
+ return_value = yield
19
+ {} # Nothing thrown == no navigational command
20
+ end
21
+
22
+ # Adjust tracer based on command
23
+ if process_command(command)
24
+ start
25
+ else
26
+ if @pry_start_options[:pry_remote] && PryNav.current_remote_server
27
+ PryNav.current_remote_server.teardown
28
+ end
29
+ end
30
+
31
+ return_value
32
+ end
33
+
34
+ def start
35
+ set_trace_func method(:tracer).to_proc
36
+ end
37
+
38
+ def stop
39
+ set_trace_func nil
40
+ end
41
+
42
+ def process_command(command = {})
43
+ times = (command[:times] || 1).to_i
44
+ times = 1 if times <= 0
45
+
46
+ case command[:action]
47
+ when :step
48
+ @step_in_lines = times
49
+ @frames_when_stepping = nil
50
+ true
51
+ when :next
52
+ @step_in_lines = times
53
+ @frames_when_stepping = @frames
54
+ true
55
+ else
56
+ false
57
+ end
58
+ end
59
+
60
+ private
61
+
62
+ def tracer(event, file, _line, _id, binding, _klass)
63
+ # Ignore traces inside pry-nav code
64
+ return if file && TRACE_IGNORE_FILES.include?(File.expand_path(file))
65
+
66
+ case event
67
+ when 'line'
68
+ # Are we stepping? Or continuing by line ('next') and we're at the right
69
+ # frame? Then decrement our line counter cause this line counts.
70
+ if !@frames_when_stepping || @frames == @frames_when_stepping
71
+ @step_in_lines -= 1
72
+ @step_in_lines = -1 if @step_in_lines < 0
73
+
74
+ # Did we go up a frame and not break for a 'next' yet?
75
+ elsif @frames < @frames_when_stepping
76
+ @step_in_lines = 0 # Break right away
77
+ end
78
+
79
+ # Break on this line?
80
+ Pry.start(binding, @pry_start_options) if @step_in_lines.zero?
81
+
82
+ when 'call', 'class'
83
+ @frames += 1 # Track entering a frame
84
+
85
+ when 'return', 'end'
86
+ @frames -= 1 # Track leaving a stack frame
87
+ @frames = 0 if @frames < 0
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,3 @@
1
+ module PryNav
2
+ VERSION = '1.0.0'
3
+ end
data/lib/pry-nav.rb ADDED
@@ -0,0 +1,28 @@
1
+ require 'pry-nav/version'
2
+ require 'pry-nav/pry_ext'
3
+ require 'pry-nav/commands'
4
+ require 'pry-nav/tracer'
5
+
6
+ # Optionally load pry-remote monkey patches
7
+ require 'pry-nav/pry_remote_ext' if defined? PryRemote
8
+
9
+ module PryNav
10
+ TRACE_IGNORE_FILES = Dir[File.join(File.dirname(__FILE__), '**', '*.rb')].map { |f| File.expand_path(f) }
11
+
12
+ extend self
13
+
14
+ # Checks that a binding is in a local file context. Extracted from
15
+ # https://github.com/pry/pry/blob/master/lib/pry/default_commands/context.rb
16
+ def check_file_context(target)
17
+ file = if target.respond_to?(:source_location)
18
+ target.source_location.first
19
+ else
20
+ target.eval('__FILE__')
21
+ end
22
+
23
+ file == Pry.eval_path || (file !~ /(\(.*\))|<.*>/ && file != '' && file != '-e')
24
+ end
25
+
26
+ # Reference to currently running pry-remote server. Used by the tracer.
27
+ attr_accessor :current_remote_server
28
+ end
data/lib/pryx/pry_hack.rb CHANGED
@@ -32,11 +32,9 @@ module Kernel
32
32
  # to customise the kind of variables shown.
33
33
  require_relative '../pry-state' if state
34
34
 
35
- if Pryx::Background.foreground? and host.nil?
36
- return unless ENV['Pry_was_started'].nil?
35
+ return unless ENV['Pry_was_started'].nil?
37
36
 
38
- ENV['Pry_was_started'] = 'true'
39
- end
37
+ ENV['Pry_was_started'] = 'true'
40
38
 
41
39
  pry3(2, host: host, port: port)
42
40
 
data/lib/pryx/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pryx
4
- VERSION = [0, 10, 3]
4
+ VERSION = [0, 12, 0]
5
5
 
6
6
  class << VERSION
7
7
  include Comparable
data/lib/pryx.rb CHANGED
@@ -1,10 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- case RbConfig::CONFIG['ruby_version']
4
- when '3.3.0'...'3.4.0'
5
- require "readline"
6
- end
7
-
8
3
  require 'pryx/version'
9
4
  require 'pryx/background'
10
5
  require 'pryx/trap_backtrace'
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pryx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.3
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Billy.Zheng(zw963)
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-02-08 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: awesome_print
@@ -30,56 +29,42 @@ dependencies:
30
29
  requirements:
31
30
  - - "~>"
32
31
  - !ruby/object:Gem::Version
33
- version: '1.3'
32
+ version: '2.0'
34
33
  type: :runtime
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
37
  - - "~>"
39
38
  - !ruby/object:Gem::Version
40
- version: '1.3'
39
+ version: '2.0'
41
40
  - !ruby/object:Gem::Dependency
42
41
  name: pry
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - "~>"
46
45
  - !ruby/object:Gem::Version
47
- version: '0.14'
46
+ version: '0.16'
48
47
  type: :runtime
49
48
  prerelease: false
50
49
  version_requirements: !ruby/object:Gem::Requirement
51
50
  requirements:
52
51
  - - "~>"
53
52
  - !ruby/object:Gem::Version
54
- version: '0.14'
55
- - !ruby/object:Gem::Dependency
56
- name: pry-nav
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 1.0.0
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 1.0.0
53
+ version: '0.16'
69
54
  - !ruby/object:Gem::Dependency
70
55
  name: looksee
71
56
  requirement: !ruby/object:Gem::Requirement
72
57
  requirements:
73
58
  - - "~>"
74
59
  - !ruby/object:Gem::Version
75
- version: '5.0'
60
+ version: '5.1'
76
61
  type: :runtime
77
62
  prerelease: false
78
63
  version_requirements: !ruby/object:Gem::Requirement
79
64
  requirements:
80
65
  - - "~>"
81
66
  - !ruby/object:Gem::Version
82
- version: '5.0'
67
+ version: '5.1'
83
68
  - !ruby/object:Gem::Dependency
84
69
  name: pry-aa_ancestors
85
70
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +85,14 @@ dependencies:
100
85
  requirements:
101
86
  - - "~>"
102
87
  - !ruby/object:Gem::Version
103
- version: '1.5'
88
+ version: '1.7'
104
89
  type: :runtime
105
90
  prerelease: false
106
91
  version_requirements: !ruby/object:Gem::Requirement
107
92
  requirements:
108
93
  - - "~>"
109
94
  - !ruby/object:Gem::Version
110
- version: '1.5'
95
+ version: '1.7'
111
96
  - !ruby/object:Gem::Dependency
112
97
  name: pry-hier
113
98
  requirement: !ruby/object:Gem::Requirement
@@ -184,14 +169,14 @@ dependencies:
184
169
  requirements:
185
170
  - - '='
186
171
  - !ruby/object:Gem::Version
187
- version: 5.15.0
172
+ version: '6.0'
188
173
  type: :development
189
174
  prerelease: false
190
175
  version_requirements: !ruby/object:Gem::Requirement
191
176
  requirements:
192
177
  - - '='
193
178
  - !ruby/object:Gem::Version
194
- version: 5.15.0
179
+ version: '6.0'
195
180
  - !ruby/object:Gem::Dependency
196
181
  name: ritual
197
182
  requirement: !ruby/object:Gem::Requirement
@@ -229,6 +214,13 @@ files:
229
214
  - lib/pry-byebug/pry_ext.rb
230
215
  - lib/pry-disasm.rb
231
216
  - lib/pry-disasm/commands.rb
217
+ - lib/pry-nav.rb
218
+ - lib/pry-nav/cli.rb
219
+ - lib/pry-nav/commands.rb
220
+ - lib/pry-nav/pry_ext.rb
221
+ - lib/pry-nav/pry_remote_ext.rb
222
+ - lib/pry-nav/tracer.rb
223
+ - lib/pry-nav/version.rb
232
224
  - lib/pry-remote.rb
233
225
  - lib/pry-state.rb
234
226
  - lib/pry-state/hook_action.rb
@@ -252,7 +244,6 @@ licenses:
252
244
  - MIT
253
245
  metadata:
254
246
  rubygems_mfa_required: 'true'
255
- post_install_message:
256
247
  rdoc_options: []
257
248
  require_paths:
258
249
  - lib
@@ -260,15 +251,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
260
251
  requirements:
261
252
  - - ">="
262
253
  - !ruby/object:Gem::Version
263
- version: '2.6'
254
+ version: '2.7'
264
255
  required_rubygems_version: !ruby/object:Gem::Requirement
265
256
  requirements:
266
257
  - - ">="
267
258
  - !ruby/object:Gem::Version
268
259
  version: '0'
269
260
  requirements: []
270
- rubygems_version: 3.4.6
271
- signing_key:
261
+ rubygems_version: 4.0.3
272
262
  specification_version: 4
273
263
  summary: pry extension tools!
274
264
  test_files: []