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