class RuboCop::Formatter::PacmanFormatter

This formatter prints a PACDOT per every file to be analyzed. Pacman will “eat” one PACDOT per file when no offense is detected. Otherwise it will print a Ghost. This is inspired by the Pacman formatter for RSpec by Carlos Rojas. github.com/go-labs/rspec_pacman_formatter

Constants

FALLBACK_TERMINAL_WIDTH
GHOST
PACDOT
PACMAN

Attributes

progress_line[RW]

Public Class Methods

new(output, options = {}) click to toggle source
Calls superclass method
# File lib/rubocop/formatter/pacman_formatter.rb, line 19
def initialize(output, options = {})
  super
  @progress_line = ''
  @total_files   = 0
  @repetitions   = 0
end

Public Instance Methods

cols() click to toggle source
# File lib/rubocop/formatter/pacman_formatter.rb, line 50
def cols
  @cols ||= begin
    _height, width = $stdout.winsize
    width.nil? || width.zero? ? FALLBACK_TERMINAL_WIDTH : width
  end
end
file_finished(file, offenses) click to toggle source
# File lib/rubocop/formatter/pacman_formatter.rb, line 37
def file_finished(file, offenses)
  count_stats(offenses) unless offenses.empty?
  next_step(offenses)
  report_file(file, offenses)
end
file_started(_file, _options) click to toggle source
# File lib/rubocop/formatter/pacman_formatter.rb, line 33
def file_started(_file, _options)
  step(PACMAN)
end
next_step(offenses) click to toggle source
# File lib/rubocop/formatter/pacman_formatter.rb, line 43
def next_step(offenses)
  return step('.') if offenses.empty?

  ghost_color = COLOR_FOR_SEVERITY[offenses.last.severity.name]
  step(colorize(GHOST, ghost_color))
end
pacdots(number) click to toggle source
# File lib/rubocop/formatter/pacman_formatter.rb, line 64
def pacdots(number)
  @progress_line = PACDOT * number
end
started(target_files) click to toggle source
Calls superclass method
# File lib/rubocop/formatter/pacman_formatter.rb, line 26
def started(target_files)
  super
  @total_files = target_files.size
  output.puts "Eating #{pluralize(target_files.size, 'file')}"
  update_progress_line
end
step(character) click to toggle source
# File lib/rubocop/formatter/pacman_formatter.rb, line 68
def step(character)
  regex = /#{Regexp.quote(PACMAN)}|#{Regexp.quote(PACDOT)}/
  @progress_line = @progress_line.sub(regex, character)
  output.printf("%<line>s\r", line: @progress_line)
  return unless /ᗣ|\./.match?(@progress_line[-1])

  @repetitions += 1
  output.puts
  update_progress_line
end
update_progress_line() click to toggle source
# File lib/rubocop/formatter/pacman_formatter.rb, line 57
def update_progress_line
  return pacdots(@total_files) unless @total_files > cols
  return pacdots(cols) unless (@total_files / cols).eql?(@repetitions)

  pacdots((@total_files - (cols * @repetitions)))
end