pry-byebug 3.1.0 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -1
  3. data/README.md +7 -6
  4. data/lib/byebug/processors/pry_processor.rb +3 -5
  5. data/lib/pry-byebug.rb +1 -3
  6. data/lib/pry-byebug/cli.rb +1 -2
  7. data/lib/pry-byebug/commands.rb +8 -0
  8. data/lib/pry-byebug/commands/breakpoint.rb +135 -0
  9. data/lib/pry-byebug/commands/continue.rb +37 -0
  10. data/lib/pry-byebug/commands/down.rb +33 -0
  11. data/lib/pry-byebug/commands/finish.rb +26 -0
  12. data/lib/pry-byebug/commands/frame.rb +33 -0
  13. data/lib/pry-byebug/commands/next.rb +37 -0
  14. data/lib/pry-byebug/commands/step.rb +32 -0
  15. data/lib/pry-byebug/commands/up.rb +33 -0
  16. data/lib/pry-byebug/helpers/breakpoints.rb +84 -0
  17. data/lib/pry-byebug/helpers/multiline.rb +21 -0
  18. data/lib/pry-byebug/helpers/navigation.rb +17 -0
  19. data/lib/pry-byebug/version.rb +1 -1
  20. data/lib/pry/byebug/breakpoints.rb +4 -0
  21. metadata +23 -45
  22. data/.gitignore +0 -18
  23. data/.rubocop.yml +0 -14
  24. data/.rubocop_todo.yml +0 -20
  25. data/.travis.yml +0 -9
  26. data/Gemfile +0 -14
  27. data/Rakefile +0 -17
  28. data/lib/pry/commands/breakpoint.rb +0 -216
  29. data/lib/pry/commands/frames.rb +0 -79
  30. data/lib/pry/commands/stepping.rb +0 -88
  31. data/pry-byebug.gemspec +0 -23
  32. data/test/base_test.rb +0 -16
  33. data/test/breakpoints_test.rb +0 -146
  34. data/test/examples/break1.rb +0 -23
  35. data/test/examples/break2.rb +0 -21
  36. data/test/examples/deep_stepping.rb +0 -9
  37. data/test/examples/frames.rb +0 -14
  38. data/test/examples/stepping.rb +0 -29
  39. data/test/frames_test.rb +0 -58
  40. data/test/processor_test.rb +0 -40
  41. data/test/pry_ext_test.rb +0 -4
  42. data/test/pry_remote_ext_test.rb +0 -4
  43. data/test/stepping_test.rb +0 -78
  44. data/test/test_helper.rb +0 -35
@@ -1,79 +0,0 @@
1
- #
2
- # Main Pry class.
3
- #
4
- # We're going to add to it custom frame commands for Pry-Byebug
5
- #
6
- class Pry
7
- FrameCommands = CommandSet.new do
8
- create_command 'up' do
9
- description 'Move current frame up.'
10
-
11
- banner <<-BANNER
12
- Usage: up [TIMES]
13
-
14
- Move current frame up. By default, moves by 1 frame.
15
-
16
- Examples:
17
- up #=> Move up 1 frame.
18
- up 5 #=> Move up 5 frames.
19
- BANNER
20
-
21
- def process
22
- PryByebug.check_file_context(target)
23
-
24
- frame_navigation :up, times: args.first
25
- end
26
- end
27
-
28
- create_command 'down' do
29
- description 'Move current frame down.'
30
-
31
- banner <<-BANNER
32
- Usage: down [TIMES]
33
-
34
- Move current frame down. By default, moves by 1 frame.
35
-
36
- Examples:
37
- down #=> Move down 1 frame.
38
- down 5 #=> Move down 5 frames.
39
- BANNER
40
-
41
- def process
42
- PryByebug.check_file_context(target)
43
-
44
- frame_navigation :down, times: args.first
45
- end
46
- end
47
-
48
- create_command 'frame' do
49
- description 'Move to specified frame #.'
50
-
51
- banner <<-BANNER
52
- Usage: frame [TIMES]
53
-
54
- Move to specified frame #.
55
-
56
- Examples:
57
- frame #=> Show current frame #.
58
- frame 5 #=> Move to frame 5.
59
- BANNER
60
-
61
- def process
62
- PryByebug.check_file_context(target)
63
-
64
- frame_navigation :frame, index: args.first
65
- end
66
- end
67
-
68
- helpers do
69
- def frame_navigation(action, options = {})
70
- _pry_.binding_stack.clear # Clear the binding stack.
71
-
72
- # Break out of the REPL loop and signal tracer
73
- throw :breakout_nav, action: action, options: options, pry: _pry_
74
- end
75
- end
76
- end
77
-
78
- Pry.commands.import(FrameCommands)
79
- end
@@ -1,88 +0,0 @@
1
- #
2
- # Main Pry class.
3
- #
4
- # We're going to add to it custom stepping commands for Pry-Byebug
5
- #
6
- class Pry
7
- SteppingCommands = CommandSet.new do
8
- create_command 'step' do
9
- description 'Step execution into the next line or method.'
10
-
11
- banner <<-BANNER
12
- Usage: step [TIMES]
13
-
14
- Step execution forward. By default, moves a single step.
15
-
16
- Examples:
17
- step #=> Move a single step forward.
18
- step 5 #=> Execute the next 5 steps.
19
- BANNER
20
-
21
- def process
22
- PryByebug.check_file_context(target)
23
-
24
- breakout_navigation :step, times: args.first
25
- end
26
- end
27
-
28
- create_command 'next' do
29
- description 'Execute the next line within the current stack frame.'
30
-
31
- banner <<-BANNER
32
- Usage: next [LINES]
33
-
34
- Step over within the same frame. By default, moves forward a single
35
- line.
36
-
37
- Examples:
38
- next #=> Move a single line forward.
39
- next 4 #=> Execute the next 4 lines.
40
- BANNER
41
-
42
- def process
43
- PryByebug.check_file_context(target)
44
-
45
- breakout_navigation :next, lines: args.first
46
- end
47
- end
48
-
49
- create_command 'finish' do
50
- description 'Execute until current stack frame returns.'
51
-
52
- banner <<-BANNER
53
- Usage: finish
54
- BANNER
55
-
56
- def process
57
- PryByebug.check_file_context(target)
58
-
59
- breakout_navigation :finish
60
- end
61
- end
62
-
63
- create_command 'continue' do
64
- description 'Continue program execution and end the Pry session.'
65
-
66
- banner <<-BANNER
67
- Usage: continue
68
- BANNER
69
-
70
- def process
71
- PryByebug.check_file_context(target)
72
-
73
- breakout_navigation :continue
74
- end
75
- end
76
-
77
- helpers do
78
- def breakout_navigation(action, options = {})
79
- _pry_.binding_stack.clear # Clear the binding stack.
80
-
81
- # Break out of the REPL loop and signal tracer
82
- throw :breakout_nav, action: action, options: options, pry: _pry_
83
- end
84
- end
85
- end
86
-
87
- Pry.commands.import(SteppingCommands)
88
- end
@@ -1,23 +0,0 @@
1
- require File.dirname(__FILE__) + '/lib/pry-byebug/version'
2
-
3
- Gem::Specification.new do |gem|
4
- gem.name = 'pry-byebug'
5
- gem.version = PryByebug::VERSION
6
- gem.authors = ['David Rodríguez', 'Gopal Patel']
7
- gem.email = 'deivid.rodriguez@gmail.com'
8
- gem.license = 'MIT'
9
- gem.homepage = 'https://github.com/deivid-rodriguez/pry-byebug'
10
- gem.summary = 'Fast debugging with Pry.'
11
- gem.description = "Combine 'pry' with 'byebug'. Adds 'step', 'next',
12
- 'finish', 'continue' and 'break' commands to control execution."
13
-
14
- gem.files = `git ls-files`.split("\n")
15
- gem.test_files = `git ls-files -- test/*`.split("\n")
16
- gem.require_paths = ['lib']
17
-
18
- # Dependencies
19
- gem.required_ruby_version = '>= 2.0.0'
20
-
21
- gem.add_runtime_dependency 'pry', '~> 0.10'
22
- gem.add_runtime_dependency 'byebug', '~> 4.0'
23
- end
@@ -1,16 +0,0 @@
1
- require 'test_helper'
2
-
3
- #
4
- # Checks current pry-byebug's context.
5
- #
6
- class BaseTest < MiniTest::Spec
7
- def test_main_file_context
8
- Pry.stubs eval_path: '<main>'
9
- assert PryByebug.file_context?(TOPLEVEL_BINDING)
10
- end
11
-
12
- def test_other_file_context
13
- Pry.stubs eval_path: 'something'
14
- refute PryByebug.file_context?(TOPLEVEL_BINDING)
15
- end
16
- end
@@ -1,146 +0,0 @@
1
- require 'test_helper'
2
-
3
- #
4
- # Tests for pry-byebug breakpoints.
5
- #
6
- class BreakpointsTestGeneral < MiniTest::Spec
7
- #
8
- # Minimal dummy example class.
9
- #
10
- class Tester
11
- def self.class_method; end
12
- def instance_method; end
13
- end
14
-
15
- def breakpoints_class
16
- Pry::Byebug::Breakpoints
17
- end
18
-
19
- def test_add_file_raises_argument_error
20
- Pry.stubs eval_path: 'something'
21
- File.stubs :exist?
22
- assert_raises(ArgumentError) do
23
- breakpoints_class.add_file('file', 1)
24
- end
25
- end
26
-
27
- def test_add_method_adds_instance_method_breakpoint
28
- Pry.stub :processor, Byebug::PryProcessor.new do
29
- breakpoints_class.add_method 'BreakpointsTest::Tester#instance_method'
30
- bp = Byebug.breakpoints.last
31
- assert_equal 'BreakpointsTest::Tester', bp.source
32
- assert_equal 'instance_method', bp.pos
33
- end
34
- end
35
-
36
- def test_add_method_adds_class_method_breakpoint
37
- Pry.stub :processor, Byebug::PryProcessor.new do
38
- breakpoints_class.add_method 'BreakpointsTest::Tester.class_method'
39
- bp = Byebug.breakpoints.last
40
- assert_equal 'BreakpointsTest::Tester', bp.source
41
- assert_equal 'class_method', bp.pos
42
- end
43
- end
44
- end
45
-
46
- #
47
- # Some common specs for breakpoints
48
- #
49
- module BreakpointSpecs
50
- def test_shows_breakpoint_enabled
51
- @output.string.must_match @regexp
52
- end
53
-
54
- def test_shows_breakpoint_hit
55
- result = @output.string
56
- result.must_match(@regexp)
57
- match = result.match(@regexp)
58
- result.must_match(/^ Breakpoint #{match[:id]}\. First hit/)
59
- end
60
-
61
- def test_shows_breakpoint_line
62
- @output.string.must_match(/\=> \s*#{@line}:/)
63
- end
64
- end
65
-
66
- #
67
- # Tests for breakpoint commands
68
- #
69
- class BreakpointsTestCommands < Minitest::Spec
70
- let(:break_first_file) { test_file('break1') }
71
- let(:break_second_file) { test_file('break2') }
72
-
73
- before do
74
- Pry.color, Pry.pager, Pry.hooks = false, false, Pry::DEFAULT_HOOKS
75
- @input = InputTester.new 'break --delete-all'
76
- redirect_pry_io(@input, StringIO.new) do
77
- binding.pry # rubocop:disable Lint/Debugger
78
- end
79
- Object.send :remove_const, :Break1Example if defined? Break1Example
80
- Object.send :remove_const, :Break2Example if defined? Break2Example
81
- @output = StringIO.new
82
- end
83
-
84
- describe 'Set Breakpoints' do
85
- describe 'set by line number' do
86
- before do
87
- @input = InputTester.new('break 6')
88
- redirect_pry_io(@input, @output) { load break_first_file }
89
- @line = 6
90
- @regexp = / Breakpoint (?<id>\d+): #{break_first_file} @ 6 \(Enabled\)/
91
- end
92
-
93
- include BreakpointSpecs
94
- end
95
-
96
- describe 'set by method_id' do
97
- before do
98
- @input = InputTester.new('break Break1Example#a')
99
- redirect_pry_io(@input, @output) { load break_first_file }
100
- @line = 5
101
- @regexp = / Breakpoint (?<id>\d+): Break1Example#a \(Enabled\)/
102
- end
103
-
104
- include BreakpointSpecs
105
- end
106
-
107
- describe 'set by method_id when its a bang method' do
108
- before do
109
- @input = InputTester.new('break Break1Example#c!')
110
- redirect_pry_io(@input, @output) { load break_first_file }
111
- @line = 15
112
- @regexp = / Breakpoint (?<id>\d+): Break1Example#c! \(Enabled\)/
113
- end
114
-
115
- include BreakpointSpecs
116
- end
117
-
118
- describe 'set by method_id within context' do
119
- before do
120
- @input = InputTester.new('break #b')
121
- redirect_pry_io(@input, @output) { load break_second_file }
122
- @line = 7
123
- @regexp = / Breakpoint (?<id>\d+): Break2Example#b \(Enabled\)/
124
- end
125
-
126
- include BreakpointSpecs
127
- end
128
- end
129
-
130
- describe 'List breakpoints' do
131
- before do
132
- @input = InputTester.new('break #b', 'breakpoints')
133
- redirect_pry_io(@input, @output) { load break_second_file }
134
- end
135
-
136
- it 'shows all breakpoints' do
137
- @output.string.must_match(/Yes \s*Break2Example#b/)
138
- end
139
-
140
- it 'properly aligns headers' do
141
- width = Byebug.breakpoints.last.id.to_s.length
142
- @output.string.must_match(/ {#{width - 1}}# Enabled At/)
143
- @output.string.must_match(/ \d{#{width}} Yes Break2Example#b/)
144
- end
145
- end
146
- end
@@ -1,23 +0,0 @@
1
- #
2
- # A toy example for testing break commands.
3
- #
4
- class Break1Example
5
- def a
6
- z = 2
7
- z + b
8
- end
9
-
10
- def b
11
- z = 5
12
- z + c!
13
- end
14
-
15
- def c!
16
- z = 4
17
- z
18
- end
19
- end
20
-
21
- binding.pry
22
-
23
- Break1Example.new.a
@@ -1,21 +0,0 @@
1
- #
2
- # Another toy example for testing break commands.
3
- #
4
- class Break2Example
5
- def a
6
- binding.pry
7
- z = 2
8
- z + b
9
- end
10
-
11
- def b
12
- c
13
- end
14
-
15
- def c
16
- z = 4
17
- z + 5
18
- end
19
- end
20
-
21
- Break2Example.new.a
@@ -1,9 +0,0 @@
1
- #
2
- # Toy program for testing binding.pry initialization
3
- #
4
-
5
- new_str = 'string'.gsub!(/str/) do |_|
6
- binding.pry
7
- end
8
-
9
- _foo = new_str
@@ -1,14 +0,0 @@
1
- #
2
- # Toy class for testing frame commands
3
- #
4
- class Frames
5
- def method_a
6
- method_b
7
- end
8
-
9
- def method_b
10
- binding.pry
11
- end
12
- end
13
-
14
- Frames.new.method_a
@@ -1,29 +0,0 @@
1
- binding.pry
2
-
3
- #
4
- # Toy class for testing steps
5
- #
6
- class SteppingExample
7
- def method_a
8
- z = 2
9
- z + method_b
10
- end
11
-
12
- def method_b
13
- c = Math::PI / 2
14
- c += method_c
15
- c + 1
16
- end
17
-
18
- def method_c
19
- z = 4
20
- z
21
- end
22
- end
23
-
24
- ex = SteppingExample.new.method_a
25
- 2.times do
26
- ex += 1
27
- end
28
-
29
- _foo = ex