class RuboCop::Cop::Style::CommentedKeyword
end
y
class X # :nodoc:
# good
end
statement
if condition
# good
def x; end # comment
# bad
end
statement
class X # comment
# bad
end # end if
statement
if condition
# bad
@example
meaningful.
Autocorrection is unsafe because it may remove a comment that is
@safety
for ‘class`, `module`, `def` and `begin` above the keyword.
Autocorrection removes comments from `end` keyword and keeps comments
RBS::Inline annotation, and Steep annotation (`steep:ignore`) are allowed.
(`:nodoc:`, `:yields:`, `rubocop:disable` and `rubocop:todo`),
Note that some comments
These keywords are: `class`, `module`, `def`, `begin`, `end`.
Checks for comments put on the same line as some keywords.
def offensive?(comment)
def offensive?(comment) line = source_line(comment) return false if rbs_inline_annotation?(line, comment) return false if steep_annotation?(comment) KEYWORD_REGEXES.any? { |r| r.match?(line) } && ALLOWED_COMMENT_REGEXES.none? { |r| r.match?(line) } end
def on_new_investigation
def on_new_investigation processed_source.comments.each do |comment| next unless offensive?(comment) && (match = source_line(comment).match(REGEXP)) register_offense(comment, match[:keyword]) end end
def rbs_inline_annotation?(line, comment)
def rbs_inline_annotation?(line, comment) case line when SUBCLASS_DEFINITION comment.text.start_with?(/#\[.+\]/) when METHOD_OR_END_DEFINITIONS comment.text.start_with?('#:') else false end end
def register_offense(comment, matched_keyword)
def register_offense(comment, matched_keyword) add_offense(comment, message: format(MSG, keyword: matched_keyword)) do |corrector| range = range_with_surrounding_space(comment.source_range, newlines: false) corrector.remove(range) unless matched_keyword == 'end' corrector.insert_before( range.source_buffer.line_range(comment.loc.line), "#{comment.text}\n" ) end end end
def source_line(comment)
def source_line(comment) comment.source_range.source_line end
def steep_annotation?(comment)
def steep_annotation?(comment) comment.text.match?(STEEP_REGEXP) end