Sha256: 047b7f8a985c1b415c7048c5a230a6d0e23800c1b402949474ce824db8ceb65d

Contents?: true

Size: 1.96 KB

Versions: 330

Compression:

Stored size: 1.96 KB

Contents

# 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"

      def initialize(*output)
        @severest_offense = nil

        super
      end

      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

330 entries across 301 versions & 28 rubygems

Version Path
zuora_connect_ui-0.8.0 vendor/ruby/2.6.0/gems/rubocop-0.72.0/lib/rubocop/formatter/fuubar_style_formatter.rb
zuora_connect_ui-0.8.0 vendor/ruby/2.6.0/gems/rubocop-0.74.0/lib/rubocop/formatter/fuubar_style_formatter.rb
rubocop-0.74.0 lib/rubocop/formatter/fuubar_style_formatter.rb
rubocop-0.73.0 lib/rubocop/formatter/fuubar_style_formatter.rb
zuora_connect_ui-0.7.1 vendor/ruby/2.6.0/gems/rubocop-0.72.0/lib/rubocop/formatter/fuubar_style_formatter.rb
zuora_connect_ui-0.7.0 vendor/ruby/2.6.0/gems/rubocop-0.72.0/lib/rubocop/formatter/fuubar_style_formatter.rb
rubocop-0.72.0 lib/rubocop/formatter/fuubar_style_formatter.rb
rubocop-0.71.0 lib/rubocop/formatter/fuubar_style_formatter.rb
rubocop-0.70.0 lib/rubocop/formatter/fuubar_style_formatter.rb
rubocop-0.69.0 lib/rubocop/formatter/fuubar_style_formatter.rb