pryx 0.6.1 → 0.8.0

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: '09a8d65224c56092b01d8230556c4ef522637b1b6e1932c5333ce018c3f0ce93'
4
- data.tar.gz: 5426012f47fa266763061e41ce8e8d45a34ab61ad0cf70de517a98312a40722b
3
+ metadata.gz: 201316b55fb222f72cfdddd561767a135fe203d749e3c0bdbb27498141063120
4
+ data.tar.gz: ebe0d7afe5b5a6b1aa38c615538fc316e3a2b7a8b6460010f9d5bf7437739000
5
5
  SHA512:
6
- metadata.gz: 3df7840a906cbe572d6c60bda02e17b5ad5dff15568e34307a031ac7f1fdc9416445e55f62197983d7e983d769be4dc484ee722468545457e4f60c3cb6907878
7
- data.tar.gz: 864ab3c3f5ec04563fda87ccfc7f3ad25097a75495bc977a613e123de0a2228ad4afea4e1c0b1d650e0230b860cf55f654345948ab9081cffad3f791a01064fb
6
+ metadata.gz: 03b8b8fa86de79e7a8527790e32a74ba42a9277d30c73a7f678c18e5fa5f05a05537d1762d0327eb2545a204749bf25b25c8c4f94cc15b371d18ed34ce717dc1
7
+ data.tar.gz: a05a4acd097aa02fb00a0db9fa5e7e27789944126ce2902a11d051658d5bdaeff0fbfc450cc5e6448670ab9d007141a787b53e4bb3b486664ceb6b837194b084
data/README.md CHANGED
@@ -55,6 +55,18 @@ use http connection.
55
55
  Until now, you've only seen the tip of the iceberg, please have a try.
56
56
 
57
57
 
58
+ If you prefer to use IRB over Pry, use can add following code instead.
59
+
60
+ ```sh
61
+ $: export RUBYOPT+=' -rpryx_irb'
62
+ $: ruby your_file.rb # add pry! in your_file for start pry session
63
+ ```
64
+
65
+ __WARN__: `require 'pryx_irb'` will enable many gems by default in your's ruby code.
66
+ so, prefer to use `require 'pryx'`, because latter almost not affect your's code,
67
+ only several methods added into Kernel#, and gems only be require if you run invoke
68
+ those added methods.
69
+
58
70
  ## useful command which added directly to Kernel#
59
71
 
60
72
  ### Kernel#pry!
@@ -70,7 +82,7 @@ $: RUBYOPT+='-rpryx_irb' ruby your_file.rb # add irb! in your_file for start pry
70
82
 
71
83
  Following feature both available when start a Pry or IRB session:
72
84
 
73
- 1. Add `next/step/up/down` command for debug, use [break](https://github.com/gsamokovarov/break)
85
+ 1. Add `next/step/up/down` command for debug, use [break](https://github.com/gsamokovarov/break) [pry-stack_explorer](https://github.com/pry/pry-stack_explorer)
74
86
  2. Add `Kernel#ls1`(use ls1 to avoid conflict with pry builtin ls command), see [looksee](https://github.com/oggy/looksee)
75
87
  3. Use `ap` for pretty print. see [awesome-print](https://github.com/awesome-print/awesome_print)
76
88
  4. Use `Clipboard.copy` or `Clipboard.paste` to interactive with system clipboard. see [clipboard](https://github.com/janlelis/clipboard)
@@ -86,7 +98,8 @@ Following is pry command available only after start a Pry session:
86
98
  5. Add `pry-aa_ancestors` command for print the class hierarchy, see [pry-aa_ancestors](https://github.com/tbpgr/pry-aa_ancestors)
87
99
  6. Add `up/down/frame/stack` command, see [pry-stack_explorer](https://github.com/pry/pry-stack_explorer)
88
100
  7. Add `yes` or `y` command, see [pry-yes](https://github.com/christofferh/pry-yes)
89
- 8. Add `pry-disam`, Check following screenshot for a example:
101
+ 8. Add `reload!` command , see [pry-reload](https://github.com/runa/pry-reload)
102
+ 9. Add `pry-disam`, Check following screenshot for a example:
90
103
 
91
104
  ![pry-disasm](images/disasm.png)
92
105
 
@@ -119,11 +132,12 @@ pryx is same as pry, but, with plugins and libraries correct configured.
119
132
 
120
133
  irbx is same things for irb.
121
134
 
122
- pry! just a alias to `pry-remote` command, when `Kernel#pry!` was intercepted in a background process,
123
- you can run `pry!` directly in terminal connect to it.
135
+ `pry!` just a alias to `binding.pry`, but, if process is running on background, it a alias to `binding.remote_pry('0.0.0.0', 9876)`,
136
+ you can specify host or port manually, like this: `pry!(host: '192.168.1.100')`.
137
+ in another terminal, you can run `pry!` directly to connect to it use IP + port.
124
138
 
125
- if your's pry-remote server started background on another host, or on a container, you man need
126
- specify hostname and port, e.g. connnect to 192.168.1.100, with port 9876
139
+ e.g. assume your's pry-remote server started background on another host(192.168.1.100), port 9876
140
+ It maybe in container, you can connect remote pry like this:
127
141
 
128
142
  ```sh
129
143
  $: pry! -s 192.168.1.100 -p 9876
@@ -138,7 +152,6 @@ namespace/variables etc.
138
152
 
139
153
  But, you should only use it in development, though, it was tested is run in container(alpine) too.
140
154
 
141
-
142
155
  ## Limit
143
156
 
144
157
  1. `break` not work well if you add more than one break point, but still use `next` goto the next break point,
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Binding
4
+ unless method_defined?(:source_location)
5
+ def source_location
6
+ eval "[__FILE__, __LINE__.to_i]"
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "forwardable"
4
+
5
+ module Break
6
+ class Command
7
+ extend Forwardable
8
+
9
+ def initialize(session)
10
+ @session = session
11
+ end
12
+
13
+ def execute
14
+ raise NotImplementedError
15
+ end
16
+
17
+ private
18
+
19
+ attr_reader :session
20
+ def_delegators :session, :context, :context!, :frontend
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Break
4
+ class DownCommand < TracePointCommand
5
+ def execute(*)
6
+ if context.depth >= 0
7
+ frontend.notify("Cannot go further down the stack")
8
+ else
9
+ super
10
+ end
11
+ end
12
+
13
+ def execute_trace(trace, *)
14
+ trace.disable
15
+
16
+ context!(*context.bindings, depth: context.depth + 1)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Break
4
+ class NextCommand < TracePointCommand
5
+ trace :line, :call, :return, :class, :end, :b_call, :b_return
6
+
7
+ def execute_trace(trace, *)
8
+ case trace.event
9
+ when :call, :class, :b_call
10
+ context.bindings << trace.binding
11
+ context.depth += 1
12
+ when :return, :end, :b_return
13
+ context.bindings.pop
14
+ context.depth -= 1
15
+ when :line
16
+ return if context.depth.positive?
17
+
18
+ trace.disable
19
+
20
+ context!(*context.bindings[0...-1], trace.binding)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Break
4
+ class StepCommand < TracePointCommand
5
+ trace :line, :call, :return, :class, :end, :b_call, :b_return
6
+
7
+ def execute_trace(trace, *)
8
+ case trace.event
9
+ when :call, :class, :b_call
10
+ trace.disable
11
+
12
+ context!(*context.bindings, trace.binding)
13
+ when :return, :end, :b_return
14
+ context.bindings.pop
15
+ context.depth -= 1
16
+ when :line
17
+ return if context.depth.positive?
18
+
19
+ trace.disable
20
+
21
+ context!(*context.bindings[0...-1], trace.binding)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Break
4
+ class TracePointCommand < Command
5
+ class << self
6
+ attr_reader :trace_events
7
+
8
+ def trace(*events)
9
+ @trace_events = events
10
+ end
11
+ end
12
+
13
+ def initialize(*)
14
+ super
15
+
16
+ @delayed_context = Fiber.new do |*args|
17
+ session.context!(*args)
18
+
19
+ loop do
20
+ session.context!(*Fiber.yield)
21
+ end
22
+ end
23
+ end
24
+
25
+ def execute(*args)
26
+ TracePoint.trace(*trace_events) do |trace|
27
+ next if Filter.internal?(trace.path)
28
+
29
+ execute_trace(trace, *args)
30
+ end
31
+
32
+ session.leave
33
+ end
34
+
35
+ def execute_trace
36
+ raise NotImplementedError
37
+ end
38
+
39
+ private
40
+
41
+ def context!(*args)
42
+ @delayed_context.resume(*args)
43
+ rescue FiberError
44
+ session.context!(*args)
45
+ end
46
+
47
+ def trace_events
48
+ self.class.trace_events
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Break
4
+ class UpCommand < TracePointCommand
5
+ def execute(*)
6
+ if context.bindings[context.depth - 2]
7
+ super
8
+ else
9
+ frontend.notify("Cannot go further up the stack")
10
+ end
11
+ end
12
+
13
+ def execute_trace(trace, *)
14
+ trace.disable
15
+
16
+ context!(*context.bindings, depth: context.depth - 1)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Break
4
+ class WhereCommand < Command
5
+ def execute(*)
6
+ frontend.where
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ require_relative "commands/tracepoint_command"
2
+ require_relative "commands/next_command"
3
+ require_relative "commands/step_command"
4
+ require_relative "commands/up_command"
5
+ require_relative "commands/down_command"
6
+ require_relative "commands/where_command"
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Break
4
+ class Context
5
+ attr_accessor :bindings
6
+ attr_accessor :depth
7
+
8
+ def initialize(*bindings, depth: 0)
9
+ @bindings = bindings
10
+ @depth = depth
11
+ end
12
+
13
+ def binding
14
+ @bindings[@depth - 1]
15
+ end
16
+
17
+ def inspect
18
+ "#{path}:#{lineno}"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Break
4
+ module Filter
5
+ extend self
6
+
7
+ attr_reader :internal
8
+
9
+ def register_internal(*paths)
10
+ (@internal ||= []).concat(paths)
11
+ end
12
+
13
+ def internal?(path)
14
+ @internal.any? { |location| path.include?(location) }
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pathname"
4
+
5
+ module Break::IRB
6
+ class Commands < Module
7
+ def initialize(session)
8
+ define_command session, :next, Break::NextCommand
9
+ define_command session, :step, Break::StepCommand
10
+ define_command session, :up, Break::UpCommand
11
+ define_command session, :down, Break::DownCommand
12
+ define_command session, :whereami, Break::WhereCommand
13
+ end
14
+
15
+ private
16
+
17
+ def define_command(session, name, cls)
18
+ define_method(name) do |*args|
19
+ cls.new(session).execute(*args)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "irb"
4
+
5
+ module Break::IRB
6
+ class Frontend
7
+ def initialize
8
+ IRB.setup caller_locations.first.path, argv: []
9
+ end
10
+
11
+ def attach(session)
12
+ @workspace = IRB::WorkSpace.new(session.context.binding)
13
+ @irb = safely_build_irb_instance(session, @workspace)
14
+
15
+ where
16
+
17
+ @irb.suspend_context special_case_next_eval(@irb.context) do
18
+ @irb.run(IRB.conf)
19
+ end
20
+ end
21
+
22
+ def detach
23
+ @irb&.context&.exit
24
+ end
25
+
26
+ def where
27
+ puts @workspace.code_around_binding if @workspace
28
+ end
29
+
30
+ def notify(message)
31
+ puts message
32
+ end
33
+
34
+ private
35
+
36
+ # Evaling `next` is a `SyntaxError` in Ruby. Since IRB does not have
37
+ # commands support in the lexer level, we need to call the `next` command
38
+ # in syntactically correct way.
39
+ def special_case_next_eval(irb_context)
40
+ def irb_context.evaluate(line, line_no, *args, **kwargs)
41
+ line = "self.next\n" if line == "next\n"
42
+ super(line, line_no, *args, **kwargs)
43
+ end
44
+
45
+ irb_context
46
+ end
47
+
48
+ # Trying to instantiate an `IRB:Irb` object with a workspace having a
49
+ # binding coming from `BasicObject`.
50
+ def safely_build_irb_instance(session, workspace)
51
+ irb = IRB::Irb.allocate
52
+ irb.instance_variable_set :@context, IRB::Context.new(irb, workspace, nil)
53
+ irb.instance_variable_set :@signal_status, :IN_IRB
54
+ irb.instance_variable_set :@scanner, RubyLex.new
55
+
56
+ begin
57
+ irb.context.main.extend IRB::ExtendCommandBundle
58
+ rescue NameError, TypeError
59
+ # Potential `NameError`: undefined method `irb_print_working_workspace' for class `#<Class:#420>'.
60
+ # Ignore it.
61
+ end
62
+
63
+ irb.context.main.extend Commands.new(session)
64
+ irb
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Break::IRB
4
+ module Overrides
5
+ def irb
6
+ session = Break::Session.new(self, frontend: Frontend.new)
7
+ session.enter
8
+ end
9
+ end
10
+ end
data/lib/break/irb.rb ADDED
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "irb/frontend"
4
+ require_relative "irb/commands"
5
+ require_relative "irb/overrides"
6
+
7
+ require "open-uri"
8
+
9
+ Break::Filter.register_internal IRB.method(:start).source_location.first.chomp(".rb")
10
+ Break::Filter.register_internal URI.method(:open).source_location.first.chomp(".rb")
11
+ Break::Filter.register_internal "(irb)"
12
+
13
+ Binding.prepend Break::IRB::Overrides
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Break::Pry
4
+ Commands = Pry::CommandSet.new do
5
+ create_command "next", "Go to the next line." do
6
+ group "Break"
7
+
8
+ banner <<-BANNER
9
+ Usage: next
10
+
11
+ Step over within the same frame.
12
+
13
+ Examples:
14
+ next #=> Move a line forward.
15
+ BANNER
16
+
17
+ def process
18
+ pry = defined?(pry_instance) ? pry_instance : _pry_
19
+ pry.__break_session__[:pry_instance] = pry
20
+
21
+
22
+ command = Break::NextCommand.new(pry.__break_session__)
23
+ command.execute
24
+ end
25
+ end
26
+
27
+ create_command "step", "Step into the current line invocation." do
28
+ group "Break"
29
+
30
+ banner <<-BANNER
31
+ Usage: step
32
+
33
+ Step into a method call.
34
+
35
+ Examples:
36
+ step #=> Step into the method invocation.
37
+ BANNER
38
+
39
+ def process
40
+ pry = defined?(pry_instance) ? pry_instance : _pry_
41
+ pry.__break_session__[:pry_instance] = pry
42
+
43
+ command = Break::StepCommand.new(pry.__break_session__)
44
+ command.execute
45
+ end
46
+ end
47
+
48
+ create_command "up", "Go up a frame." do
49
+ group "Break"
50
+
51
+ banner <<-BANNER
52
+ Usage: up
53
+
54
+ Go to the frame that called the current one. Can be used only if the
55
+ command `step` was issued before.
56
+
57
+ Examples:
58
+ up #=> Step into the method invocation.
59
+ BANNER
60
+
61
+ def process
62
+ pry = defined?(pry_instance) ? pry_instance : _pry_
63
+ pry.__break_session__[:pry_instance] = pry
64
+
65
+ command = Break::UpCommand.new(pry.__break_session__)
66
+ command.execute
67
+ end
68
+ end
69
+
70
+ create_command "down", "Go down a frame." do
71
+ group "Break"
72
+
73
+ banner <<-BANNER
74
+ Usage: down
75
+
76
+ Go to the frame called from the current one. Can be used only if the
77
+ command `step` was issued before.
78
+
79
+ Examples:
80
+ down #=> Step to the previous frame.
81
+ BANNER
82
+
83
+ def process
84
+ pry = defined?(pry_instance) ? pry_instance : _pry_
85
+ pry.__break_session__[:pry_instance] = pry
86
+
87
+ command = Break::DownCommand.new(pry.__break_session__)
88
+ command.execute
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Break::Pry
4
+ class Frontend
5
+ def attach(session)
6
+ previous_pry = session[:pry_instance]
7
+
8
+ @pry = Pry.start session.context.binding, __break_session__: session,
9
+ input: previous_pry.input,
10
+ output: previous_pry.output
11
+ where
12
+ end
13
+
14
+ def detach
15
+ throw :breakout
16
+ end
17
+
18
+ def where
19
+ @pry&.run_command "whereami".dup
20
+ rescue MethodSource::SourceNotFoundError
21
+ puts "Cannot find method code."
22
+ end
23
+
24
+ def notify(message)
25
+ puts message
26
+ end
27
+ end
28
+ end
data/lib/break/pry.rb ADDED
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ begin
4
+ require "pry"
5
+
6
+ require_relative "pry/frontend"
7
+ require_relative "pry/commands"
8
+ require_relative "pry/extensions"
9
+
10
+ Break::Filter.register_internal MethodSource.method(:source_helper).source_location.first.chomp(".rb")
11
+ Break::Filter.register_internal CodeRay.method(:scan).source_location.first.chomp(".rb")
12
+ Break::Filter.register_internal Pry.method(:start).source_location.first.chomp("/pry_class.rb")
13
+ Break::Filter.register_internal Forwardable.instance_method(:def_delegator).source_location.first.chomp(".rb")
14
+ Break::Filter.register_internal "(pry)"
15
+ Break::Filter.register_internal __dir__
16
+
17
+ Pry.config.hooks.add_hook :before_session, :start_initial_break_session do |_, _, pry|
18
+ pry.__break_session__ ||= Break::Session.new(pry.current_binding, frontend: Break::Pry::Frontend.new)
19
+ end
20
+
21
+ Pry.config.commands.import Break::Pry::Commands
22
+
23
+ begin
24
+ require "pry-remote"
25
+
26
+ Break::Filter.register_internal binding.method(:remote_pry).source_location.first.chomp('.rb')
27
+ Break::Filter.register_internal DRb.method(:start_service).source_location.first.chomp('/drb.rb')
28
+
29
+ at_exit do
30
+ Break::Pry.current_remote_server&.teardown
31
+ end
32
+ rescue LoadError
33
+ # Do nothing if we cannot require pry-remote.
34
+ end
35
+ rescue LoadError
36
+ # Do nothing if we cannot require pry.
37
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Break
4
+ class Session
5
+ attr_reader :contexts
6
+ attr_reader :frontend
7
+
8
+ def initialize(binding, frontend:)
9
+ @contexts = [Context.new(binding)]
10
+ @frontend = frontend
11
+ @metadata = {}
12
+ end
13
+
14
+ def enter
15
+ frontend.attach(self)
16
+ end
17
+
18
+ def leave
19
+ frontend.detach
20
+ end
21
+
22
+ def context
23
+ contexts.last
24
+ end
25
+
26
+ def context!(*bindings, depth: 0)
27
+ contexts << Context.new(*bindings, depth: depth)
28
+ enter
29
+ end
30
+
31
+ def [](key)
32
+ @metadata[key]
33
+ end
34
+
35
+ def []=(key, value)
36
+ @metadata[key] = value
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "minitest"
4
+
5
+ module Break
6
+ class TestingFrontend
7
+ class << self
8
+ def build(&block)
9
+ Class.new(self, &block)
10
+ end
11
+
12
+ def stack
13
+ @stack ||= []
14
+ end
15
+
16
+ def [](index)
17
+ stack[index]
18
+ end
19
+
20
+ def last
21
+ stack.last
22
+ end
23
+
24
+ def clear
25
+ stack.clear
26
+ end
27
+ end
28
+
29
+ attr_reader :session
30
+
31
+ def initialize
32
+ self.class.stack << self
33
+ end
34
+
35
+ def attach(session)
36
+ @session = session
37
+ end
38
+
39
+ def detach; end
40
+
41
+ def where; end
42
+
43
+ def notify(_message); end
44
+ end
45
+
46
+ class Test < Minitest::Test
47
+ def self.test(name, &block)
48
+ define_method("test_#{name}", &block)
49
+ end
50
+
51
+ def pass
52
+ Kernel.binding.tap do |binding|
53
+ yield binding if block_given?
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Break
4
+ VERSION = "0.30.0"
5
+ end
data/lib/break.rb ADDED
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "break/version"
4
+ require_relative "break/session"
5
+ require_relative "break/context"
6
+ require_relative "break/command"
7
+ require_relative "break/commands"
8
+ require_relative "break/filter"
9
+ require_relative "break/binding_ext"
10
+
11
+ require_relative "break/irb"
12
+ require_relative "break/pry"
13
+
14
+ Break::Filter.register_internal __dir__
15
+ Break::Filter.register_internal "<internal:"
@@ -1,9 +1,28 @@
1
1
  require 'binding_of_caller'
2
2
  require 'clipboard'
3
3
 
4
- # ap_hack 可以确保,当使用 irb! 时,looksee ls1 输出显示正确,同时不用关闭 irb :USE_COLORIZE 设置。
4
+ # HACK: for ap 可以确保,当使用 irb! 时,looksee ls1 输出显示正确,同时不用关闭 irb :USE_COLORIZE 设置。
5
5
  # See https://github.com/oggy/looksee/issues/57
6
6
  # 但是,ap_hack 必须放到 break_hack 前面,调换顺序,上面的 hack 失效。
7
- # WARN: 下面两行代码顺序不要换。
8
- require 'pryx/ap_hack'
9
- require 'pryx/break_hack'
7
+ # WARN: 下面两行 require 代码顺序不要换。
8
+ require 'awesome_print'
9
+
10
+ # AwesomePrint.defaults = {
11
+ # index: false
12
+ # }
13
+
14
+ if defined? AwesomePrint
15
+ if defined? Pry
16
+ AwesomePrint.pry!
17
+ else
18
+ AwesomePrint.irb!
19
+ end
20
+ end
21
+
22
+ # Add break gem into pryx for fix pry-remote issue.
23
+ # See https://github.com/gsamokovarov/break/issues/9
24
+
25
+ require_relative '../break'
26
+ Pry.commands.alias_command 'n', 'next'
27
+ Pry.commands.alias_command 's', 'step'
28
+ Pry.commands.alias_command 'w', 'watch' # watch is pry builtin
data/lib/pryx/pry_hack.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # 注意如果开启 pry-stack_explorer, 就不要使用 debugger, 因为进入新的上下文后, pry-stack_explorer 将失效.
2
2
 
3
3
  class Binding
4
- def _pry(host=nil, port=nil, options={})
4
+ def _pry(host: nil, port: nil, options: {})
5
5
  if host
6
6
  require 'pry-remote'
7
7
  else
@@ -14,7 +14,7 @@ class Binding
14
14
  if host
15
15
  notify_send('loading remote pry ...')
16
16
  # remote_pry(host, port, options) if Pry.initial_session?
17
- remote_pry(host, port, options)
17
+ self.remote_pry(host, port, options)
18
18
  else
19
19
  warn 'loading pry ...'
20
20
  self.pry
@@ -24,12 +24,14 @@ end
24
24
 
25
25
  module Kernel
26
26
  # 运行 pry! 会被拦截, 且只会被拦截一次.
27
- def pry!(remote: nil, port: 9876)
28
- return unless ENV['Pry_was_started'].nil?
27
+ def pry!(host: nil, port: 9876)
28
+ if Pryx::Background.foreground? and host.nil?
29
+ return unless ENV['Pry_was_started'].nil?
29
30
 
30
- ENV['Pry_was_started'] = 'true'
31
+ ENV['Pry_was_started'] = 'true'
32
+ end
31
33
 
32
- pry3(2, remote: remote, port: port)
34
+ pry3(2, host: host, port: port)
33
35
 
34
36
  # 这里如果有代码, 将会让 pry! 进入这个方法, 因此保持为空.
35
37
  end
@@ -41,13 +43,13 @@ module Kernel
41
43
 
42
44
  # 和 pry! 的差别就是,pry? 使用 pry-state 插件输出当前 context 的很多变量内容。
43
45
  # 注意:不需要总是开启 pry-state,因为有时候会输出太多内容,造成刷屏。
44
- def pry?(remote: nil, port: 9876)
46
+ def pry?(host: nil, port: 9876)
45
47
  return unless ENV['Pry_was_started'].nil?
46
48
 
47
49
  require 'pry-state'
48
50
  ENV['Pry_was_started'] = 'true'
49
51
 
50
- pry3(2, remote: remote, port: port)
52
+ pry3(2, host: host, port: port)
51
53
 
52
54
  # 这里如果有代码, 将会让 pry! 进入这个方法, 因此保持为空.
53
55
  end
@@ -59,21 +61,21 @@ module Kernel
59
61
  # 1. 单独运行 pry2, 永远不会被拦截,
60
62
  # 2. 如果之前运行过 pry1, 此时 pry2 将被拦截, 且只会被拦截一次.
61
63
 
62
- def pry2(caller=1, remote: nil, port: 9876)
64
+ def pry2(host: nil, port: 9876)
63
65
  if ENV['Pry2_should_start'] == 'true'
64
66
  ENV['Pry2_should_start'] = nil
65
- pry3(2, remote: remote, port: port)
67
+ pry3(2, host: host, port: port)
66
68
  end
67
69
  end
68
70
 
69
71
  # 等价于默认的 binding.pry, 会反复被拦截。
70
72
  # 起成 pry3 这个名字,也是为了方便直接使用。
71
- def pry3(caller=1, remote: nil, port: 9876)
72
- remote = '0.0.0.0' if Pryx::Background.background?
73
+ def pry3(caller=1, host: nil, port: 9876)
74
+ host = '0.0.0.0' if Pryx::Background.background?
73
75
 
74
76
  require 'binding_of_caller'
75
77
 
76
- binding.of_caller(caller)._pry(remote, port)
78
+ binding.of_caller(caller)._pry(host: host, port: port)
77
79
  end
78
80
 
79
81
  def notify_send(msg)
@@ -1,9 +1,9 @@
1
+ # power_assert is ruby 3 builtin gem
1
2
  require 'pry-power_assert'
2
3
 
3
4
  require 'pry-doc'
4
5
 
5
6
  require 'pry-yes'
6
- Pry.commands.alias_command 'y', 'yes'
7
7
 
8
8
  require 'pry-hier'
9
9
 
@@ -12,11 +12,13 @@ require 'pry-disasm'
12
12
  require 'pry-aa_ancestors'
13
13
  Pry::Commands.alias_command 'aa', 'aa_ancestors'
14
14
 
15
- # 这个必须在最后才有效, 但是目前存在一个问题,就是会将 pry3, pry! 加入 stacks
16
- # stack 显示 stack 的列表,frame 显示当前所在 stack, stack N 也可以根据数字跳转到 N
17
- require 'pry-stack_explorer' # Support: up, down, bottom, top, stack, frame
15
+ # stack 显示 stack 的列表,
16
+ # frame 显示当前所在 stack, frame N 也可以根据数字跳转到 N
17
+ require 'pry-stack_explorer'
18
18
  require 'pryx/pry-stack_explorer_hack'
19
19
 
20
+ require 'pry-reload'
21
+
20
22
  Pry::Commands.block_command 'cc', 'Continue, but stop in pry! breakpoint' do
21
23
  Pry.instance_variable_set(:@initial_session, true)
22
24
  ENV['Pry_was_started'] = nil
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, 6, 1]
4
+ VERSION = [0, 8, 0]
5
5
 
6
6
  class << VERSION
7
7
  include Comparable
data/lib/pryx.rb CHANGED
@@ -9,7 +9,7 @@ require 'pryx/irb_hack'
9
9
 
10
10
  # Add the non-bundler managermented gems back
11
11
  # this step is necessory when install pryx in docker-compose
12
- ENV['RUBYLIB'] = $LOAD_PATH.grep(/gems/).join(':')
12
+ ENV['RUBYLIB'] = "#{ENV['RUBYLIB']}:#{$LOAD_PATH.grep(/gems/).join(':')}"
13
13
 
14
14
  # set export RUBYOPT+=" -rpryx" to work with pryx.
15
15
  module Pryx
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pryx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Billy.Zheng(zw963)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-24 00:00:00.000000000 Z
11
+ date: 2022-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print
@@ -25,19 +25,19 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.9'
27
27
  - !ruby/object:Gem::Dependency
28
- name: break
28
+ name: clipboard
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.30'
33
+ version: '1.3'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.30'
40
+ version: '1.3'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: looksee
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -53,33 +53,33 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '4.4'
55
55
  - !ruby/object:Gem::Dependency
56
- name: clipboard
56
+ name: pry
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.3'
61
+ version: '0.14'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '1.3'
68
+ version: '0.14'
69
69
  - !ruby/object:Gem::Dependency
70
- name: pry
70
+ name: pry-aa_ancestors
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.14'
75
+ version: 0.0.1
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0.14'
82
+ version: 0.0.1
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: pry-doc
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1.3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry-hier
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.1'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.1'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: pry-power_assert
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -109,33 +123,33 @@ dependencies:
109
123
  - !ruby/object:Gem::Version
110
124
  version: 0.0.2
111
125
  - !ruby/object:Gem::Dependency
112
- name: pry-hier
126
+ name: pry-reload
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - "~>"
116
130
  - !ruby/object:Gem::Version
117
- version: '0.1'
131
+ version: '0.3'
118
132
  type: :runtime
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
136
  - - "~>"
123
137
  - !ruby/object:Gem::Version
124
- version: '0.1'
138
+ version: '0.3'
125
139
  - !ruby/object:Gem::Dependency
126
- name: pry-aa_ancestors
140
+ name: pry-rescue
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - "~>"
130
144
  - !ruby/object:Gem::Version
131
- version: 0.0.1
145
+ version: '1.5'
132
146
  type: :runtime
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
150
  - - "~>"
137
151
  - !ruby/object:Gem::Version
138
- version: 0.0.1
152
+ version: '1.5'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: pry-stack_explorer
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -151,19 +165,19 @@ dependencies:
151
165
  - !ruby/object:Gem::Version
152
166
  version: '0.6'
153
167
  - !ruby/object:Gem::Dependency
154
- name: pry-rescue
168
+ name: m
155
169
  requirement: !ruby/object:Gem::Requirement
156
170
  requirements:
157
171
  - - "~>"
158
172
  - !ruby/object:Gem::Version
159
- version: '1.5'
160
- type: :runtime
173
+ version: '1.6'
174
+ type: :development
161
175
  prerelease: false
162
176
  version_requirements: !ruby/object:Gem::Requirement
163
177
  requirements:
164
178
  - - "~>"
165
179
  - !ruby/object:Gem::Version
166
- version: '1.5'
180
+ version: '1.6'
167
181
  - !ruby/object:Gem::Dependency
168
182
  name: minitest
169
183
  requirement: !ruby/object:Gem::Requirement
@@ -178,20 +192,6 @@ dependencies:
178
192
  - - ">="
179
193
  - !ruby/object:Gem::Version
180
194
  version: '0'
181
- - !ruby/object:Gem::Dependency
182
- name: m
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - "~>"
186
- - !ruby/object:Gem::Version
187
- version: '1.6'
188
- type: :development
189
- prerelease: false
190
- version_requirements: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - "~>"
193
- - !ruby/object:Gem::Version
194
- version: '1.6'
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: ritual
197
197
  requirement: !ruby/object:Gem::Requirement
@@ -221,7 +221,29 @@ files:
221
221
  - bin/irbx
222
222
  - bin/pry!
223
223
  - bin/pryx
224
+ - lib/break.rb
225
+ - lib/break/binding_ext.rb
226
+ - lib/break/command.rb
227
+ - lib/break/commands.rb
228
+ - lib/break/commands/down_command.rb
229
+ - lib/break/commands/next_command.rb
230
+ - lib/break/commands/step_command.rb
231
+ - lib/break/commands/tracepoint_command.rb
232
+ - lib/break/commands/up_command.rb
233
+ - lib/break/commands/where_command.rb
234
+ - lib/break/context.rb
235
+ - lib/break/filter.rb
236
+ - lib/break/irb.rb
237
+ - lib/break/irb/commands.rb
238
+ - lib/break/irb/frontend.rb
239
+ - lib/break/irb/overrides.rb
240
+ - lib/break/pry.rb
241
+ - lib/break/pry/commands.rb
224
242
  - lib/break/pry/extensions.rb
243
+ - lib/break/pry/frontend.rb
244
+ - lib/break/session.rb
245
+ - lib/break/testing.rb
246
+ - lib/break/version.rb
225
247
  - lib/pry-byebug.rb
226
248
  - lib/pry-byebug/WARN
227
249
  - lib/pry-byebug/base.rb
@@ -236,9 +258,7 @@ files:
236
258
  - lib/pry-state/printer.rb
237
259
  - lib/pry-yes.rb
238
260
  - lib/pryx.rb
239
- - lib/pryx/ap_hack.rb
240
261
  - lib/pryx/background.rb
241
- - lib/pryx/break_hack.rb
242
262
  - lib/pryx/common_plugins.rb
243
263
  - lib/pryx/drip.wav
244
264
  - lib/pryx/irb_hack.rb
data/lib/pryx/ap_hack.rb DELETED
@@ -1,15 +0,0 @@
1
- require 'awesome_print'
2
-
3
- # AwesomePrint.defaults = {
4
- # index: false
5
- # }
6
-
7
- if defined? AwesomePrint
8
- if defined? Pry
9
- require 'pry'
10
- AwesomePrint.pry!
11
- else
12
- require 'irb'
13
- AwesomePrint.irb!
14
- end
15
- end
@@ -1,6 +0,0 @@
1
- require 'break'
2
- load "#{__dir__}/../break/pry/extensions.rb"
3
-
4
- Pry.commands.alias_command 'n', 'next'
5
- Pry.commands.alias_command 's', 'step'
6
- Pry.commands.alias_command 'w', 'watch' # watch is pry builtin