Sha256: 7145a9765a4e1392af4f7347c7daec1206ede11c495312cdde46efda44d69d27

Contents?: true

Size: 1.29 KB

Versions: 2

Compression:

Stored size: 1.29 KB

Contents

require 'stringio' # fix sequence bug, I think
require 'redparse' # takes forever on doze [ltodo]

class Object
  def display *args
   a = caller
   last_caller = a[0] 
   if last_caller[1..1] == ":"
     # could be like E:/dev/ruby/sane/spec/../lib/sane/require_relative.rb:9:in `require_relative'
     drive, file, line, *rest = last_caller.split(":")
   else
     # or like
     # "spec.analyze:9"
     file, line, *rest = last_caller.split(":")
   end
   
   if(file.include?('eval')) 
     out = '[eval] '
     names = args.map{|a| '?'}
   else 
     exact_line = File.readlines(file)[line.to_i - 1].strip
     parser = RedParse.new(exact_line)
     tree = parser.parse
     # the trick is to break out with the first method call...
     right_call_node = give_me_first_call_node tree
     names = right_call_node.params.map{|p| p.unparse}
     out = "[#{File.basename(file)},#{line}] "
   end
   
   
   args2 = names.map{ |n|
      "#{n}=#{args.shift.inspect}"
   }.join(', ')
   
   out += args2   
   puts out
   out
  end
  
  def give_me_first_call_node tree
    tree.walk{|parent,i,subi,node|
      if node.class == RedParse::CallNode
       # eureka
        return tree
      else
        return give_me_first_call_node(node.right)
      end
    }
  end
  
end

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
show-0.2.1 lib/analyze.rb
display-0.2.1 lib/display.rb