class RipperRubyParser::CommentingRipperParser

Variant of Ripper's SexpBuilder parser class that inserts comments as Sexps into the built parse tree.

@api private

Constants

NUMBER_LITERAL_TYPES

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 13
def initialize(*args)
  super
  @comment = ""
  @comment_stack = []
  @delimiter_stack = []
  @space_before = false
  @seen_space = false
  @in_symbol = false
end

Public Instance Methods

parse() click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 23
def parse
  result = super
  raise "Ripper parse failed." unless result

  Sexp.from_array(result)
end

Private Instance Methods

commentize(_name, exp) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 330
def commentize(_name, exp)
  (_, _kw, loc), comment = @comment_stack.pop
  @comment = ""
  exp.push loc
  [:comment, comment, exp]
end
on_BEGIN(*args) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 302
def on_BEGIN(*args)
  commentize(:BEGIN, super)
end
on_END(*args) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 306
def on_END(*args)
  commentize(:END, super)
end
on_alias_error(message, *) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 318
def on_alias_error(message, *)
  raise SyntaxError, message
end
on_args_add(list, elem) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 98
def on_args_add(list, elem)
  list << elem
end
on_args_new() click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 94
def on_args_new
  [:args]
end
on_assign_error(message, *) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 322
def on_assign_error(message, *)
  raise SyntaxError, message
end
on_backtick(delimiter) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 32
def on_backtick(delimiter)
  @delimiter_stack.push delimiter
  super
end
on_begin(*args) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 37
def on_begin(*args)
  commentize(:begin, super)
end
on_class(*args) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 78
def on_class(*args)
  commentize(:class, super)
end
on_class_name_error(message, *) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 314
def on_class_name_error(message, *)
  raise SyntaxError, message
end
on_comment(tok) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 46
def on_comment(tok)
  @comment += tok
end
on_def(*args) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 86
def on_def(*args)
  commentize(:def, super)
end
on_defs(*args) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 90
def on_defs(*args)
  commentize(:def, super)
end
on_dyna_symbol(*args) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 297
def on_dyna_symbol(*args)
  @in_symbol = false
  super
end
on_embdoc(tok) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 54
def on_embdoc(tok)
  @comment += tok
end
on_embdoc_beg(tok) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 50
def on_embdoc_beg(tok)
  @comment += tok
end
on_embdoc_end(tok) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 58
def on_embdoc_end(tok)
  @comment += tok
end
on_embexpr_beg(_delimiter) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 293
def on_embexpr_beg(_delimiter)
  @in_symbol = false
end
on_float(_token) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 262
def on_float(_token)
  @space_before = @seen_space
  super
end
on_heredoc_beg(delimiter) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 102
def on_heredoc_beg(delimiter)
  @delimiter_stack.push delimiter
end
on_heredoc_dedent(val, width) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 106
def on_heredoc_dedent(val, width)
  next_dedent = true
  val.map! do |e|
    if e.is_a?(Array) && e[0] == :@tstring_content
      e = dedent_element(e, width) if next_dedent
      next_dedent = e[1].end_with? "\n"
    end
    e
  end
  val
end
on_heredoc_end(_delimiter) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 118
def on_heredoc_end(_delimiter)
  @delimiter_stack.pop
end
on_int(_token) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 257
def on_int(_token)
  @space_before = @seen_space
  super
end
on_kw(tok) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 62
def on_kw(tok)
  result = super
  case tok
  when "class", "def", "module", "BEGIN", "begin", "END"
    unless @in_symbol
      @comment_stack.push [result, @comment]
      @comment = ""
    end
  end
  result
end
on_mlhs_add(list, elem) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 126
def on_mlhs_add(list, elem)
  if list.first == :mlhs
    list << elem
  else
    [:mlhs_add_post, list, elem]
  end
end
on_mlhs_new() click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 122
def on_mlhs_new
  [:mlhs]
end
on_module(*args) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 74
def on_module(*args)
  commentize(:module, super)
end
on_mrhs_add(list, elem) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 138
def on_mrhs_add(list, elem)
  list << elem
end
on_mrhs_new() click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 134
def on_mrhs_new
  [:mrhs]
end
on_op(token) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 248
def on_op(token)
  @seen_space = false
  super
end
on_param_error(message, *) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 326
def on_param_error(message, *)
  raise SyntaxError, message
end
on_parse_error(message) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 310
def on_parse_error(message)
  raise SyntaxError, message
end
on_qsymbols_add(list, elem) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 150
def on_qsymbols_add(list, elem)
  list << elem
end
on_qsymbols_beg(delimiter) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 142
def on_qsymbols_beg(delimiter)
  @delimiter_stack.push delimiter
end
on_qsymbols_new() click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 146
def on_qsymbols_new
  [:qsymbols]
end
on_qwords_add(list, elem) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 162
def on_qwords_add(list, elem)
  list << elem
end
on_qwords_beg(delimiter) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 154
def on_qwords_beg(delimiter)
  @delimiter_stack.push delimiter
end
on_qwords_new() click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 158
def on_qwords_new
  [:qwords]
end
on_regexp_add(list, elem) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 179
def on_regexp_add(list, elem)
  list << elem
end
on_regexp_beg(delimiter) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 166
def on_regexp_beg(delimiter)
  @delimiter_stack.push delimiter
end
on_regexp_end(delimiter) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 170
def on_regexp_end(delimiter)
  @delimiter_stack.pop
  super
end
on_regexp_new() click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 175
def on_regexp_new
  [:regexp]
end
on_sclass(*args) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 82
def on_sclass(*args)
  commentize(:class, super)
end
on_sp(_token) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 253
def on_sp(_token)
  @seen_space = true
end
on_stmts_add(list, elem) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 187
def on_stmts_add(list, elem)
  list << elem
end
on_stmts_new() click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 183
def on_stmts_new
  [:stmts]
end
on_string_add(list, elem) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 191
def on_string_add(list, elem)
  list << elem
end
on_symbeg(delimiter) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 282
def on_symbeg(delimiter)
  @delimiter_stack.push delimiter
  @in_symbol = true
end
on_symbol(*args) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 287
def on_symbol(*args)
  @delimiter_stack.pop
  @in_symbol = false
  super
end
on_symbols_add(list, elem) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 203
def on_symbols_add(list, elem)
  list << elem
end
on_symbols_beg(delimiter) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 195
def on_symbols_beg(delimiter)
  @delimiter_stack.push delimiter
end
on_symbols_new() click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 199
def on_symbols_new
  [:symbols]
end
on_tstring_beg(delimiter) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 207
def on_tstring_beg(delimiter)
  @delimiter_stack.push delimiter
end
on_tstring_content(content) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 211
def on_tstring_content(content)
  super(content) << @delimiter_stack.last
end
on_tstring_end(delimiter) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 215
def on_tstring_end(delimiter)
  @delimiter_stack.pop
  super
end
on_unary(operator, value) click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 269
def on_unary(operator, value)
  if !@space_before && operator == :-@ && NUMBER_LITERAL_TYPES.include?(value.first)
    type, literal, lines = value
    if literal[0] == "-"
      super
    else
      [type, "-#{literal}", lines]
    end
  else
    super
  end
end
on_void_stmt() click to toggle source
Calls superclass method
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 41
def on_void_stmt
  result = super
  result << [lineno, column]
end
on_word_add(list, elem) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 224
def on_word_add(list, elem)
  list << elem
end
on_word_new() click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 220
def on_word_new
  [:word]
end
on_words_add(list, elem) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 236
def on_words_add(list, elem)
  list << elem
end
on_words_beg(delimiter) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 228
def on_words_beg(delimiter)
  @delimiter_stack.push delimiter
end
on_words_new() click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 232
def on_words_new
  [:words]
end
on_xstring_add(list, elem) click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 244
def on_xstring_add(list, elem)
  list << elem
end
on_xstring_new() click to toggle source
# File lib/ripper_ruby_parser/commenting_ripper_parser.rb, line 240
def on_xstring_new
  [:xstring]
end