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