added signature to stat and show-doc commands in ruby 1.8; added source file output to stat command

This commit is contained in:
John Mair 2011-09-03 22:37:10 +12:00
parent 3ba8374b36
commit 3c1db5ac2f
2 changed files with 26 additions and 22 deletions

View File

@ -21,6 +21,7 @@
* got rid of Pry.active_instance, Pry.last_exception and friends.
* also special locals now shared among bindings in a pry instance (i.e _ex_ (and friends) re-injected into new binding entered with 'cd')
* added third parameter to prompts, the pry instance itself (_pry) see https://github.com/pry/pry/issues/233 for why it's important
* cd behaviour when no args performs the same as `cd /`
*/7/2011 version 0.9.3
* cat --ex (cats 5 lines above and below line in file where exception was raised)

View File

@ -43,10 +43,8 @@ class Pry
doc = process_comment_markup(doc, code_type)
output.puts make_header(meth, code_type, doc)
output.puts "#{text.bold("visibility: ")} #{method_visibility(meth).to_s}"
if meth.respond_to?(:parameters)
output.puts "#{text.bold("signature: ")} #{signature_for(meth)}"
output.puts
end
output.puts "#{text.bold("signature: ")} #{signature_for(meth)}"
output.puts
render_output(opts.flood?, false, doc)
doc
end
@ -91,11 +89,9 @@ class Pry
output.puts "Visibility: " + method_visibility(meth).to_s
output.puts "Type: " + (meth.is_a?(Method) ? "Bound" : "Unbound")
output.puts "Arity: " + meth.arity.to_s
output.puts "Method Signature: " + signature_for(meth)
if meth.respond_to?(:parameters)
output.puts "Method Signature: " + signature_for(meth)
end
output.puts "Source location: " + (meth.source_location ? meth.source_location.join(":") : "Not found.")
end
command "gist-method", "Gist a method to github. Type `gist-method --help` for more info.", :requires_gem => "gist" do |*args|
@ -147,21 +143,28 @@ class Pry
end
helpers do
def signature_for(meth)
param_strings = []
meth.parameters.each do |kind, name|
case kind
when :req
param_strings << name
when :opt
param_strings << "#{name}=?"
when :rest
param_strings << "*#{name}"
end
end
"#{meth.name}(#{param_strings.join(", ")})"
end
# paraphrased from awesome_print gem
def signature_for(method)
if method.respond_to?(:parameters)
args = method.parameters.inject([]) do |arr, (type, name)|
name ||= (type == :block ? 'block' : "arg#{arr.size + 1}")
arr << case type
when :req then name.to_s
when :opt, :rest then "*#{name}"
when :block then "&#{name}"
else '?'
end
end
else
args = (1..method.arity.abs).map { |i| "arg#{i}" }
args[-1] = "*#{args[-1]}" if method.arity < 0
end
"#{method.name}(#{args.join(', ')})"
end
def method_visibility(meth)
if meth.owner.public_instance_methods.include? meth.name
:public