Fix method visibility in inline diff class
This commit is contained in:
parent
e15b63b34e
commit
20a5033d79
|
|
@ -19,24 +19,6 @@ module Gitlab
|
|||
|
||||
attr_accessor :old_line, :new_line, :offset
|
||||
|
||||
def self.for_lines(lines)
|
||||
changed_line_pairs = self.find_changed_line_pairs(lines)
|
||||
|
||||
inline_diffs = []
|
||||
|
||||
changed_line_pairs.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
|
||||
|
||||
def initialize(old_line, new_line, offset: 0)
|
||||
@old_line = old_line[offset..-1]
|
||||
@new_line = new_line[offset..-1]
|
||||
|
|
@ -63,32 +45,54 @@ module Gitlab
|
|||
[old_diffs, new_diffs]
|
||||
end
|
||||
|
||||
private
|
||||
class << self
|
||||
def for_lines(lines)
|
||||
changed_line_pairs = find_changed_line_pairs(lines)
|
||||
|
||||
# Finds pairs of old/new line pairs that represent the same line that changed
|
||||
def self.find_changed_line_pairs(lines)
|
||||
# Prefixes of all diff lines, indicating their types
|
||||
# For example: `" - + -+ ---+++ --+ -++"`
|
||||
line_prefixes = lines.each_with_object("") { |line, s| s << line[0] }.gsub(/[^ +-]/, ' ')
|
||||
inline_diffs = []
|
||||
|
||||
changed_line_pairs = []
|
||||
line_prefixes.scan(LINE_PAIRS_PATTERN) do
|
||||
# For `"---+++"`, `begin_index == 0`, `end_index == 6`
|
||||
begin_index, end_index = Regexp.last_match.offset(:del_ins)
|
||||
changed_line_pairs.each do |old_index, new_index|
|
||||
old_line = lines[old_index]
|
||||
new_line = lines[new_index]
|
||||
|
||||
# For `"---+++"`, `changed_line_count == 3`
|
||||
changed_line_count = (end_index - begin_index) / 2
|
||||
old_diffs, new_diffs = new(old_line, new_line, offset: 1).inline_diffs
|
||||
|
||||
halfway_index = begin_index + changed_line_count
|
||||
(begin_index...halfway_index).each do |i|
|
||||
# For `"---+++"`, index 1 maps to 1 + 3 = 4
|
||||
changed_line_pairs << [i, i + changed_line_count]
|
||||
inline_diffs[old_index] = old_diffs
|
||||
inline_diffs[new_index] = new_diffs
|
||||
end
|
||||
|
||||
inline_diffs
|
||||
end
|
||||
|
||||
changed_line_pairs
|
||||
private
|
||||
|
||||
# Finds pairs of old/new line pairs that represent the same line that changed
|
||||
def find_changed_line_pairs(lines)
|
||||
# Prefixes of all diff lines, indicating their types
|
||||
# For example: `" - + -+ ---+++ --+ -++"`
|
||||
line_prefixes = lines.each_with_object("") { |line, s| s << line[0] }.gsub(/[^ +-]/, ' ')
|
||||
|
||||
changed_line_pairs = []
|
||||
line_prefixes.scan(LINE_PAIRS_PATTERN) do
|
||||
# For `"---+++"`, `begin_index == 0`, `end_index == 6`
|
||||
begin_index, end_index = Regexp.last_match.offset(:del_ins)
|
||||
|
||||
# For `"---+++"`, `changed_line_count == 3`
|
||||
changed_line_count = (end_index - begin_index) / 2
|
||||
|
||||
halfway_index = begin_index + changed_line_count
|
||||
(begin_index...halfway_index).each do |i|
|
||||
# For `"---+++"`, index 1 maps to 1 + 3 = 4
|
||||
changed_line_pairs << [i, i + changed_line_count]
|
||||
end
|
||||
end
|
||||
|
||||
changed_line_pairs
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def longest_common_prefix(a, b)
|
||||
max_length = [a.length, b.length].max
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue