class RuboCop::Cop::Style::CommentedKeyword
Checks for comments put on the same line as some keywords. These keywords are: `class`, `module`, `def`, `begin`, `end`.
Note that some comments (`:nodoc:`, `:yields:`, `rubocop:disable` and `rubocop:todo`) are allowed.
Autocorrection removes comments from `end` keyword and keeps comments for `class`, `module`, `def` and `begin` above the keyword.
@safety
Autocorrection is unsafe because it may remove a comment that is meaningful.
@example
# bad if condition statement end # end if # bad class X # comment statement end # bad def x; end # comment # good if condition statement end # good class X # :nodoc: y end
Constants
- ALLOWED_COMMENTS
- ALLOWED_COMMENT_REGEXES
- KEYWORDS
- KEYWORD_REGEXES
- MSG
- REGEXP
Public Instance Methods
on_new_investigation()
click to toggle source
# File lib/rubocop/cop/style/commented_keyword.rb, line 57 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
Private Instance Methods
offensive?(comment)
click to toggle source
# File lib/rubocop/cop/style/commented_keyword.rb, line 80 def offensive?(comment) line = source_line(comment) KEYWORD_REGEXES.any? { |r| r.match?(line) } && ALLOWED_COMMENT_REGEXES.none? { |r| r.match?(line) } end
register_offense(comment, matched_keyword)
click to toggle source
# File lib/rubocop/cop/style/commented_keyword.rb, line 67 def register_offense(comment, matched_keyword) add_offense(comment, message: format(MSG, keyword: matched_keyword)) do |corrector| range = range_with_surrounding_space(comment.loc.expression, 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
source_line(comment)
click to toggle source
# File lib/rubocop/cop/style/commented_keyword.rb, line 86 def source_line(comment) comment.location.expression.source_line end