class MotionBlender::Analyzer::Parser
Attributes
cache[R]
evaluators[R]
file[R]
referring_constants[R]
Public Class Methods
new(file)
click to toggle source
# File lib/motion_blender/analyzer/parser.rb, line 15 def initialize file @file = file.to_s @evaluators = [] end
Public Instance Methods
autoloads_with(autoloads)
click to toggle source
# File lib/motion_blender/analyzer/parser.rb, line 69 def autoloads_with autoloads referring_constants.map do |mods, const| key = mods .length.downto(0) .map { |i| [*mods.take(i), const].join('::') } .find { |k| autoloads.key?(k) } autoloads[key] end.flatten.compact end
dependent_requires(opts = {})
click to toggle source
# File lib/motion_blender/analyzer/parser.rb, line 80 def dependent_requires opts = {} autoloads = opts[:autoloads] reqs = requires.reject(&:autoload?) reqs += autoloads_with(autoloads) if autoloads reqs.uniq(&:file) end
evaluate(source)
click to toggle source
# File lib/motion_blender/analyzer/parser.rb, line 52 def evaluate source @evaluators << Evaluator.new(source) @evaluators.last.run end
last_trace()
click to toggle source
# File lib/motion_blender/analyzer/parser.rb, line 65 def last_trace @evaluators.last.try :trace end
parse()
click to toggle source
# File lib/motion_blender/analyzer/parser.rb, line 20 def parse cached = cache.fetch do run_callbacks :parse do root = Source.parse_file(@file) traverse(root) { sources: processed_sources.map(&:attributes), referring_constants: root.referring_constants } end end if cached && cache.hit? cached[:sources].each do |attrs| evaluate Source.new(attrs) end end @referring_constants = cached[:referring_constants] self end
processed_sources()
click to toggle source
# File lib/motion_blender/analyzer/parser.rb, line 61 def processed_sources @evaluators.select(&:done?).map(&:source) end
requires()
click to toggle source
# File lib/motion_blender/analyzer/parser.rb, line 57 def requires @evaluators.map(&:requires).flatten end
traverse(source)
click to toggle source
# File lib/motion_blender/analyzer/parser.rb, line 44 def traverse source if Collector.requirable?(source) evaluate source elsif Collector.acceptable?(source) source.children.compact.each { |src| traverse src } end end