43 lines
1.1 KiB
Ruby
43 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module Diff
|
|
class InlineDiff
|
|
attr_accessor :old_line, :new_line, :offset
|
|
|
|
def initialize(old_line, new_line, offset: 0)
|
|
@old_line = old_line[offset..]
|
|
@new_line = new_line[offset..]
|
|
@offset = offset
|
|
end
|
|
|
|
def inline_diffs
|
|
# Skip inline diff if empty line was replaced with content
|
|
return if old_line == ""
|
|
|
|
CharDiff.new(old_line, new_line).changed_ranges(offset: offset)
|
|
end
|
|
|
|
# Deprecated: https://gitlab.com/gitlab-org/gitlab/-/issues/324638
|
|
class << self
|
|
def for_lines(lines)
|
|
pair_selector = Gitlab::Diff::PairSelector.new(lines)
|
|
|
|
inline_diffs = []
|
|
|
|
pair_selector.each do |old_index, new_index|
|
|
old_line = lines[old_index]
|
|
new_line = lines[new_index]
|
|
|
|
old_diffs, new_diffs = new(old_line, new_line, offset: 1).inline_diffs
|
|
|
|
inline_diffs[old_index] = old_diffs
|
|
inline_diffs[new_index] = new_diffs
|
|
end
|
|
|
|
inline_diffs
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|