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