Sha256: 4d2f2d980fdb80d0dc64014c1a5100b857d0c4405156f0acf85186924c5673e2

Contents?: true

Size: 1.09 KB

Versions: 66

Compression:

Stored size: 1.09 KB

Contents

# frozen_string_literal: true

module Mutant
  module Repository
    class Diff
      module Ranges
        DECIMAL = /(?:0|[1-9]\d*)/.freeze
        REGEXP  = /\A@@ -(#{DECIMAL})(?:,(#{DECIMAL}))? \+(#{DECIMAL})(?:,(#{DECIMAL}))? @@/.freeze

        private_constant(*constants(false))

        # Parse a unified diff into ranges
        #
        # @param [String]
        #
        # @return [Set<Range<Integer>>]
        def self.parse(diff)
          diff.lines.flat_map(&method(:parse_ranges)).to_set
        end

        def self.parse_ranges(line)
          match = REGEXP.match(line) or return EMPTY_ARRAY

          match
            .captures
            .each_slice(2)
            .map { |start, offset| mk_range(start, offset) }
            .reject { |range| range.end < range.begin }
        end
        private_class_method :parse_ranges

        def self.mk_range(start, offset)
          start = Integer(start)

          ::Range.new(start, start + (offset ? Integer(offset).pred : 0))
        end
        private_class_method :mk_range
      end # Ranges
    end # Diff
  end # Repository
end # Ranges

Version data entries

66 entries across 66 versions & 1 rubygems

Version Path
mutant-0.11.25 lib/mutant/repository/diff/ranges.rb
mutant-0.11.24 lib/mutant/repository/diff/ranges.rb
mutant-0.11.23 lib/mutant/repository/diff/ranges.rb
mutant-0.11.22 lib/mutant/repository/diff/ranges.rb
mutant-0.11.21 lib/mutant/repository/diff/ranges.rb
mutant-0.11.20 lib/mutant/repository/diff/ranges.rb
mutant-0.11.19 lib/mutant/repository/diff/ranges.rb
mutant-0.11.18 lib/mutant/repository/diff/ranges.rb
mutant-0.11.17 lib/mutant/repository/diff/ranges.rb
mutant-0.11.16 lib/mutant/repository/diff/ranges.rb
mutant-0.11.15 lib/mutant/repository/diff/ranges.rb
mutant-0.11.14 lib/mutant/repository/diff/ranges.rb
mutant-0.11.13 lib/mutant/repository/diff/ranges.rb
mutant-0.11.12 lib/mutant/repository/diff/ranges.rb
mutant-0.11.11 lib/mutant/repository/diff/ranges.rb
mutant-0.11.10 lib/mutant/repository/diff/ranges.rb
mutant-0.11.9 lib/mutant/repository/diff/ranges.rb
mutant-0.11.8 lib/mutant/repository/diff/ranges.rb
mutant-0.11.7 lib/mutant/repository/diff/ranges.rb
mutant-0.11.6 lib/mutant/repository/diff/ranges.rb