class DeepCover::FlagCommentAssociator
A processor which computes which lines to be considered flagged with the given lookup
Public Class Methods
new(covered_code, lookup = 'nocov')
click to toggle source
@param [DeepCover::RootNode] ast @param [Array(Parser::Source::Comment)] comments
# File lib/deep_cover/flag_comment_associator.rb, line 12 def initialize(covered_code, lookup = 'nocov') @covered_code = covered_code @lookup = /^#[\s#*-]*#{lookup}[\s#*-]*$/ @ranges = nil end
Public Instance Methods
include?(range)
click to toggle source
# File lib/deep_cover/flag_comment_associator.rb, line 18 def include?(range) return false unless (exp = range.expression) lineno = exp.line ranges.any? { |r| r.cover? lineno } end
ranges()
click to toggle source
# File lib/deep_cover/flag_comment_associator.rb, line 24 def ranges @ranges ||= compute_ranges end
Private Instance Methods
compute_ranges()
click to toggle source
# File lib/deep_cover/flag_comment_associator.rb, line 30 def compute_ranges @ranges = [] @flag_start = nil index_ast_lines @covered_code.comments.each { |comment| process(comment) } toggle_flag(@covered_code.buffer.last_line) # handle end of file in case of opened flag @ranges end
index_ast_lines()
click to toggle source
# File lib/deep_cover/flag_comment_associator.rb, line 55 def index_ast_lines @starts = [] @covered_code.each_node do |node| if (exp = node.expression) @starts[exp.line] = true end end end
line_has_only_comments?(line)
click to toggle source
# File lib/deep_cover/flag_comment_associator.rb, line 64 def line_has_only_comments?(line) !@starts[line] end
process(comment)
click to toggle source
# File lib/deep_cover/flag_comment_associator.rb, line 39 def process(comment) return unless comment.text =~ @lookup ln = comment.location.expression.line toggle_flag(ln) unless line_has_only_comments?(ln) toggle_flag(ln + 1) end
toggle_flag(lineno)
click to toggle source
# File lib/deep_cover/flag_comment_associator.rb, line 46 def toggle_flag(lineno) if @flag_start @ranges << (@flag_start..(lineno - 1)) @flag_start = nil else @flag_start = lineno end end