class RuboCop::Cop::Style::BlockComments

Looks for uses of block comments (=begin…=end).

@example

# bad
=begin
Multiple lines
of comments...
=end

# good
# Multiple lines
# of comments...

Constants

BEGIN_LENGTH
END_LENGTH
MSG

Public Instance Methods

on_new_investigation() click to toggle source
# File lib/rubocop/cop/style/block_comments.rb, line 27
def on_new_investigation
  processed_source.comments.each do |comment|
    next unless comment.document?

    add_offense(comment) do |corrector|
      eq_begin, eq_end, contents = parts(comment)

      corrector.remove(eq_begin)
      unless contents.length.zero?
        corrector.replace(
          contents,
          contents.source.gsub(/\A/, '# ').gsub(/\n\n/, "\n#\n").gsub(/\n(?=[^#])/, "\n# ")
        )
      end
      corrector.remove(eq_end)
    end
  end
end

Private Instance Methods

eq_end_part(comment, expr) click to toggle source
# File lib/rubocop/cop/style/block_comments.rb, line 56
def eq_end_part(comment, expr)
  if comment.text.chomp == comment.text
    range_between(expr.end_pos - END_LENGTH - 1, expr.end_pos - 2)
  else
    range_between(expr.end_pos - END_LENGTH, expr.end_pos)
  end
end
parts(comment) click to toggle source
# File lib/rubocop/cop/style/block_comments.rb, line 48
def parts(comment)
  expr = comment.loc.expression
  eq_begin = expr.resize(BEGIN_LENGTH)
  eq_end = eq_end_part(comment, expr)
  contents = range_between(eq_begin.end_pos, eq_end.begin_pos)
  [eq_begin, eq_end, contents]
end