class ZombieScout::Parser

Attributes

called_methods[R]
defined_methods[R]

Public Class Methods

new(ruby_source) click to toggle source
# File lib/zombie_scout/parser.rb, line 8
def initialize(ruby_source)
  @ruby_source = ruby_source
  @defined_methods = []
  @called_methods = []
  @class_module_stack = []
  node = ::Parser::CurrentRuby.parse(@ruby_source.source)
  process(node)
end

Public Instance Methods

on_class(node) click to toggle source
# File lib/zombie_scout/parser.rb, line 17
def on_class(node)
  classname_const, superclass, body = *node
  classname = ConstExtracter.new.process(classname_const)
  @class_module_stack.push(classname)
  process(body)
  @class_module_stack.pop
end
on_def(node) click to toggle source
# File lib/zombie_scout/parser.rb, line 33
def on_def(node)
  method_name, args, body = *node
  stash_method(method_name, node)
  process(body)
end
on_defs(node) click to toggle source
# File lib/zombie_scout/parser.rb, line 39
def on_defs(node)
  self_node, method_name, args, body = *node
  stash_method(method_name, node)
  process(body)
end
on_module(node) click to toggle source
# File lib/zombie_scout/parser.rb, line 25
def on_module(node)
  modulename_const, body = *node
  modulename = ConstExtracter.new.process(modulename_const)
  @class_module_stack.push(modulename)
  process(body)
  @class_module_stack.pop
end
on_send(node) click to toggle source
# File lib/zombie_scout/parser.rb, line 45
def on_send(node)
  receiver, method_name, *args = *node
  if respond_to?(:"handle_#{method_name}", true)
    send(:"handle_#{method_name}", args, node)
  end
  @called_methods << method_name
  process_all(args)
end

Private Instance Methods

handle_attr_accessor(args, node) click to toggle source
# File lib/zombie_scout/parser.rb, line 72
def handle_attr_accessor(args, node)
  args.each do |arg|
    if_symbol(arg) do |attr_method_name|
      stash_method(attr_method_name, node)
      stash_method(:"#{attr_method_name}=", node)
    end
  end
end
handle_attr_reader(args, node) click to toggle source
# File lib/zombie_scout/parser.rb, line 56
def handle_attr_reader(args, node)
  args.each do |arg|
    if_symbol(arg) do |attr_method_name|
      stash_method(attr_method_name, node)
    end
  end
end
handle_attr_writer(args, node) click to toggle source
# File lib/zombie_scout/parser.rb, line 64
def handle_attr_writer(args, node)
  args.each do |arg|
    if_symbol(arg) do |attr_method_name|
      stash_method(:"#{attr_method_name}=", node)
    end
  end
end
handle_def_delegator(args, node) click to toggle source
# File lib/zombie_scout/parser.rb, line 89
def handle_def_delegator(args, node)
  if_symbol(args.last) do |attr_method_name|
    stash_method(attr_method_name, node)
  end
end
handle_def_delegators(args, node) click to toggle source
# File lib/zombie_scout/parser.rb, line 81
def handle_def_delegators(args, node)
  args.drop(1).each do |arg|
    if_symbol(arg) do |attr_method_name|
      stash_method(attr_method_name, node)
    end
  end
end
handle_scope(args, node) click to toggle source
# File lib/zombie_scout/parser.rb, line 95
def handle_scope(args, node)
  if_symbol(args.first) do |attr_method_name|
    stash_method(attr_method_name, node)
  end
end
if_symbol(node) { |maybe_symbol| ... } click to toggle source
# File lib/zombie_scout/parser.rb, line 101
def if_symbol(node)
  maybe_symbol = SymbolExtracter.new.process(node)
  if maybe_symbol.is_a? Symbol
    yield maybe_symbol
  end
end
stash_method(method_name, node) click to toggle source
# File lib/zombie_scout/parser.rb, line 108
def stash_method(method_name, node)
  line_number = node.location.line
  class_name = @class_module_stack.join('::')
  @defined_methods << Method.new(method_name, class_name, @ruby_source.path, line_number)
end