Sha256: 9ac7d0462165f73cead69a567c9200cb2b00bd701c73462a387366c565cbcb51

Contents?: true

Size: 1.23 KB

Versions: 1

Compression:

Stored size: 1.23 KB

Contents

# frozen_string_literal: true

require_relative 'simplecov-review/version'

module SimpleCov
  module Formatter
    FILENAME = 'review.txt'
    #
    # Simple formatter to report missing coverage for reporting tools
    #
    class ReviewFormatter
      def format(result)
        File.open(export_path, 'w') do |output_file|
          result.files.each do |file|
            find_missing_groups(file).each do |lines|
              output_file << error_for(file, lines)
            end
          end
        end
      end

      private

      def error_for(file, lines)
        filename = file.filename.gsub("#{SimpleCov.root}/", '')
        message = if lines.length > 1
                    "Missing coverage for lines #{lines.first}-#{lines.last}"
                  else
                    "Missing coverage for line #{lines.first}"
                  end
        "#{filename}:#{lines.first}:1: #{message}\n"
      end

      def find_missing_groups(file)
        lines_missing = file.lines.each_index.select { |index| file.lines[index].coverage&.zero? }.map { |l| l + 1 }
        lines_missing.slice_when { |prev, curr| curr != prev.next }.to_a
      end

      def export_path
        File.join(SimpleCov.coverage_path, FILENAME)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
simplecov-review-0.1.0 lib/simplecov-review.rb