Sha256: 016836dc9c9838d1d9706735d416348b55097dbedd59e20eaf6bb83cd0375b56

Contents?: true

Size: 1.64 KB

Versions: 201

Compression:

Stored size: 1.64 KB

Contents

# frozen_string_literal: true

module RuboCop
  module Formatter
    # This formatter formats report data as GitHub Workflow commands resulting
    # in GitHub check annotations when run within GitHub Actions.
    class GitHubActionsFormatter < BaseFormatter
      ESCAPE_MAP = { '%' => '%25', "\n" => '%0A', "\r" => '%0D' }.freeze

      def started(_target_files)
        @offenses_for_files = {}
      end

      def file_finished(file, offenses)
        @offenses_for_files[file] = offenses unless offenses.empty?
      end

      def finished(_inspected_files)
        @offenses_for_files.each do |file, offenses|
          offenses.each do |offense|
            report_offense(file, offense)
          end
        end
        output.puts
      end

      private

      def github_escape(string)
        string.gsub(Regexp.union(ESCAPE_MAP.keys), ESCAPE_MAP)
      end

      def minimum_severity_to_fail
        @minimum_severity_to_fail ||= begin
          # Unless given explicitly as `fail_level`, `:info` severity offenses do not fail
          name = options.fetch(:fail_level, :refactor)
          RuboCop::Cop::Severity.new(name)
        end
      end

      def github_severity(offense)
        offense.severity < minimum_severity_to_fail ? 'warning' : 'error'
      end

      def report_offense(file, offense)
        output.printf(
          "\n::%<severity>s file=%<file>s,line=%<line>d,col=%<column>d::%<message>s",
          severity: github_severity(offense),
          file: PathUtil.smart_path(file),
          line: offense.line,
          column: offense.real_column,
          message: github_escape(offense.message)
        )
      end
    end
  end
end

Version data entries

201 entries across 194 versions & 20 rubygems

Version Path
rubocop-1.74.0 lib/rubocop/formatter/github_actions_formatter.rb
rubocop-1.73.2 lib/rubocop/formatter/github_actions_formatter.rb
siteimprove_api_client-1.0.1 vendor/bundle/ruby/3.2.0/gems/rubocop-1.73.1/lib/rubocop/formatter/github_actions_formatter.rb
rubocop-1.73.1 lib/rubocop/formatter/github_actions_formatter.rb
rubocop-1.73.0 lib/rubocop/formatter/github_actions_formatter.rb
rubocop-1.72.2 lib/rubocop/formatter/github_actions_formatter.rb
rubocop-1.72.1 lib/rubocop/formatter/github_actions_formatter.rb
rubocop-1.72.0 lib/rubocop/formatter/github_actions_formatter.rb
rubocop-1.71.2 lib/rubocop/formatter/github_actions_formatter.rb
tailscale_middleware-0.0.3 vendor/cache/ruby/3.4.0/gems/rubocop-1.71.1/lib/rubocop/formatter/github_actions_formatter.rb
rubocop-1.71.1 lib/rubocop/formatter/github_actions_formatter.rb
rubocop-1.71.0 lib/rubocop/formatter/github_actions_formatter.rb
rubocop-1.70.0 lib/rubocop/formatter/github_actions_formatter.rb
minato_ruby_api_client-0.2.2 vendor/bundle/ruby/3.2.0/gems/rubocop-1.64.1/lib/rubocop/formatter/github_actions_formatter.rb
rubocop-1.69.2 lib/rubocop/formatter/github_actions_formatter.rb
rubocop-1.69.1 lib/rubocop/formatter/github_actions_formatter.rb
rubocop-1.69.0 lib/rubocop/formatter/github_actions_formatter.rb
rubocop-1.68.0 lib/rubocop/formatter/github_actions_formatter.rb
rubocop-1.67.0 lib/rubocop/formatter/github_actions_formatter.rb
rubocop-1.66.1 lib/rubocop/formatter/github_actions_formatter.rb