Sha256: 9784f4ceba168978921d36af118bd7bf6c99679dc2644259ee01a79855cfc860

Contents?: true

Size: 1.89 KB

Versions: 14

Compression:

Stored size: 1.89 KB

Contents

# encoding: utf-8
# frozen_string_literal: true

require 'ruby-progressbar'

module RuboCop
  module Formatter
    # This formatter displays a progress bar and shows details of offenses as
    # soon as they are detected.
    # This is inspired by the Fuubar formatter for RSpec by Jeff Kreeftmeijer.
    # https://github.com/jeffkreeftmeijer/fuubar
    class FuubarStyleFormatter < ClangStyleFormatter
      RESET_SEQUENCE = "\e[0m".freeze

      def started(target_files)
        super

        @severest_offense = nil

        file_phrase = target_files.count == 1 ? 'file' : 'files'

        # 185/407 files |====== 45 ======>                    |  ETA: 00:00:04
        # %c / %C       |       %w       >         %i         |       %e
        bar_format = " %c/%C #{file_phrase} |%w>%i| %e "

        @progressbar = ProgressBar.create(
          output: output,
          total: target_files.count,
          format: bar_format,
          autostart: false
        )
        with_color { @progressbar.start }
      end

      def file_finished(file, offenses)
        count_stats(offenses)

        unless offenses.empty?
          @progressbar.clear
          report_file(file, offenses)
        end

        with_color { @progressbar.increment }
      end

      def count_stats(offenses)
        super

        offenses = offenses.reject(&:corrected?)
        return if offenses.empty?

        offenses << @severest_offense if @severest_offense
        @severest_offense = offenses.max_by(&:severity)
      end

      def with_color
        if rainbow.enabled
          output.write colorize('', progressbar_color).chomp(RESET_SEQUENCE)
          yield
          output.write RESET_SEQUENCE
        else
          yield
        end
      end

      def progressbar_color
        if @severest_offense
          COLOR_FOR_SEVERITY[@severest_offense.severity.name]
        else
          :green
        end
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 2 rubygems

Version Path
fluent-plugin-detect-memb-exceptions-0.0.2 vendor/bundle/ruby/2.0.0/gems/rubocop-0.42.0/lib/rubocop/formatter/fuubar_style_formatter.rb
fluent-plugin-detect-memb-exceptions-0.0.1 vendor/bundle/ruby/2.0.0/gems/rubocop-0.42.0/lib/rubocop/formatter/fuubar_style_formatter.rb
rubocop-0.43.0 lib/rubocop/formatter/fuubar_style_formatter.rb
rubocop-0.42.0 lib/rubocop/formatter/fuubar_style_formatter.rb
rubocop-0.41.2 lib/rubocop/formatter/fuubar_style_formatter.rb
rubocop-0.41.1 lib/rubocop/formatter/fuubar_style_formatter.rb
rubocop-0.41.0 lib/rubocop/formatter/fuubar_style_formatter.rb
rubocop-0.40.0 lib/rubocop/formatter/fuubar_style_formatter.rb
rubocop-0.39.0 lib/rubocop/formatter/fuubar_style_formatter.rb
rubocop-0.38.0 lib/rubocop/formatter/fuubar_style_formatter.rb
rubocop-0.37.2 lib/rubocop/formatter/fuubar_style_formatter.rb
rubocop-0.37.1 lib/rubocop/formatter/fuubar_style_formatter.rb
rubocop-0.37.0 lib/rubocop/formatter/fuubar_style_formatter.rb
rubocop-0.36.0 lib/rubocop/formatter/fuubar_style_formatter.rb