class Courgette::Capturer

Public Class Methods

new(observer = nil) click to toggle source
# File lib/courgette/capturer.rb, line 34
def initialize observer = nil
  @captured = observer || Captured.new
end

Public Instance Methods

capture(sexpr) click to toggle source
# File lib/courgette/capturer.rb, line 38
def capture sexpr
  iterate sexpr, []
end
definitions() click to toggle source
# File lib/courgette/capturer.rb, line 46
def definitions
  @captured.definitions
end
references() click to toggle source
# File lib/courgette/capturer.rb, line 42
def references
  @captured.references
end

Private Instance Methods

add_definition(definition) click to toggle source
# File lib/courgette/capturer.rb, line 51
def add_definition definition
  @captured.add_definition definition.flatten
end
add_reference(context, reference) click to toggle source
# File lib/courgette/capturer.rb, line 55
def add_reference context, reference
  @captured.add_reference reference, context
end
iterate(sexpr, context) click to toggle source
# File lib/courgette/capturer.rb, line 92
def iterate sexpr, context
  return unless sexpr.is_a? Parser::AST::Node

  case sexpr.type
  when :const, :colon2
    add_reference context, scope(sexpr)
  when :module, :class
    iterate_definition sexpr, context
  when :casgn
    add_definition context + [sexpr.children[1]]
  else
    iterate_many sexpr.children, context
  end
end
iterate_call(sexpr, context) click to toggle source
# File lib/courgette/capturer.rb, line 87
def iterate_call sexpr, context
  iterate sexpr[1], context
  iterate_many sexpr[3..-1], context
end
iterate_cdecl(sexpr, context) click to toggle source
# File lib/courgette/capturer.rb, line 69
def iterate_cdecl sexpr, context
  s = scope sexpr[1]
  new_context = context + [s]
  add_definition new_context

  iterate_many sexpr[2..-1], context
end
iterate_definition(sexpr, context) click to toggle source
# File lib/courgette/capturer.rb, line 77
def iterate_definition sexpr, context
  s = scope sexpr.children[0]
  new_context = context + [s]

  add_definition new_context


  iterate_many sexpr.children[1..-1], new_context
end
iterate_many(sexprs, context) click to toggle source
# File lib/courgette/capturer.rb, line 63
def iterate_many sexprs, context
  sexprs.each do |sexpr|
    iterate sexpr, context
  end
end
scope(sexpr) click to toggle source
# File lib/courgette/capturer.rb, line 59
def scope sexpr
  Courgette::Scope.new.scope sexpr
end