class GitDiffMap::Patch

Constants

ADDED_LINE
RANGE_INFORMATION_LINE
REMOVED_LINE

Public Class Methods

new(original_patch) click to toggle source
# File lib/git_diff_map/patch.rb, line 15
def initialize(original_patch)
  @body = original_patch.body
  @file = original_patch.file
  @secure_hash = original_patch.secure_hash
end

Public Instance Methods

changed_lines() click to toggle source

@return [Array<Line>] changed lines

# File lib/git_diff_map/patch.rb, line 22
def changed_lines
  original_line = 0
  new_line = 0

  lines.each_with_index.inject([]) do |lines, (content, patch_position)|
    case content
    when RANGE_INFORMATION_LINE
      original_line = Regexp.last_match[:original_base_line].to_i
      new_line = Regexp.last_match[:new_base_line].to_i
    when ADDED_LINE
      line = Line.new(
        content: content,
        number: new_line,
        patch_position: patch_position
      )
      lines << line
      new_line += 1
    when REMOVED_LINE
      line = Line.new(
        content: content,
        number: original_line,
        patch_position: patch_position
      )
      lines << line
      original_line += 1
    when NOT_REMOVED_LINE
      original_line += 1
      new_line += 1
    end

    lines
  end
end
changed_methods() click to toggle source
# File lib/git_diff_map/patch.rb, line 56
def changed_methods
  lines = changed_lines
  lines
    .group_by{|l| l.number}
    .select{|_, v| v.size == 2}
    .select{|_, v| t = v.map(&:type); t.include?('-') && t.include?('+')}
    .select{|_, v| v.all?{|x| x.content =~ /def\s+\w+/}}
    .map{|line, v|
    sorted = v.sort_by(&:type)
    begin
      ChangedMethod.new(sorted.first, sorted.last, line, @file)
    rescue Method::InvalidAST => ex
      warn "Warning: #{ex}\n#{ex.backtrace.join("\n")}"if RuboCop::ConfigLoader.debug
    end
  }
    .compact
end