break 0.9.0 → 0.20.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: 7ef06d9ad6c7511104925c2b1d6f9e5a61b8dc2e1cb1f9b982701e927b7b7610
4
- data.tar.gz: 7e5909e5fd6673e8a209c34763946816ed1304fd82d86340e7c998a5ba472994
3
+ metadata.gz: 8847ce453f4b00d664fec2f77e2f553f1a25d95847fad8e44aeb849bcc696dd6
4
+ data.tar.gz: 3d0f52bba812f6dac645936822721ad60246ad79c379f1475154d9c53c45cbc2
5
5
  SHA512:
6
- metadata.gz: a2c4c328b86982034c6113067c1f117d273d12a882c262713d2997d0e3d430c96964b60f46dc25ebe28eb8172188157841ca6fdbf737ea2f36e9aeb64139b882
7
- data.tar.gz: 84f61f9b4c78e735b459b8f5b79a49ff9857e5f9b3fc28eb360f2dd2775b83b848d7c161267fb6008258018c38a8cd62cd1b0c62dcaf5003097a10082c5c1bd4
6
+ metadata.gz: f52722f40b4ce06b009bfa2a18dd53c547c3e93d4735bd53dcc38318fbcac65449f87a4672f0dbff6f25473a41f2ff5a81e27e99b60872a5ca2b365da49c1f0d
7
+ data.tar.gz: e3fe4853aa0c51e7d33368b176e101ffaaaa9309dcf3c23577720e71877278636f98476dc974e7b321c75fa62355b4ad303ba1d5cf9c53dc02c3baca5d2cffdf
@@ -9,6 +9,6 @@ require_relative "break/filter"
9
9
  require_relative "break/binding_ext"
10
10
 
11
11
  require_relative "break/irb"
12
- require_relative "break/pry" if defined?(Pry)
12
+ require_relative "break/pry"
13
13
 
14
14
  Break::Filter.register_internal __dir__
@@ -1,8 +1,6 @@
1
1
  require_relative "commands/tracepoint_command"
2
- require_relative "commands/continue_command"
3
- require_relative "commands/list_command"
4
2
  require_relative "commands/next_command"
5
3
  require_relative "commands/step_command"
6
4
  require_relative "commands/up_command"
7
5
  require_relative "commands/down_command"
8
-
6
+ require_relative "commands/where_command"
@@ -40,6 +40,8 @@ module Break
40
40
 
41
41
  def context!(*args)
42
42
  @delayed_context.resume(*args)
43
+ rescue FiberError
44
+ session.context!(*args)
43
45
  end
44
46
 
45
47
  def trace_events
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Break
4
- class ListCommand < Command
4
+ class WhereCommand < Command
5
5
  def execute(*)
6
6
  frontend.where
7
7
  end
@@ -4,7 +4,10 @@ require_relative "irb/frontend"
4
4
  require_relative "irb/commands"
5
5
  require_relative "irb/overrides"
6
6
 
7
+ require "open-uri"
8
+
7
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")
8
11
  Break::Filter.register_internal "(irb)"
9
12
 
10
13
  Binding.prepend Break::IRB::Overrides
@@ -9,22 +9,14 @@ module Break::IRB
9
9
  define_command session, :step, Break::StepCommand
10
10
  define_command session, :up, Break::UpCommand
11
11
  define_command session, :down, Break::DownCommand
12
- define_command session, :list, Break::ListCommand
13
- define_command session, :continue, Break::ContinueCommand, preserve: false
12
+ define_command session, :whereami, Break::WhereCommand
14
13
  end
15
14
 
16
15
  private
17
16
 
18
- def define_command(session, name, cls, preserve: true)
17
+ def define_command(session, name, cls)
19
18
  define_method(name) do |*args|
20
19
  cls.new(session).execute(*args)
21
- ensure
22
- # We don't have a clear guideline of when an IRB session starts and
23
- # when it ends. If we're executing commands, we have to quit the IRB
24
- # session which naturally marks it as stopped. If we're executing a
25
- # `break` command we actually want to keep marking it as started
26
- # so we don't step over `binding.irb` calls.
27
- Break::Session.start! if preserve
28
20
  end
29
21
  end
30
22
  end
@@ -43,9 +43,9 @@ module Break::IRB
43
43
  # commands support in the lexer level, we need to call the `next` command
44
44
  # in syntactically correct way.
45
45
  def special_case_next_eval(irb_context)
46
- def irb_context.evaluate(line, line_no, *args)
46
+ def irb_context.evaluate(line, line_no, *args, **kwargs)
47
47
  line = "self.next\n" if line == "next\n"
48
- super(line, line_no, *args)
48
+ super(line, line_no, *args, **kwargs)
49
49
  end
50
50
 
51
51
  irb_context
@@ -3,16 +3,8 @@
3
3
  module Break::IRB
4
4
  module Overrides
5
5
  def irb
6
- return if Break::Session.active?
7
-
8
- Break::Session.start!
9
-
10
- begin
11
- session = Break::Session.new(self, frontend: Frontend.new)
12
- session.enter
13
- ensure
14
- Break::Session.stop!
15
- end
6
+ session = Break::Session.new(self, frontend: Frontend.new)
7
+ session.enter
16
8
  end
17
9
  end
18
10
  end
@@ -1,18 +1,38 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "pry"
4
- require "break"
3
+ begin
4
+ require "pry"
5
+ require "break"
5
6
 
6
- require_relative "pry/frontend"
7
- require_relative "pry/commands"
8
- require_relative "pry/overrides"
7
+ require_relative "pry/frontend"
8
+ require_relative "pry/commands"
9
+ require_relative "pry/extensions"
9
10
 
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 "(pry)"
14
- Break::Filter.register_internal __dir__
11
+ Break::Filter.register_internal MethodSource.method(:source_helper).source_location.first.chomp(".rb")
12
+ Break::Filter.register_internal CodeRay.method(:scan).source_location.first.chomp(".rb")
13
+ Break::Filter.register_internal Pry.method(:start).source_location.first.chomp("/pry_class.rb")
14
+ Break::Filter.register_internal Forwardable.instance_method(:def_delegator).source_location.first.chomp(".rb")
15
+ Break::Filter.register_internal "(pry)"
16
+ Break::Filter.register_internal __dir__
15
17
 
16
- Object.prepend Break::Pry::Overrides
18
+ Pry.config.hooks.add_hook :before_session, :start_initial_break_session do |_, _, pry|
19
+ pry.__break_session__ ||= Break::Session.new(pry.current_binding, frontend: Break::Pry::Frontend.new)
20
+ end
17
21
 
18
- Pry.config.commands.import Break::Pry::Commands
22
+ Pry.config.commands.import Break::Pry::Commands
23
+
24
+ begin
25
+ require "pry-remote"
26
+
27
+ Break::Filter.register_internal binding.method(:remote_pry).source_location.first.chomp('.rb')
28
+ Break::Filter.register_internal DRb.method(:start_service).source_location.first.chomp('/drb.rb')
29
+
30
+ at_exit do
31
+ Break::Pry.current_remote_server&.teardown
32
+ end
33
+ rescue LoadError
34
+ # Do nothing if we cannot require pry-remote.
35
+ end
36
+ rescue LoadError
37
+ # Do nothing if we cannot require pry.
38
+ end
@@ -15,12 +15,12 @@ module Break::Pry
15
15
  BANNER
16
16
 
17
17
  def process
18
- session = Break::Session.new(_pry_.binding_stack.first, frontend: Frontend.new(_pry_))
18
+ pry = defined?(pry_instance) ? pry_instance : _pry_
19
+ pry.__break_session__[:pry_instance] = pry
19
20
 
20
- command = Break::NextCommand.new(session)
21
+
22
+ command = Break::NextCommand.new(pry.__break_session__)
21
23
  command.execute
22
- ensure
23
- Break::Session.start!
24
24
  end
25
25
  end
26
26
 
@@ -37,12 +37,11 @@ module Break::Pry
37
37
  BANNER
38
38
 
39
39
  def process
40
- session = Break::Session.new(_pry_.binding_stack.first, frontend: Frontend.new(_pry_))
40
+ pry = defined?(pry_instance) ? pry_instance : _pry_
41
+ pry.__break_session__[:pry_instance] = pry
41
42
 
42
- command = Break::StepCommand.new(session)
43
+ command = Break::StepCommand.new(pry.__break_session__)
43
44
  command.execute
44
- ensure
45
- Break::Session.start!
46
45
  end
47
46
  end
48
47
 
@@ -60,12 +59,11 @@ module Break::Pry
60
59
  BANNER
61
60
 
62
61
  def process
63
- session = Break::Session.new(_pry_.binding_stack.first, frontend: Frontend.new(_pry_))
62
+ pry = defined?(pry_instance) ? pry_instance : _pry_
63
+ pry.__break_session__[:pry_instance] = pry
64
64
 
65
- command = Break::UpCommand.new(session)
65
+ command = Break::UpCommand.new(pry.__break_session__)
66
66
  command.execute
67
- ensure
68
- Break::Session.start!
69
67
  end
70
68
  end
71
69
 
@@ -83,12 +81,11 @@ module Break::Pry
83
81
  BANNER
84
82
 
85
83
  def process
86
- session = Break::Session.new(_pry_.binding_stack.first, frontend: Frontend.new(_pry_))
84
+ pry = defined?(pry_instance) ? pry_instance : _pry_
85
+ pry.__break_session__[:pry_instance] = pry
87
86
 
88
- command = Break::DownCommand.new(session)
87
+ command = Break::DownCommand.new(pry.__break_session__)
89
88
  command.execute
90
- ensure
91
- Break::Session.start!
92
89
  end
93
90
  end
94
91
  end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Break::Pry
4
+ module PryExtensions
5
+ attr_accessor :__break_session__
6
+
7
+ def initialize(options)
8
+ super(options)
9
+
10
+ @__break_session__ = options[:__break_session__]
11
+ end
12
+ end
13
+ end
14
+
15
+ Pry.prepend Break::Pry::PryExtensions
16
+
17
+ begin
18
+ require "pry-remote"
19
+
20
+ module Break::Pry
21
+ class << self
22
+ attr_accessor :current_remote_server
23
+ end
24
+
25
+ module PryRemoteServerExtensions
26
+ def initialize(*)
27
+ Break::Pry.current_remote_server&.teardown
28
+
29
+ super
30
+ end
31
+
32
+ def run
33
+ return if Break::Pry.current_remote_server
34
+ Break::Pry.current_remote_server = self
35
+
36
+ setup
37
+
38
+ Pry.start @object, @options.merge(input: client.input_proxy, output: client.output)
39
+ end
40
+
41
+ def teardown
42
+ super
43
+ ensure
44
+ Break::Pry.current_remote_server = nil
45
+ end
46
+ end
47
+ end
48
+
49
+ PryRemote::Server.prepend Break::Pry::PryRemoteServerExtensions
50
+ rescue LoadError
51
+ # Do nothing if we cannot require pry-remote.
52
+ end
@@ -2,12 +2,12 @@
2
2
 
3
3
  module Break::Pry
4
4
  class Frontend
5
- def initialize(pry)
6
- @pry = pry
7
- end
8
-
9
5
  def attach(session)
10
- @pry = Pry.start(session.context.binding)
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
11
  where
12
12
  end
13
13
 
@@ -2,26 +2,13 @@
2
2
 
3
3
  module Break
4
4
  class Session
5
- class << self
6
- def start!
7
- Thread.current[:__break_active_session__] = true
8
- end
9
-
10
- def stop!
11
- Thread.current[:__break_active_session__] = nil
12
- end
13
-
14
- def active?
15
- Thread.current[:__break_active_session__]
16
- end
17
- end
18
-
19
5
  attr_reader :contexts
20
6
  attr_reader :frontend
21
7
 
22
8
  def initialize(binding, frontend:)
23
9
  @contexts = [Context.new(binding)]
24
10
  @frontend = frontend
11
+ @metadata = {}
25
12
  end
26
13
 
27
14
  def enter
@@ -40,5 +27,13 @@ module Break
40
27
  contexts << Context.new(*bindings, depth: depth)
41
28
  enter
42
29
  end
30
+
31
+ def [](key)
32
+ @metadata[key]
33
+ end
34
+
35
+ def []=(key, value)
36
+ @metadata[key] = value
37
+ end
43
38
  end
44
39
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Break
4
- VERSION = "0.9.0"
4
+ VERSION = "0.20.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: break
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genadi Samokovarov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-10 00:00:00.000000000 Z
11
+ date: 2020-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -42,17 +42,18 @@ dependencies:
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: 12.3.3
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: '10.0'
55
- description: Experimental debugger in plain Ruby using the TracePoint API
54
+ version: 12.3.3
55
+ description: Lightweight Ruby debugger written in plain Ruby using the TracePoint
56
+ API
56
57
  email:
57
58
  - gsamokovarov@gmail.com
58
59
  executables: []
@@ -63,13 +64,12 @@ files:
63
64
  - lib/break/binding_ext.rb
64
65
  - lib/break/command.rb
65
66
  - lib/break/commands.rb
66
- - lib/break/commands/continue_command.rb
67
67
  - lib/break/commands/down_command.rb
68
- - lib/break/commands/list_command.rb
69
68
  - lib/break/commands/next_command.rb
70
69
  - lib/break/commands/step_command.rb
71
70
  - lib/break/commands/tracepoint_command.rb
72
71
  - lib/break/commands/up_command.rb
72
+ - lib/break/commands/where_command.rb
73
73
  - lib/break/context.rb
74
74
  - lib/break/filter.rb
75
75
  - lib/break/irb.rb
@@ -78,8 +78,8 @@ files:
78
78
  - lib/break/irb/overrides.rb
79
79
  - lib/break/pry.rb
80
80
  - lib/break/pry/commands.rb
81
+ - lib/break/pry/extensions.rb
81
82
  - lib/break/pry/frontend.rb
82
- - lib/break/pry/overrides.rb
83
83
  - lib/break/session.rb
84
84
  - lib/break/testing.rb
85
85
  - lib/break/version.rb
@@ -87,7 +87,7 @@ homepage: https://github.com/gsamokovarov/break
87
87
  licenses:
88
88
  - MIT
89
89
  metadata: {}
90
- post_install_message:
90
+ post_install_message:
91
91
  rdoc_options: []
92
92
  require_paths:
93
93
  - lib
@@ -103,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
103
  version: '0'
104
104
  requirements: []
105
105
  rubygems_version: 3.0.3
106
- signing_key:
106
+ signing_key:
107
107
  specification_version: 4
108
- summary: Experimental debugger in plain Ruby
108
+ summary: Lightweight Ruby debugger
109
109
  test_files: []
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Break
4
- class ContinueCommand < Command
5
- def execute(*)
6
- session.leave
7
- end
8
- end
9
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Break::Pry
4
- # Overrides is a module that is supposed to be prepended into ::Object's
5
- # ancestor chain and hook into the #pry method and prevent double break
6
- # sessions.
7
- module Overrides
8
- def pry(*)
9
- return if Break::Session.active?
10
-
11
- Break::Session.start!
12
-
13
- begin
14
- super
15
- ensure
16
- Break::Session.stop!
17
- end
18
- end
19
- end
20
- end