module RuboCop::Cop::CommentsHelp
Help methods for working with nodes containing comments.
Public Instance Methods
comments_contain_disables?(node, cop_name)
click to toggle source
# File lib/rubocop/cop/mixin/comments_help.rb, line 25 def comments_contain_disables?(node, cop_name) disabled_ranges = processed_source.disabled_line_ranges[cop_name] return unless disabled_ranges node_range = node.source_range.line...find_end_line(node) disabled_ranges.any? do |disable_range| disable_range.cover?(node_range) || node_range.cover?(disable_range) end end
comments_in_range(node)
click to toggle source
# File lib/rubocop/cop/mixin/comments_help.rb, line 18 def comments_in_range(node) start_line = node.source_range.line end_line = find_end_line(node) processed_source.each_comment_in_lines(start_line...end_line) end
contains_comments?(node)
click to toggle source
# File lib/rubocop/cop/mixin/comments_help.rb, line 14 def contains_comments?(node) comments_in_range(node).any? end
source_range_with_comment(node)
click to toggle source
# File lib/rubocop/cop/mixin/comments_help.rb, line 7 def source_range_with_comment(node) begin_pos = begin_pos_with_comment(node) end_pos = end_position_for(node) Parser::Source::Range.new(buffer, begin_pos, end_pos) end
Private Instance Methods
begin_pos_with_comment(node)
click to toggle source
# File lib/rubocop/cop/mixin/comments_help.rb, line 44 def begin_pos_with_comment(node) first_comment = processed_source.ast_with_comments[node].first if first_comment && (first_comment.loc.line < node.loc.line) start_line_position(first_comment) else start_line_position(node) end end
buffer()
click to toggle source
# File lib/rubocop/cop/mixin/comments_help.rb, line 58 def buffer processed_source.buffer end
end_position_for(node)
click to toggle source
# File lib/rubocop/cop/mixin/comments_help.rb, line 39 def end_position_for(node) end_line = buffer.line_for_position(node.loc.expression.end_pos) buffer.line_range(end_line).end_pos end
find_end_line(node)
click to toggle source
Returns the end line of a node, which might be a comment and not part of the AST End line is considered either the line at which another node starts, or the line at which the parent node ends. rubocop:disable Metrics/AbcSize
# File lib/rubocop/cop/mixin/comments_help.rb, line 66 def find_end_line(node) if node.if_type? && node.loc.else node.loc.else.line elsif (next_sibling = node.right_sibling) next_sibling.loc.line elsif (parent = node.parent) parent.loc.end ? parent.loc.end.line : parent.loc.line else node.loc.end.line end end
start_line_position(node)
click to toggle source
# File lib/rubocop/cop/mixin/comments_help.rb, line 54 def start_line_position(node) buffer.line_range(node.loc.line).begin_pos - 1 end