Sha256: 67008c29113c7de75076f9bb40726b43909b1355e63ef7003f994fd2631134f2

Contents?: true

Size: 1.14 KB

Versions: 35

Compression:

Stored size: 1.14 KB

Contents

# frozen_string_literal: true

module SimpleCov
  # Classifies whether lines are relevant for code coverage analysis.
  # Comments & whitespace lines, and :nocov: token blocks, are considered not relevant.

  class LinesClassifier
    RELEVANT = 0
    NOT_RELEVANT = nil

    WHITESPACE_LINE = /^\s*$/
    COMMENT_LINE = /^\s*#/
    WHITESPACE_OR_COMMENT_LINE = Regexp.union(WHITESPACE_LINE, COMMENT_LINE)

    def self.no_cov_line
      /^(\s*)#(\s*)(\:#{SimpleCov.nocov_token}\:)/o
    end

    def self.no_cov_line?(line)
      line =~ no_cov_line
    rescue ArgumentError
      # E.g., line contains an invalid byte sequence in UTF-8
      false
    end

    def self.whitespace_line?(line)
      line =~ WHITESPACE_OR_COMMENT_LINE
    rescue ArgumentError
      # E.g., line contains an invalid byte sequence in UTF-8
      false
    end

    def classify(lines)
      skipping = false

      lines.map do |line|
        if self.class.no_cov_line?(line)
          skipping = !skipping
          NOT_RELEVANT
        elsif skipping || self.class.whitespace_line?(line)
          NOT_RELEVANT
        else
          RELEVANT
        end
      end
    end
  end
end

Version data entries

35 entries across 23 versions & 3 rubygems

Version Path
tdiary-5.2.4 vendor/bundle/ruby/3.1.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb
tdiary-5.2.3 vendor/bundle/ruby/3.1.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb
tdiary-5.2.2 vendor/bundle/ruby/3.1.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb
tdiary-5.2.1 vendor/bundle/ruby/3.1.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb
tdiary-5.2.0 vendor/bundle/ruby/2.7.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb
tdiary-5.2.0 vendor/bundle/ruby/3.0.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb
tdiary-5.1.7 vendor/bundle/ruby/3.0.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb
tdiary-5.1.7 vendor/bundle/ruby/2.7.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb
tdiary-5.1.6 vendor/bundle/ruby/2.7.0/gems/tdiary-5.1.5/vendor/bundle/ruby/2.7.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb
tdiary-5.1.6 vendor/bundle/ruby/3.0.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb
tdiary-5.1.6 vendor/bundle/ruby/2.7.0/gems/tdiary-5.1.5/vendor/bundle/ruby/3.0.0/gems/tdiary-5.1.4/vendor/bundle/ruby/2.7.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb
tdiary-5.1.6 vendor/bundle/ruby/2.7.0/gems/tdiary-5.1.5/vendor/bundle/ruby/3.0.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb
tdiary-5.1.6 vendor/bundle/ruby/2.7.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb
tdiary-5.1.5 vendor/bundle/ruby/2.7.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb
tdiary-5.1.5 vendor/bundle/ruby/3.0.0/gems/tdiary-5.1.4/vendor/bundle/ruby/2.7.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb
tdiary-5.1.5 vendor/bundle/ruby/3.0.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb
tdiary-5.1.4 vendor/bundle/ruby/2.7.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb
grape-extra_validators-2.0.0 vendor/bundle/ruby/2.6.0/gems/simplecov-0.17.1/lib/simplecov/lines_classifier.rb
tdiary-5.1.3 vendor/bundle/ruby/2.7.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb
tdiary-5.1.3 vendor/bundle/ruby/2.6.0/gems/simplecov-0.16.1/lib/simplecov/lines_classifier.rb