class CodeStatisticsCalculator

:nodoc:

def add(code_statistics_calculator)

def add(code_statistics_calculator)
  @lines += code_statistics_calculator.lines
  @code_lines += code_statistics_calculator.code_lines
  @classes += code_statistics_calculator.classes
  @methods += code_statistics_calculator.methods
end

def add_by_file_path(file_path)

def add_by_file_path(file_path)
  File.open(file_path) do |f|
    self.add_by_io(f, file_type(file_path))
  end
end

def add_by_io(io, file_type)

def add_by_io(io, file_type)
  patterns = PATTERNS[file_type] || {}
  comment_started = false
  while line = io.gets
    @lines += 1
    if comment_started
      if patterns[:end_block_comment] && line =~ patterns[:end_block_comment]
        comment_started = false
      end
      next
    else
      if patterns[:begin_block_comment] && line =~ patterns[:begin_block_comment]
        comment_started = true
        next
      end
    end
    @classes   += 1 if patterns[:class] && line =~ patterns[:class]
    @methods   += 1 if patterns[:method] && line =~ patterns[:method]
    if line !~ /^\s*$/ && (patterns[:line_comment].nil? || line !~ patterns[:line_comment])
      @code_lines += 1
    end
  end
end

def file_type(file_path)

def file_type(file_path)
  if file_path.end_with? '_test.rb'
    :minitest
  else
    File.extname(file_path).sub(/\A\./, '').downcase.to_sym
  end
end

def initialize(lines = 0, code_lines = 0, classes = 0, methods = 0)

def initialize(lines = 0, code_lines = 0, classes = 0, methods = 0)
  @lines = lines
  @code_lines = code_lines
  @classes = classes
  @methods = methods
end