class CC::Analyzer::SourceFingerprint

Attributes

issue[R]

Public Class Methods

new(issue) click to toggle source
# File lib/cc/analyzer/source_fingerprint.rb, line 6
def initialize(issue)
  @issue = issue
end

Public Instance Methods

compute() click to toggle source
# File lib/cc/analyzer/source_fingerprint.rb, line 10
def compute
  md5 = Digest::MD5.new
  md5 << issue.path
  md5 << issue.check_name.to_s
  md5 << relevant_source.gsub(/\s+/, "") if relevant_source
  md5.hexdigest
end

Private Instance Methods

raw_source() click to toggle source
# File lib/cc/analyzer/source_fingerprint.rb, line 30
def raw_source
  @raw_source ||=
    if File.file?(issue.path)
      File.read(issue.path)
    else
      ""
    end
end
relevant_source() click to toggle source
# File lib/cc/analyzer/source_fingerprint.rb, line 22
def relevant_source
  source = SourceExtractor.new(raw_source).extract(issue.location)

  if source && !source.empty?
    source.encode(Encoding::UTF_8, "binary", invalid: :replace, undef: :replace, replace: "")
  end
end