class Brakeman::IgnoreConfig
def add_note warning, note
def add_note warning, note @changed = true @notes[warning.fingerprint] = note end
def already_ignored_entries_with_empty_notes
def already_ignored_entries_with_empty_notes @already_ignored.select { |i| i if i[:note].strip.empty? } end
def filter_ignored
Populate ignored_warnings and shown_warnings based on ignore
def filter_ignored @shown_warnings = [] @ignored_warnings = [] @used_fingerprints = Set.new @new_warnings.each do |w| if ignored? w @ignored_warnings << w else @shown_warnings << w end end @shown_warnings end
def ignore warning
def ignore warning @changed = true unless ignored? warning @ignored_fingerprints << warning.fingerprint end
def ignored? warning
def ignored? warning @used_fingerprints << warning.fingerprint @ignored_fingerprints.include? warning.fingerprint end
def initialize file, new_warnings
def initialize file, new_warnings @file = file @new_warnings = new_warnings @already_ignored = [] @ignored_fingerprints = Set.new @used_fingerprints = Set.new @notes = {} @shown_warnings = @ignored_warnings = nil @changed = false end
def note_for warning
Retrieve note for warning if it exists. Returns nil if no
def note_for warning if warning.is_a? Warning fingerprint = warning.fingerprint else fingerprint = warning[:fingerprint] end @already_ignored.each do |w| if fingerprint == w[:fingerprint] return w[:note] end end nil end
def obsolete_fingerprints
def obsolete_fingerprints (@ignored_fingerprints - @used_fingerprints).to_a end
def prune_obsolete
def prune_obsolete obsolete = obsolete_fingerprints.to_set @ignored_fingerprints -= obsolete @already_ignored.reject! do |w| if obsolete.include? w[:fingerprint] @changed = true end end end
def read_from_file file = @file
def read_from_file file = @file if File.exist? file begin @already_ignored = JSON.parse(File.read(file), :symbolize_names => true)[:ignored_warnings] rescue => e raise e, "\nError[#{e.class}] while reading brakeman ignore file: #{file}\n" end else Brakeman.alert "Could not find ignore configuration in #{file} (no file)" @already_ignored = [] end @already_ignored.each do |w| @ignored_fingerprints << w[:fingerprint] @notes[w[:fingerprint]] = w[:note] end end
def save_to_file warnings, file = @file
def save_to_file warnings, file = @file warnings = warnings.map do |w| if w.is_a? Warning w = w.to_hash(absolute_paths: false) end w[:note] = @notes[w[:fingerprint]] || "" w end.sort_by { |w| [w[:fingerprint], w[:line] || 0] } output = { :ignored_warnings => warnings, :brakeman_version => Brakeman::Version } File.open file, "w" do |f| f.puts JSON.pretty_generate(output) end end
def save_with_old
def save_with_old warnings = @ignored_warnings.dup # Only add ignored warnings not already ignored @already_ignored.each do |w| fingerprint = w[:fingerprint] unless @ignored_warnings.find { |ignored_warning| ignored_warning.fingerprint == fingerprint } warnings << w end end if @changed save_to_file warnings end end
def unignore warning
def unignore warning @ignored_fingerprints.delete warning.fingerprint if @already_ignored.reject! { |w|w[:fingerprint] == warning.fingerprint } @changed = true end end