class RipperRubyParser::Parser

Main parser class. Brings together Ripper and our RipperRubyParser::SexpProcessor.

Attributes

extra_compatible[RW]

Public Class Methods

new() click to toggle source
# File lib/ripper_ruby_parser/parser.rb, line 12
def initialize
  @extra_compatible = false
end

Public Instance Methods

parse(source, filename = "(string)", lineno = 1) click to toggle source
# File lib/ripper_ruby_parser/parser.rb, line 16
def parse(source, filename = "(string)", lineno = 1)
  parser = CommentingRipperParser.new(source, filename, lineno)
  exp = parser.parse

  processor = SexpProcessor.new(filename: filename, extra_compatible: extra_compatible)
  result = processor.process exp

  result = result[1] if result.sexp_type == :begin

  if result.sexp_type == :void_stmt
    nil
  else
    trickle_up_line_numbers result
    trickle_down_line_numbers result
    result
  end
end

Private Instance Methods

trickle_down_line_numbers(exp) click to toggle source
# File lib/ripper_ruby_parser/parser.rb, line 45
def trickle_down_line_numbers(exp)
  exp.each do |sub_exp|
    if sub_exp.is_a? Sexp
      sub_exp.line ||= exp.line
      trickle_down_line_numbers sub_exp
    end
  end
end
trickle_up_line_numbers(exp) click to toggle source
# File lib/ripper_ruby_parser/parser.rb, line 36
def trickle_up_line_numbers(exp)
  exp.each do |sub_exp|
    if sub_exp.is_a? Sexp
      trickle_up_line_numbers sub_exp
      exp.line ||= sub_exp.line
    end
  end
end