Class: RuboCop::Formatter::WorstOffendersFormatter Private

Inherits:
BaseFormatter
  • Object
show all
Defined in:
lib/rubocop/formatter/worst_offenders_formatter.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

This formatter displays the list of offensive files, sorted by number of offenses with the worst offenders first.

Here's the format:

26 this/file/is/really/bad.rb 3 just/ok.rb

29 Total in 2 files

Instance Attribute Summary collapse

Attributes inherited from BaseFormatter

#options, #output

Instance Method Summary collapse

Methods inherited from BaseFormatter

#file_started, #initialize

Constructor Details

This class inherits a constructor from RuboCop::Formatter::BaseFormatter

Instance Attribute Details

#offense_countsObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



17
18
19
# File 'lib/rubocop/formatter/worst_offenders_formatter.rb', line 17

def offense_counts
  @offense_counts
end

Instance Method Details

#file_finished(file, offenses) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



24
25
26
27
28
29
# File 'lib/rubocop/formatter/worst_offenders_formatter.rb', line 24

def file_finished(file, offenses)
  return if offenses.empty?

  path = Pathname.new(file).relative_path_from(Pathname.new(Dir.pwd))
  @offense_counts[path] = offenses.size
end

#finished(_inspected_files) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



31
32
33
# File 'lib/rubocop/formatter/worst_offenders_formatter.rb', line 31

def finished(_inspected_files)
  report_summary(@offense_counts)
end

#ordered_offense_counts(offense_counts) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

rubocop:enable Metrics/AbcSize



55
56
57
# File 'lib/rubocop/formatter/worst_offenders_formatter.rb', line 55

def ordered_offense_counts(offense_counts)
  offense_counts.sort_by { |k, v| [-v, k] }.to_h
end

#report_summary(offense_counts) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

rubocop:disable Metrics/AbcSize



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/rubocop/formatter/worst_offenders_formatter.rb', line 36

def report_summary(offense_counts)
  per_file_counts = ordered_offense_counts(offense_counts)
  total_count = total_offense_count(offense_counts)
  file_count = per_file_counts.size

  output.puts

  column_width = total_count.to_s.length + 2
  per_file_counts.each do |file_name, count|
    output.puts "#{count.to_s.ljust(column_width)}#{file_name}\n"
  end

  output.puts '--'
  output.puts "#{total_count}  Total in #{file_count} files"

  output.puts
end

#started(target_files) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



19
20
21
22
# File 'lib/rubocop/formatter/worst_offenders_formatter.rb', line 19

def started(target_files)
  super
  @offense_counts = {}
end

#total_offense_count(offense_counts) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



59
60
61
# File 'lib/rubocop/formatter/worst_offenders_formatter.rb', line 59

def total_offense_count(offense_counts)
  offense_counts.values.sum
end