ManageIQ/miq_bot

View on GitHub
app/workers/commit_monitor_handlers/commit_range/rubocop_checker/rubocop_results_filter.rb

Summary

Maintainability
A
0 mins
Test Coverage
module CommitMonitorHandlers
  module CommitRange
    class RubocopChecker
      class RubocopResultsFilter
        attr_reader :filtered

        def initialize(results, diff_details)
          @results      = results
          @diff_details = diff_details
          @filtered     = filter_rubocop_results
        end

        private

        def filter_rubocop_results
          filter_on_diff
          filter_void_warnings_in_spec_files

          @results["summary"]["offense_count"] =
            @results["files"].inject(0) { |sum, f| sum + f["offenses"].length }

          @results
        end

        def filter_on_diff
          @results["files"].each do |f|
            f["offenses"].select! do |o|
              o["severity"].in?(%w(error fatal)) ||
                @diff_details[f["path"]].include?(o["location"]["line"])
            end
          end
        end

        def filter_void_warnings_in_spec_files
          @results["files"].each do |f|
            next unless f["path"].match %r{(?:^|/)spec/.+_spec.rb}

            f["offenses"].reject! do |o|
              o["cop_name"].in?(%w(Void Lint/Void))
            end
          end
        end
      end
    end
  end
end