class RSpectre::SourceMap::Parser

Public Instance Methods

populate(map) click to toggle source
# File lib/rspectre/source_map/parser.rb, line 8
def populate(map)
  walk(parsed_source) { |node| map.add(node) }

  map.freeze
rescue ::Parser::SyntaxError => error
  warn Color.yellow("Warning! Skipping #{file} due to parsing error!")
  warn error.diagnostic.render
  Null.new
end

Private Instance Methods

parsed_source() click to toggle source
# File lib/rspectre/source_map/parser.rb, line 30
def parsed_source
  parser = ::Parser::CurrentRuby.new(PermissiveASTBuilder.new)
  buffer = ::Parser::Source::Buffer.new(file, source: raw_source)

  parser.parse(buffer)
end
raw_source() click to toggle source
# File lib/rspectre/source_map/parser.rb, line 37
def raw_source
  Pathname.new(file).read
end
walk(node) { |node| ... } click to toggle source
# File lib/rspectre/source_map/parser.rb, line 20
def walk(node, &block)
  yield node

  node.children.each do |child|
    next unless child.is_a?(::Parser::AST::Node)

    walk(child, &block)
  end
end