pry-byebug 1.3.3 → 2.0.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
  SHA1:
3
- metadata.gz: 4f013e909a35fa66f73ddf492ea5cdce24662fdb
4
- data.tar.gz: d9e323fd262e0148ec80dc58e2e526d6d51bb693
3
+ metadata.gz: 8123f22dc42ff24f284f47d77bdf74679b8025c2
4
+ data.tar.gz: 1803eaf3cc4e019e64ce84835bb0a288cef8cebe
5
5
  SHA512:
6
- metadata.gz: a9afd2397a50060b37d1692a98cbde10cbb0eb1cbb7bd8c566fb5d29cf0d4d2ba3530299745b2edca7779531c6ccdfad39c8d76eae9bf33c1cc5494a75895300
7
- data.tar.gz: b87b20290a1c94642ef1bc0995ce055b1e0a96e65725bdbab4630f807aa7bb3237a0b1ccc906c43f086f69f1241dab604b3a40c6c259328f143e9a207fcf7bf6
6
+ metadata.gz: eecedab14af1c1eddfc82d5828a4418a239691b6ef27f67e4340458054e0646edd049ded5cde2dc1ef10efe72bf2abb70b4c759a1145710c2e25b9e59b3faeec
7
+ data.tar.gz: 33135d020dc22bf50e1a8f57b39a5dce8f5e8c1373cd8f380500a210b8199bf05a5c90084f286c2d003b2379703e025fe63d80465b2007dfa3d10b68849a0495
@@ -0,0 +1,2 @@
1
+ Lint/Debugger:
2
+ Enabled: false
@@ -1,3 +1,12 @@
1
+ ## 2.0.0 (2014-01-09)
2
+
3
+ - Improvements:
4
+ * Compatibility with byebug 3
5
+ * Now pry starts at the first line after binding.pry, not at binding.pry
6
+ - Bugfixes:
7
+ * 'continue' doesn't finish pry instance (issue #13)
8
+
9
+
1
10
  ## 1.3.3 (2014-25-06)
2
11
 
3
12
  * Relaxes pry dependency to support pry 0.10 series and further minor version
data/Gemfile CHANGED
@@ -2,8 +2,13 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'rake', '~> 10.2'
5
+ gem 'rake', '~> 10.3'
6
6
 
7
- group :development, :test do
8
- gem 'mocha', '~> 1.0'
7
+ group :development do
8
+ gem 'rubocop', '~> 0.25'
9
+ end
10
+
11
+ group :test do
12
+ gem 'mocha', '~> 1.1'
13
+ gem 'minitest', '~> 5.4'
9
14
  end
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
- pry-byebug [![Gem Version][1]][2] [![Build Status][3]][4]
2
- ============
1
+ # pry-byebug
2
+ [![Version][VersionBadge]][VersionURL]
3
+ [![Build][TravisBadge]][TravisURL]
4
+ [![Gittip][GittipBadge]][GittipURL]
3
5
 
4
6
  _Fast execution control in Pry_
5
7
 
@@ -15,9 +17,6 @@ def some_method
15
17
  end
16
18
  ```
17
19
 
18
- For a complete debugging environment, add
19
- [pry-stack_explorer][pry-stack_explorer] for call-stack frame navigation.
20
-
21
20
 
22
21
  ## Installation
23
22
 
@@ -59,25 +58,24 @@ conditional breakpoint. Edit existing breakpoints via various flags.
59
58
 
60
59
  Examples:
61
60
 
62
- ```
63
- break SomeClass#run Break at the start of `SomeClass#run`.
64
- break Foo#bar if baz? Break at `Foo#bar` only if `baz?`.
65
- break app/models/user.rb:15 Break at line 15 in user.rb.
66
- break 14 Break at line 14 in the current file.
61
+ ```ruby
62
+ break SomeClass#run # Break at the start of `SomeClass#run`.
63
+ break Foo#bar if baz? # Break at `Foo#bar` only if `baz?`.
64
+ break app/models/user.rb:15 # Break at line 15 in user.rb.
65
+ break 14 # Break at line 14 in the current file.
67
66
 
68
- break --condition 4 x > 2 Change condition on breakpoint #4 to 'x > 2'.
69
- break --condition 3 Remove the condition on breakpoint #3.
67
+ break --condition 4 x > 2 # Change condition on breakpoint #4 to 'x > 2'.
68
+ break --condition 3 # Remove the condition on breakpoint #3.
70
69
 
71
- break --delete 5 Delete breakpoint #5.
72
- break --disable-all Disable all breakpoints.
70
+ break --delete 5 # Delete breakpoint #5.
71
+ break --disable-all # Disable all breakpoints.
73
72
 
74
- break List all breakpoints. (Same as `breakpoints`)
75
- break --show 2 Show details about breakpoint #2.
73
+ break # List all breakpoints. (Same as `breakpoints`)
74
+ break --show 2 # Show details about breakpoint #2.
76
75
  ```
77
76
 
78
77
  Type `break --help` from a Pry session to see all available options.
79
78
 
80
-
81
79
  **breakpoints**: List all defined breakpoints. Pass `-v` or `--verbose` to see
82
80
  the source code around each breakpoint.
83
81
 
@@ -88,28 +86,22 @@ Only supports MRI 2.0.0 or newer. For MRI 1.9.3 or older, use
88
86
  [pry-debugger][pry-debugger]
89
87
 
90
88
 
91
- ## Contributors
89
+ ## Credits
92
90
 
93
- * Tee Parham (@teeparham)
94
- * Gopal Patel (@nixme)
95
- * John Mair (@banister)
96
- * Nicolas Viennot (@nviennot)
97
- * Benjamin R. Haskell (@benizi)
98
- * Joshua Hou (@jshou)
99
- * ...and others who helped with [pry-nav][pry-nav]
91
+ * Gopal Patel (@nixme), creator of [pry-debugger][pry-debugger], and everybody
92
+ who contributed to it. pry-byebug is a fork of pry-debugger so it wouldn't
93
+ exist as it is without those contributions.
94
+ * John Mair (@banister), creator of [pry][pry].
100
95
 
101
- Patches and bug reports are welcome. Just send a [pull request][pullrequests] or
102
- file an [issue][issues]. [Project changelog][changelog].
96
+ Patches and bug reports are welcome.
103
97
 
104
- [pry]: http://pry.github.com
105
- [byebug]: https://github.com/deivid-rodriguez/byebug
106
- [pry-debugger]: https://github.com/nixme/pry-debugger
98
+ [pry]: http://pry.github.com
99
+ [byebug]: https://github.com/deivid-rodriguez/byebug
100
+ [pry-debugger]: https://github.com/nixme/pry-debugger
107
101
  [pry-stack_explorer]: https://github.com/pry/pry-stack_explorer
108
- [pullrequests]: https://github.com/deivid-rodriguez/pry-byebug/pulls
109
- [issues]: https://github.com/deivid-rodriguez/pry-byebug/issues
110
- [changelog]: https://github.com/deivid-rodriguez/pry-byebug/blob/master/CHANGELOG.md
111
- [pry-nav]: https://github.com/nixme/pry-nav
112
- [1]: https://badge.fury.io/rb/pry-byebug.png
113
- [2]: http://badge.fury.io/rb/pry-byebug
114
- [3]: https://secure.travis-ci.org/deivid-rodriguez/pry-byebug.png
115
- [4]: http://travis-ci.org/deivid-rodriguez/pry-byebug
102
+ [VersionBadge]: https://badge.fury.io/rb/pry-byebug.png
103
+ [VersionURL]: http://badge.fury.io/rb/pry-byebug
104
+ [TravisBadge]: https://secure.travis-ci.org/deivid-rodriguez/pry-byebug.png
105
+ [TravisURL]: http://travis-ci.org/deivid-rodriguez/pry-byebug
106
+ [GittipBadge]: http://img.shields.io/gittip/deivid-rodriguez.svg
107
+ [GittipURL]: https://www.gittip.com/deivid-rodriguez
@@ -1,12 +1,12 @@
1
1
  module PryByebug
2
- extend self
3
-
2
+ #
4
3
  # Checks that a binding is in a local file context. Extracted from
5
- # https://github.com/pry/pry/blob/master/lib/pry/default_commands/context.rb
4
+ #
6
5
  def check_file_context(target)
7
6
  file = target.eval('__FILE__')
8
- file == Pry.eval_path || (file !~ /(\(.*\))|<.*>/ && file != '' && file != '-e')
7
+ file == Pry.eval_path || !Pry::Helpers::BaseHelpers.not_a_real_file?(file)
9
8
  end
9
+ module_function :check_file_context
10
10
 
11
11
  # Reference to currently running pry-remote server. Used by the processor.
12
12
  attr_accessor :current_remote_server
@@ -1,5 +1,5 @@
1
1
  module PryByebug
2
-
2
+ #
3
3
  # Wrapper for Byebug.breakpoints that respects our Processor and has better
4
4
  # failure behavior. Acts as an Enumerable.
5
5
  #
@@ -7,6 +7,9 @@ module PryByebug
7
7
  extend Enumerable
8
8
  extend self
9
9
 
10
+ #
11
+ # Breakpoint in a file:line location
12
+ #
10
13
  class FileBreakpoint < SimpleDelegator
11
14
  def source_code
12
15
  Pry::Code.from_file(source).around(pos, 3).with_marker(pos)
@@ -17,6 +20,9 @@ module PryByebug
17
20
  end
18
21
  end
19
22
 
23
+ #
24
+ # Breakpoint in a Class#method location
25
+ #
20
26
  class MethodBreakpoint < SimpleDelegator
21
27
  def initialize(byebug_bp, method)
22
28
  __setobj__ byebug_bp
@@ -36,32 +42,35 @@ module PryByebug
36
42
  @breakpoints ||= []
37
43
  end
38
44
 
39
- # Add method breakpoint.
45
+ #
46
+ # Adds a method breakpoint.
47
+ #
40
48
  def add_method(method, expression = nil)
41
49
  validate_expression expression
42
- Pry.processor.debugging = true
43
50
  owner, name = method.split(/[\.#]/)
44
- byebug_bp = Byebug.add_breakpoint(owner, name.to_sym, expression)
51
+ byebug_bp = Byebug::Breakpoint.add(owner, name.to_sym, expression)
45
52
  bp = MethodBreakpoint.new byebug_bp, method
46
53
  breakpoints << bp
47
54
  bp
48
55
  end
49
56
 
50
- # Add file breakpoint.
57
+ #
58
+ # Adds a file breakpoint.
59
+ #
51
60
  def add_file(file, line, expression = nil)
52
61
  real_file = (file != Pry.eval_path)
53
- raise ArgumentError, 'Invalid file!' if real_file && !File.exist?(file)
62
+ fail(ArgumentError, 'Invalid file!') if real_file && !File.exist?(file)
54
63
  validate_expression expression
55
64
 
56
- Pry.processor.debugging = true
57
-
58
65
  path = (real_file ? File.expand_path(file) : file)
59
- bp = FileBreakpoint.new Byebug.add_breakpoint(path, line, expression)
66
+ bp = FileBreakpoint.new Byebug::Breakpoint.add(path, line, expression)
60
67
  breakpoints << bp
61
68
  bp
62
69
  end
63
70
 
64
- # Change the conditional expression for a breakpoint.
71
+ #
72
+ # Changes the conditional expression for a breakpoint.
73
+ #
65
74
  def change(id, expression = nil)
66
75
  validate_expression expression
67
76
 
@@ -70,33 +79,40 @@ module PryByebug
70
79
  breakpoint
71
80
  end
72
81
 
73
- # Delete an existing breakpoint with the given ID.
82
+ #
83
+ # Deletes an existing breakpoint with the given ID.
84
+ #
74
85
  def delete(id)
75
- deleted = Byebug.started? &&
76
- Byebug.remove_breakpoint(id) &&
77
- breakpoints.delete(find_by_id(id))
78
- raise ArgumentError, "No breakpoint ##{id}" if not deleted
79
- Pry.processor.debugging = false if to_a.empty?
86
+ deleted = Byebug.started? &&
87
+ Byebug::Breakpoint.remove(id) && breakpoints.delete(find_by_id(id))
88
+ fail(ArgumentError, "No breakpoint ##{id}") unless deleted
80
89
  end
81
90
 
82
- # Delete all breakpoints.
83
- def clear
91
+ #
92
+ # Deletes all breakpoints.
93
+ #
94
+ def delete_all
84
95
  @breakpoints = []
85
96
  Byebug.breakpoints.clear if Byebug.started?
86
- Pry.processor.debugging = false
87
97
  end
88
98
 
89
- # Enable a disabled breakpoint with the given ID.
99
+ #
100
+ # Enables a disabled breakpoint with the given ID.
101
+ #
90
102
  def enable(id)
91
103
  change_status id, true
92
104
  end
93
105
 
94
- # Disable a breakpoint with the given ID.
106
+ #
107
+ # Disables a breakpoint with the given ID.
108
+ #
95
109
  def disable(id)
96
110
  change_status id, false
97
111
  end
98
112
 
99
- # Disable all breakpoints.
113
+ #
114
+ # Disables all breakpoints.
115
+ #
100
116
  def disable_all
101
117
  each do |breakpoint|
102
118
  breakpoint.enabled = false
@@ -117,12 +133,11 @@ module PryByebug
117
133
 
118
134
  def find_by_id(id)
119
135
  breakpoint = find { |b| b.id == id }
120
- raise ArgumentError, "No breakpoint ##{id}!" unless breakpoint
136
+ fail(ArgumentError, "No breakpoint ##{id}!") unless breakpoint
121
137
  breakpoint
122
138
  end
123
139
 
124
-
125
- private
140
+ private
126
141
 
127
142
  def change_status(id, enabled = true)
128
143
  breakpoint = find_by_id(id)
@@ -130,11 +145,10 @@ module PryByebug
130
145
  breakpoint
131
146
  end
132
147
 
133
- def validate_expression(expression)
134
- if expression && # `nil` implies no expression given, so pass
135
- (expression.empty? || !Pry::Code.complete_expression?(expression))
136
- raise "Invalid breakpoint conditional: #{expression}"
137
- end
148
+ def validate_expression(exp)
149
+ return unless exp && (exp.empty? || !Pry::Code.complete_expression?(exp))
150
+
151
+ fail("Invalid breakpoint conditional: #{expression}")
138
152
  end
139
153
  end
140
154
  end
@@ -1 +1 @@
1
- require 'pry-byebug'
1
+ require 'pry-byebug'
@@ -1,6 +1,9 @@
1
1
  require 'pry'
2
2
  require 'pry-byebug/breakpoints'
3
3
 
4
+ #
5
+ # Container for all of pry-byebug's functionality
6
+ #
4
7
  module PryByebug
5
8
  Commands = Pry::CommandSet.new do
6
9
  create_command 'step' do
@@ -73,7 +76,7 @@ module PryByebug
73
76
 
74
77
  def process
75
78
  check_file_context
76
- run 'exit-all'
79
+ breakout_navigation :continue
77
80
  end
78
81
  end
79
82
  alias_command 'c', 'continue'
@@ -95,91 +98,100 @@ module PryByebug
95
98
 
96
99
  Examples:
97
100
 
98
- break SomeClass#run Break at the start of `SomeClass#run`.
99
- break Foo#bar if baz? Break at `Foo#bar` only if `baz?`.
100
- break app/models/user.rb:15 Break at line 15 in user.rb.
101
- break 14 Break at line 14 in the current file.
101
+ break SomeClass#run Break at the start of `SomeClass#run`.
102
+ break Foo#bar if baz? Break at `Foo#bar` only if `baz?`.
103
+ break app/models/user.rb:15 Break at line 15 in user.rb.
104
+ break 14 Break at line 14 in the current file.
102
105
 
103
- break --condition 4 x > 2 Add/change condition on breakpoint #4.
104
- break --condition 3 Remove the condition on breakpoint #3.
106
+ break --condition 4 x > 2 Add/change condition on breakpoint #4.
107
+ break --condition 3 Remove the condition on breakpoint #3.
105
108
 
106
- break --delete 5 Delete breakpoint #5.
107
- break --disable-all Disable all breakpoints.
109
+ break --delete 5 Delete breakpoint #5.
110
+ break --disable-all Disable all breakpoints.
108
111
 
109
- break List all breakpoints. (Same as `breakpoints`)
110
- break --show 2 Show details about breakpoint #2.
112
+ break List all breakpoints.
113
+ break --show 2 Show details about breakpoint #2.
111
114
  BANNER
112
115
 
113
116
  def options(opt)
114
- opt.on :c, :condition, 'Change the condition of a breakpoint.', :argument => true, :as => Integer
115
- opt.on :s, :show, 'Show breakpoint details and source.', :argument => true, :as => Integer
116
- opt.on :D, :delete, 'Delete a breakpoint.', :argument => true, :as => Integer
117
- opt.on :d, :disable, 'Disable a breakpoint.', :argument => true, :as => Integer
118
- opt.on :e, :enable, 'Enable a disabled breakpoint.', :argument => true, :as => Integer
119
- opt.on :'disable-all', 'Disable all breakpoints.'
120
- opt.on :'delete-all', 'Delete all breakpoints.'
121
- method_options(opt)
117
+ defaults = { argument: true, as: Integer }
118
+
119
+ opt.on :c, :condition, 'Change condition of a breakpoint.', defaults
120
+ opt.on :s, :show, 'Show breakpoint details and source.', defaults
121
+ opt.on :D, :delete, 'Delete a breakpoint.', defaults
122
+ opt.on :d, :disable, 'Disable a breakpoint.', defaults
123
+ opt.on :e, :enable, 'Enable a disabled breakpoint.', defaults
124
+ opt.on :'disable-all', 'Disable all breakpoints.'
125
+ opt.on :'delete-all', 'Delete all breakpoints.'
122
126
  end
123
127
 
124
128
  def process
125
- Pry.processor.pry = _pry_
126
-
127
- { :delete => :delete,
128
- :disable => :disable,
129
- :enable => :enable,
130
- :'disable-all' => :disable_all,
131
- :'delete-all' => :clear
132
- }.each do |action, method|
133
- if opts.present?(action)
134
- Breakpoints.__send__ method, *(method == action ? [opts[action]] : [])
135
- return run 'breakpoints'
136
- end
129
+ all = %w(condition show delete disable enable disable-all delete-all)
130
+ all.each do |option|
131
+ next unless opts.present?(option)
132
+
133
+ method_name = "process_#{option.gsub('-', '_')}"
134
+ return send(method_name)
137
135
  end
138
136
 
139
- if opts.present?(:condition)
140
- Breakpoints.change(opts[:condition], args.empty? ? nil : args.join(' '))
137
+ new_breakpoint unless args.empty?
138
+ end
139
+
140
+ %w(delete disable enable).each do |command|
141
+ define_method(:"process_#{command}") do
142
+ Breakpoints.send(command, opts[command])
141
143
  run 'breakpoints'
142
- elsif opts.present?(:show)
143
- print_full_breakpoint Breakpoints.find_by_id(opts[:show])
144
- elsif args.empty?
144
+ end
145
+ end
146
+
147
+ %w(disable-all delete-all).each do |command|
148
+ method_name = command.gsub('-', '_')
149
+ define_method(:"process_#{method_name}") do
150
+ Breakpoints.send(method_name)
145
151
  run 'breakpoints'
146
- else
147
- new_breakpoint
148
152
  end
149
153
  end
150
154
 
155
+ def process_show
156
+ print_full_breakpoint(Breakpoints.find_by_id(opts[:show]))
157
+ end
158
+
159
+ def process_condition
160
+ expr = args.empty? ? nil : args.join(' ')
161
+ Breakpoints.change(opts[:condition], expr)
162
+ end
163
+
151
164
  def new_breakpoint
152
165
  place = args.shift
153
166
  condition = args.join(' ') if 'if' == args.shift
154
167
 
155
168
  bp =
156
169
  case place
157
- when /^(\d+)$/ # Line number only
158
- line = $1
159
- unless PryByebug.check_file_context(target)
160
- raise ArgumentError, 'Line number declaration valid only in a file context.'
161
- end
170
+ when /^(\d+)$/
171
+ line = Regexp.last_match[1]
172
+ errmsg = 'Line number declaration valid only in a file context.'
173
+ check_file_context(errmsg)
174
+
162
175
  Breakpoints.add_file(target.eval('__FILE__'), line.to_i, condition)
163
- when /^(.+):(\d+)$/ # File and line number
164
- Breakpoints.add_file($1, $2.to_i, condition)
176
+ when /^(.+):(\d+)$/
177
+ file, lineno = Regexp.last_match[1], Regexp.last_match[2].to_i
178
+ Breakpoints.add_file(file, lineno, condition)
165
179
  when /^(.*)[.#].+$/ # Method or class name
166
- if $1.strip.empty?
167
- unless PryByebug.check_file_context(target)
168
- raise ArgumentError, 'Method name declaration valid only in a file context.'
169
- end
180
+ if Regexp.last_match[1].strip.empty?
181
+ errmsg = 'Method name declaration valid only in a file context.'
182
+ check_file_context(errmsg)
170
183
  place = target.eval('self.class.to_s') + place
171
184
  end
172
- Breakpoints.add_method(place,condition)
185
+ Breakpoints.add_method(place, condition)
173
186
  else
174
- raise ArgumentError, 'Cannot identify arguments as breakpoint'
187
+ fail(ArgumentError, 'Cannot identify arguments as breakpoint')
175
188
  end
176
189
 
177
- print_full_breakpoint bp
190
+ print_full_breakpoint(bp)
178
191
  end
179
192
  end
180
193
  alias_command 'breakpoint', 'break'
181
194
 
182
-
183
195
  create_command 'breakpoints' do
184
196
  description 'List defined breakpoints.'
185
197
 
@@ -195,27 +207,16 @@ module PryByebug
195
207
  end
196
208
 
197
209
  def process
198
- if Breakpoints.count > 0
199
- if opts.verbose? # Long-form with source output
200
- Breakpoints.each { |b| print_full_breakpoint(b) }
201
- else # Simple table output
202
- max_width = [Math.log10(Breakpoints.count).ceil, 1].max
203
- header = "#{' ' * (max_width - 1)}# Enabled At "
204
-
205
- output.puts
206
- output.puts text.bold(header)
207
- output.puts text.bold('-' * header.size)
208
- Breakpoints.each do |breakpoint|
209
- output.printf "%#{max_width}d ", breakpoint.id
210
- output.print breakpoint.enabled? ? 'Yes ' : 'No '
211
- output.print breakpoint.to_s
212
- output.print " (if #{breakpoint.expr})" if breakpoint.expr
213
- output.puts
214
- end
215
- output.puts
216
- end
210
+ errmsg = 'No breakpoints defined.'
211
+ return output.puts text.bold(errmsg) unless Breakpoints.count > 0
212
+
213
+ if opts.verbose?
214
+ Breakpoints.each { |b| print_full_breakpoint(b) }
217
215
  else
218
- output.puts text.bold('No breakpoints defined.')
216
+ output.puts
217
+ print_breakpoints_header
218
+ Breakpoints.each { |b| print_short_breakpoint(b) }
219
+ output.puts
219
220
  end
220
221
  end
221
222
  end
@@ -224,28 +225,27 @@ module PryByebug
224
225
  helpers do
225
226
  def breakout_navigation(action, times = nil)
226
227
  _pry_.binding_stack.clear # Clear the binding stack.
227
- throw :breakout_nav, { # Break out of the REPL loop and signal tracer
228
- :action => action,
229
- :times => times,
230
- :pry => _pry_
231
- }
228
+
229
+ # Break out of the REPL loop and signal tracer
230
+ throw :breakout_nav, action: action, times: times, pry: _pry_
232
231
  end
233
232
 
234
233
  # Ensures that a command is executed in a local file context.
235
- def check_file_context
236
- unless PryByebug.check_file_context(target)
237
- raise Pry::CommandError, 'Cannot find local context. Did you use `binding.pry`?'
238
- end
234
+ def check_file_context(e = nil)
235
+ e ||= 'Cannot find local context. Did you use `binding.pry`?'
236
+ fail(Pry::CommandError, e) unless PryByebug.check_file_context(target)
239
237
  end
240
238
 
241
- # Print out full information about a breakpoint including surrounding code
242
- # at that point.
239
+ #
240
+ # Print out full information about a breakpoint.
241
+ #
242
+ # Includes surrounding code at that point.
243
+ #
243
244
  def print_full_breakpoint(breakpoint)
244
- line = breakpoint.pos
245
245
  output.print text.bold("Breakpoint #{breakpoint.id}: ")
246
- output.print "#{breakpoint.to_s} "
246
+ output.print "#{breakpoint} "
247
247
  output.print breakpoint.enabled? ? '(Enabled)' : '(Disabled)'
248
- output.puts ' :'
248
+ output.puts ' :'
249
249
  if (expr = breakpoint.expr)
250
250
  output.puts "#{text.bold('Condition:')} #{expr}"
251
251
  end
@@ -253,6 +253,34 @@ module PryByebug
253
253
  output.puts breakpoint.source_code.with_line_numbers.to_s
254
254
  output.puts
255
255
  end
256
+
257
+ #
258
+ # Print out concise information about a breakpoint.
259
+ #
260
+ def print_short_breakpoint(breakpoint)
261
+ output.printf "%#{max_width}d ", breakpoint.id
262
+ output.print breakpoint.enabled? ? 'Yes ' : 'No '
263
+ output.print breakpoint.to_s
264
+ output.print " (if #{breakpoint.expr})" if breakpoint.expr
265
+ output.puts
266
+ end
267
+
268
+ #
269
+ # Prints a header for the breakpoint list.
270
+ #
271
+ def print_breakpoints_header
272
+ header = "#{' ' * (max_width - 1)}# Enabled At "
273
+
274
+ output.puts text.bold(header)
275
+ output.puts text.bold('-' * header.size)
276
+ end
277
+
278
+ #
279
+ # Max width of breakpoints id column
280
+ #
281
+ def max_width
282
+ [Math.log10(Breakpoints.count).ceil, 1].max
283
+ end
256
284
  end
257
285
  end
258
286
  end