#!/usr/bin/env ruby

require 'rrb/completion'

if $0 == __FILE__ then
  
  def print_usage
    print "\
Usage: rrb_compinfo INFOTYPE IOTYPE

  INFOTYPE
    * --methods-local-vars
    * --methods
    * --bare-methods
    * --classes
    * --classes-instance-vars
    * --classes-class-vars
    * --gloval-vars
    * --constants
  IOTYPE
    * --stdin-stdout
    * --filein-stdout FILES..
    * --marshalin-stdout FILE
"
  end
  
  if ARGV.size == 0 || ARGV[0] == '--help' then
    print_usage
    exit
  end

  infotype = ARGV.shift
  
  if ARGV[0] == '--target' then
    ARGV.shift
    target = ARGV.shift
  end

  case ARGV.shift
  when '--stdin-stdout'
    script = RRB::Script.new_from_io( STDIN )
  when '--filein-stdout'
    script = RRB::Script.new_from_filenames( *ARGV )
  when '--marshalin-stdout'
    script = RRB::Script.new_from_marshal(ARGV.shift)
  end

  case infotype
  when '--methods-local-vars'
    script.refactable_methods.each do |method|
      print method.name, ';'
      print method.local_vars.to_a.join(",")
      print "\n"
    end
  when '--local-vars'
    script.refactable_methods.each do |method|
      if method.name == target
        print method.local_vars.to_a.join(",")
      end
    end
  when '--instance-vars'
    script.refactable_classes_instance_vars.each do |classname,ivars|
      if classname == target
        print ivars.to_a.join(','), "\n"
      end
    end
  when '--class-vars'
    script.refactable_classes_class_vars.each do |classname, cvars|
      if classname == target
        print cvars.to_a.join(','), "\n"
      end
    end
  when '--bare-methods'
    script.refactable_methods.map{|m| m.bare_name}.sort.uniq.each do |method|
      print method,","
    end
    print "\n"
  when '--methods'
    script.refactable_methods.each do |method|
      print method.name, ','
    end
  when '--classes'
    script.refactable_classes.each do |klass|
      print klass, ","
    end
  when '--classes-instance-vars'
    script.refactable_classes_instance_vars.each do |classname,ivars|
      print classname, ';', ivars.to_a.join(','), "\n"
    end
  when '--classes-class-vars'
    script.refactable_classes_class_vars.each do |classname, cvars|
      print classname, ';', cvars.to_a.join(','), "\n"
    end
  when '--global-vars'
    script.refactable_global_vars.each do |var|
      print var, ","
    end
  when '--constants'
    script.refactable_consts.each do |const|
      print const, ","
    end
  end  
end
