Class: LineTracker

Inherits:
Object
  • Object
show all
Defined in:
lib/line_tracker.rb

Instance Method Summary collapse

Instance Method Details

#track_mutations!(file_diffs) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/line_tracker.rb', line 4

def track_mutations!(file_diffs)
  deletions = index_deletions(file_diffs)
  file_deletions = deletions.delete(:files)

  grouped_file_diffs(file_diffs).reduce(change_context()) do |acc, (file_name, file_diff)|
    file_diff[:diffs].each do |diff|
      file_deletes = (file_deletions[file_diff[:a_file_name]] || {})

      diff.insertions.each_with_index do |insertion, i|
        insertion = insertion.strip()
        next if Line.meaningless?(insertion)
        line_number = diff.insert_start + i - 1

        if movement?(deletions, insertion)
          index!(acc[:movements], file_name, line_number, deletions[insertion].shift())
        else
          changed_line = find_change(file_deletes, insertion)
          index!(acc[:changes], file_name, line_number, changed_line) if changed_line
        end
      end
    end
    acc
  end
end