pry 0.7.6.1 → 0.7.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -247,7 +247,8 @@ If you want to access a method of the same name, prefix the invocation by whites
247
247
  getting you out of a situation where the parsing process
248
248
  goes wrong and you get stuck in an endless read loop.
249
249
  * `status` shows status information about the current session.
250
- * `whereami` shows the code context of the session.
250
+ * `whereami AROUND` shows the code context of the session. Shows
251
+ AROUND lines either side of the current line.
251
252
  * `version` Show Pry version information
252
253
  * `help` shows the list of session commands with brief explanations.
253
254
  * `toggle-color` turns on and off syntax highlighting.
data/lib/pry.rb CHANGED
@@ -4,7 +4,6 @@
4
4
  direc = File.dirname(__FILE__)
5
5
 
6
6
  $LOAD_PATH << File.expand_path(direc)
7
- $LOAD_PATH << "."
8
7
 
9
8
  require "method_source"
10
9
  require 'shellwords'
@@ -4,7 +4,11 @@ require "pry/command_base"
4
4
  require "pry/pry_instance"
5
5
 
6
6
  begin
7
- require "pry-doc"
7
+
8
+ # YARD crashes on rbx, so do not require it
9
+ if !Object_const_defined?(:RUBY_ENGINE) || RUBY_ENGINE !~ /rbx/
10
+ require "pry-doc"
11
+ end
8
12
  rescue LoadError
9
13
  end
10
14
 
@@ -469,11 +473,19 @@ e.g: eval-file -c self "hello.rb"
469
473
  gsub(/\B\+(\w*?)\+\B/) { Pry.color ? "\e[32m#{$1}\e[0m": $1 }.
470
474
  gsub(/((?:^[ \t]+.+(?:\n+|\Z))+)/) { Pry.color ? CodeRay.scan($1, code_type).term : $1 }.
471
475
  gsub(/`(?:\s*\n)?(.*?)\s*`/) { Pry.color ? CodeRay.scan($1, code_type).term : $1 }.
472
- gsub(/(@param|@return)/) { Pry.color ? "\e[32m#{$1}\e[0m": $1 }
476
+ gsub(/^@(param|return|example|option|yield|attr|attr_reader|attr_writer)/) { Pry.color ? "\e[33m#{$1}\e[0m": $1 }
477
+ end
478
+
479
+ # strip leading whitespace but preserve indentation
480
+ strip_leading_whitespace = lambda do |text|
481
+ leading_spaces = text.lines.first[/^(\s+)/, 1]
482
+ text.gsub(/^#{leading_spaces}/, '')
473
483
  end
474
484
 
475
- strip_leading_hash_from_ruby_comments = lambda do |comment|
476
- comment.gsub /^\s*#\s*/, ''
485
+ strip_leading_hash_and_whitespace_from_ruby_comments = lambda do |comment|
486
+ comment = comment.dup
487
+ comment.gsub!(/^\s*#/, '')
488
+ strip_leading_whitespace.call(comment)
477
489
  end
478
490
 
479
491
  command "show-doc", "Show the comments above METH. Type `show-doc --help` for more info." do |*args|
@@ -521,7 +533,7 @@ e.g show-doc hello_method
521
533
  doc = Pry::MethodInfo.info_for(meth).docstring
522
534
  when :ruby
523
535
  doc = meth.comment
524
- doc = strip_leading_hash_from_ruby_comments.call(doc)
536
+ doc = strip_leading_hash_and_whitespace_from_ruby_comments.call(doc)
525
537
  end
526
538
 
527
539
  doc = process_comment_markup.call(doc, code_type)
@@ -581,7 +593,7 @@ e.g: show-method hello_method
581
593
  code = Pry::MethodInfo.info_for(meth).source
582
594
  code = strip_comments_from_c_code.call(code)
583
595
  when :ruby
584
- code = meth.source
596
+ code = strip_leading_whitespace.call(meth.source)
585
597
  end
586
598
 
587
599
  output.puts make_header.call(meth, code_type)
@@ -604,7 +616,7 @@ e.g: show-method hello_method
604
616
  if commands[command_name]
605
617
  meth = commands[command_name][:action]
606
618
 
607
- code = meth.source
619
+ code = strip_leading_whitespace.call(meth.source)
608
620
  file, line = meth.source_location
609
621
  check_for_dynamically_defined_method.call(meth)
610
622
 
@@ -15,11 +15,9 @@ class Pry
15
15
  # @param [Hash] options The optional configuration parameters.
16
16
  # @option options [#readline] :input The object to use for input.
17
17
  # @option options [#puts] :output The object to use for output.
18
- # @option options [Pry::CommandBase] :commands The object to use for
19
- # commands. (see commands.rb)
18
+ # @option options [Pry::CommandBase] :commands The object to use for commands. (see commands.rb)
20
19
  # @option options [Hash] :hooks The defined hook Procs (see hooks.rb)
21
- # @option options [Array<Proc>] :default_prompt The array of Procs
22
- # to use for the prompts. (see prompts.rb)
20
+ # @option options [Array<Proc>] :default_prompt The array of Procs to use for the prompts. (see prompts.rb)
23
21
  # @option options [Proc] :print The Proc to use for the 'print'
24
22
  # component of the REPL. (see print.rb)
25
23
  def initialize(options={})
@@ -184,31 +182,48 @@ class Pry
184
182
  eval_string = ""
185
183
 
186
184
  loop do
187
- current_prompt = select_prompt(eval_string.empty?, target.eval('self'))
188
-
189
- val = readline(current_prompt)
190
-
191
- # exit pry if we receive EOF character
192
- if !val
193
- output.puts
194
- throw(:breakout, nesting.level)
195
- end
196
-
197
- val.chomp!
198
-
199
- Pry.cmd_ret_value = process_commands(val, eval_string, target)
185
+ val = retrieve_line(eval_string, target)
186
+ process_line(val, eval_string, target)
187
+ break eval_string if valid_expression?(eval_string)
188
+ end
189
+ end
200
190
 
201
- if Pry.cmd_ret_value
202
- eval_string << "Pry.cmd_ret_value\n"
203
- else
204
- eval_string << "#{val}\n"
205
- end
191
+ # Read a line of input and check for ^d, also determine prompt to use.
192
+ # This method should not need to be invoked directly.
193
+ # @param [String] eval_string The cumulative lines of input.
194
+ # @param [Binding] target The target of the session.
195
+ # @return [String] The line received.
196
+ def retrieve_line(eval_string, target)
197
+ current_prompt = select_prompt(eval_string.empty?, target.eval('self'))
198
+ val = readline(current_prompt)
199
+
200
+ # exit session if we receive EOF character
201
+ if !val
202
+ output.puts
203
+ throw(:breakout, nesting.level)
204
+ end
205
+
206
+ val
207
+ end
206
208
 
207
- break eval_string if valid_expression?(eval_string)
209
+ # Process the line received.
210
+ # This method should not need to be invoked directly.
211
+ # @param [String] val The line to process.
212
+ # @param [String] eval_string The cumulative lines of input.
213
+ # @target [Binding] target The target of the Pry session.
214
+ def process_line(val, eval_string, target)
215
+ val.chomp!
216
+ Pry.cmd_ret_value = process_commands(val, eval_string, target)
217
+
218
+ if Pry.cmd_ret_value
219
+ eval_string << "Pry.cmd_ret_value\n"
220
+ else
221
+ eval_string << "#{val}\n"
208
222
  end
209
223
  end
210
224
 
211
225
  # Set the last result of an eval.
226
+ # This method should not need to be invoked directly.
212
227
  # @param [Object] result The result.
213
228
  # @param [Binding] target The binding to set `_` on.
214
229
  def set_last_result(result, target)
@@ -217,6 +232,7 @@ class Pry
217
232
  end
218
233
 
219
234
  # Set the last exception for a session.
235
+ # This method should not need to be invoked directly.
220
236
  # @param [Exception] ex The exception.
221
237
  # @param [Binding] target The binding to set `_ex_` on.
222
238
  def set_last_exception(ex, target)
@@ -224,6 +240,19 @@ class Pry
224
240
  target.eval("_ex_ = Pry.last_exception")
225
241
  end
226
242
 
243
+ # Determine whether a Pry command was matched and return command data
244
+ # and argument string.
245
+ # This method should not need to be invoked directly.
246
+ # @param [String] val The line of input.
247
+ # @return [Array] The command data and arg string pair
248
+ def command_matched(val)
249
+ _, cmd_data = commands.commands.find do |name, cmd_data|
250
+ /^#{name}(?!\S)(?:\s+(.+))?/ =~ val
251
+ end
252
+
253
+ [cmd_data, $1]
254
+ end
255
+
227
256
  # Process Pry commands. Pry commands are not Ruby methods and are evaluated
228
257
  # prior to Ruby expressions.
229
258
  # Commands can be modified/configured by the user: see `Pry::Commands`
@@ -237,14 +266,11 @@ class Pry
237
266
  def val.clear() replace("") end
238
267
  def eval_string.clear() replace("") end
239
268
 
240
- pattern, cmd_data = commands.commands.find do |name, cmd_data|
241
- /^#{name}(?!\S)(?:\s+(.+))?/ =~ val
242
- end
269
+ cmd_data, args_string = command_matched(val)
243
270
 
244
271
  # no command was matched, so return to caller
245
- return if !pattern
272
+ return if !cmd_data
246
273
 
247
- args_string = $1
248
274
  args = args_string ? Shellwords.shellwords(args_string) : []
249
275
  action = cmd_data[:action]
250
276
  keep_retval = cmd_data[:keep_retval]
@@ -256,6 +282,20 @@ class Pry
256
282
  :commands => commands.commands
257
283
  }
258
284
 
285
+ ret_value = execute_command(target, action, options, *args)
286
+
287
+ # return value of block only if :keep_retval is true
288
+ ret_value if keep_retval
289
+ end
290
+
291
+ # Execute a Pry command.
292
+ # This method should not need to be invoked directly.
293
+ # @param [Binding] target The target of the Pry session.
294
+ # @param [Proc] action The proc that implements the command.
295
+ # @param [Hash] options The options to set on the Commands object.
296
+ # @param [Array] args The command arguments.
297
+ def execute_command(target, action, options, *args)
298
+
259
299
  # set some useful methods to be used by the action blocks
260
300
  commands.opts = options
261
301
  commands.target = target
@@ -265,21 +305,19 @@ class Pry
265
305
  when -1
266
306
 
267
307
  # Use instance_exec() to make the `opts` method, etc available
268
- ret_value = commands.instance_exec(*args, &action)
308
+ ret_val = commands.instance_exec(*args, &action)
269
309
  when 1, 0
270
310
 
271
311
  # ensure that we get the right number of parameters
272
312
  # since 1.8.7 complains about incorrect arity (1.9.2
273
313
  # doesn't care)
274
314
  args_with_corrected_arity = args.values_at *0..(action.arity - 1)
275
- ret_value = commands.instance_exec(*args_with_corrected_arity, &action)
315
+ ret_val = commands.instance_exec(*args_with_corrected_arity, &action)
276
316
  end
277
-
278
- # a command was processed so we can now clear the input string
279
- val.clear
280
317
 
281
- # return value of block only if :keep_retval is true
282
- ret_value if keep_retval
318
+ options[:val].clear
319
+
320
+ ret_val
283
321
  end
284
322
 
285
323
  # Returns the next line of input to be used by the pry instance.
@@ -1,3 +1,3 @@
1
1
  class Pry
2
- VERSION = "0.7.6.1"
2
+ VERSION = "0.7.7"
3
3
  end
metadata CHANGED
@@ -5,9 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 7
8
- - 6
9
- - 1
10
- version: 0.7.6.1
8
+ - 7
9
+ version: 0.7.7
11
10
  platform: ruby
12
11
  authors:
13
12
  - John Mair (banisterfiend)
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2011-03-26 00:00:00 +13:00
17
+ date: 2011-04-01 00:00:00 +13:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency