lib/rubocop/git/patch.rb in rubocop-git-kjanoudi-0.1.3 vs lib/rubocop/git/patch.rb in rubocop-git-kjanoudi-0.1.4

- old
+ new

@@ -2,19 +2,21 @@ # copy from https://github.com/thoughtbot/hound/blob/d2f3933/app/models/patch.rb class Patch RANGE_INFORMATION_LINE = /^@@ .+\+(?<line_number>\d+),/ MODIFIED_LINE = /^\+(?!\+|\+)/ NOT_REMOVED_LINE = /^[^-]/ + PATCH_INFO_LINE = /\+([0-9,]+)/ def initialize(body) @body = body || '' + @changes = [] end def additions line_number = 0 - lines.each_with_index.inject([]) do |additions, (content, patch_position)| + lines.each_with_index.inject(@changes) do |additions, (content, patch_position)| case content when RANGE_INFORMATION_LINE line_number = Regexp.last_match[:line_number].to_i when MODIFIED_LINE additions << Line.new(content, line_number, patch_position) @@ -23,9 +25,34 @@ line_number += 1 end additions end + end + + # maps out additions line numbers to indicate start and end of code changes + # [[5,7], [11,11]] indicates changes from line 5, 6, 7 and then + # another one at 11 + def additions_map + if @changes.empty? + self.additions + end + + map = [] + starting_line = ending_line = 0 + + @changes.each do |addition| + if starting_line == 0 + starting_line = ending_line = addition.line_number + elsif addition.line_number == ( ending_line + 1 ) + ending_line = addition.line_number + else # this row is not part of the last rows "group" + map.push([starting_line, ending_line]) + starting_line = ending_line = addition.line_number + end + end + map.push([starting_line, ending_line]) + map end private def lines