break 0.8.0 → 0.12.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: 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