break 0.8.0 → 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: e14cd966917b91b925d085e986916164b42e5a3dd1986818b0e45e291e8177d5
4
- data.tar.gz: 596fc1d57d319b23303ec89832c3e93cfbc62a6d040406f5ce9cad4dc8103735
3
+ metadata.gz: 74677fbc2dbffd1d87e55b91d3b49b2cd2956fa32c6906ef8f0324c892b82498
4
+ data.tar.gz: 045e95de9db1b7422246d2ddd93f74bd488c6ce51e11ded7975ccec8d6040720
5
5
  SHA512:
6
- metadata.gz: 8c9bf9ea4a4ddb23c69c27f536e1f54b87dd785346dd70e7f13c5dcc6fe51248ec3987f87e35f4dd6dd03016de4360e94a744d5218b5c33c48ce96d1e443e78a
7
- data.tar.gz: 5f4f020f420ed3adb3db0db53960fa68c0b2824802dd3a718923ae151d71ae46eabeb037414ac3753131f329eccd46305b04429e1c77705eff4b7e61e5d4a718
6
+ metadata.gz: 4720cd3ea21f160b5dfbbc353b1d4322bc20c5bb1fcc2646f796ca10a2916414ba34f5dbaec4bed436a9ae58b86fbde1de6082c9093d65c396110cf08c1e453d
7
+ data.tar.gz: 014d460c176e3499193d11874a5f49769f64b8005812387a602de3065cf15cb9b3b04ad6b6a117d8175e5e7f2912f66a5abc9bc385101cf77e8db9805c7d454e
@@ -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"
@@ -10,6 +10,18 @@ module Break
10
10
  end
11
11
  end
12
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
+
13
25
  def execute(*args)
14
26
  TracePoint.trace(*trace_events) do |trace|
15
27
  next if Filter.internal?(trace.path)
@@ -26,6 +38,12 @@ module Break
26
38
 
27
39
  private
28
40
 
41
+ def context!(*args)
42
+ @delayed_context.resume(*args)
43
+ rescue FiberError
44
+ session.context!(*args)
45
+ end
46
+
29
47
  def trace_events
30
48
  self.class.trace_events
31
49
  end
@@ -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,21 +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, :continue, Break::ContinueCommand, preserve: false
12
+ define_command session, :whereami, Break::WhereCommand
13
13
  end
14
14
 
15
15
  private
16
16
 
17
- def define_command(session, name, cls, preserve: true)
17
+ def define_command(session, name, cls)
18
18
  define_method(name) do |*args|
19
19
  cls.new(session).execute(*args)
20
- ensure
21
- # We don't have a clear guideline of when an IRB session starts and
22
- # when it ends. If we're excuting commands, we have to quit the IRB
23
- # session which naturally marks it as stopped. If we're executing a
24
- # `break` command though we actually want to keep marking it as started
25
- # so we don't step over `binding.irb` calls.
26
- Break::Session.start! if preserve
27
20
  end
28
21
  end
29
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, exception: nil)
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, exception: exception)
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,20 @@
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
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 "(pry)"
14
- Break::Filter.register_internal __dir__
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__
15
16
 
16
- Object.prepend Break::Pry::Overrides
17
-
18
- Pry.config.commands.import Break::Pry::Commands
17
+ Pry.config.commands.import Break::Pry::Commands
18
+ rescue LoadError
19
+ # Do nothing if we cannot require pry.
20
+ end
@@ -15,12 +15,11 @@ 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
+ session = Break::Session.new(pry.binding_stack.first, frontend: Frontend.new(pry))
19
20
 
20
21
  command = Break::NextCommand.new(session)
21
22
  command.execute
22
- ensure
23
- Break::Session.start!
24
23
  end
25
24
  end
26
25
 
@@ -37,12 +36,11 @@ module Break::Pry
37
36
  BANNER
38
37
 
39
38
  def process
40
- session = Break::Session.new(_pry_.binding_stack.first, frontend: Frontend.new(_pry_))
39
+ pry = defined?(pry_instance) ? pry_instance : _pry_
40
+ session = Break::Session.new(pry.binding_stack.first, frontend: Frontend.new(pry))
41
41
 
42
42
  command = Break::StepCommand.new(session)
43
43
  command.execute
44
- ensure
45
- Break::Session.start!
46
44
  end
47
45
  end
48
46
 
@@ -60,12 +58,11 @@ module Break::Pry
60
58
  BANNER
61
59
 
62
60
  def process
63
- session = Break::Session.new(_pry_.binding_stack.first, frontend: Frontend.new(_pry_))
61
+ pry = defined?(pry_instance) ? pry_instance : _pry_
62
+ session = Break::Session.new(pry.binding_stack.first, frontend: Frontend.new(pry))
64
63
 
65
64
  command = Break::UpCommand.new(session)
66
65
  command.execute
67
- ensure
68
- Break::Session.start!
69
66
  end
70
67
  end
71
68
 
@@ -83,12 +80,11 @@ module Break::Pry
83
80
  BANNER
84
81
 
85
82
  def process
86
- session = Break::Session.new(_pry_.binding_stack.first, frontend: Frontend.new(_pry_))
83
+ pry = defined?(pry_instance) ? pry_instance : _pry_
84
+ session = Break::Session.new(pry.binding_stack.first, frontend: Frontend.new(pry))
87
85
 
88
86
  command = Break::DownCommand.new(session)
89
87
  command.execute
90
- ensure
91
- Break::Session.start!
92
88
  end
93
89
  end
94
90
  end
@@ -2,20 +2,6 @@
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
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Break
4
- VERSION = "0.8.0"
4
+ VERSION = "0.12.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.8.0
4
+ version: 0.12.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: 2019-09-28 00:00:00.000000000 Z
11
+ date: 2020-07-18 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
@@ -79,7 +79,6 @@ files:
79
79
  - lib/break/pry.rb
80
80
  - lib/break/pry/commands.rb
81
81
  - lib/break/pry/frontend.rb
82
- - lib/break/pry/overrides.rb
83
82
  - lib/break/session.rb
84
83
  - lib/break/testing.rb
85
84
  - lib/break/version.rb
@@ -87,7 +86,7 @@ homepage: https://github.com/gsamokovarov/break
87
86
  licenses:
88
87
  - MIT
89
88
  metadata: {}
90
- post_install_message:
89
+ post_install_message:
91
90
  rdoc_options: []
92
91
  require_paths:
93
92
  - lib
@@ -103,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
102
  version: '0'
104
103
  requirements: []
105
104
  rubygems_version: 3.0.3
106
- signing_key:
105
+ signing_key:
107
106
  specification_version: 4
108
- summary: Experimental debugger in plain Ruby
107
+ summary: Lightweight Ruby debugger
109
108
  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