Sha256: 5f0cefed5608232212ef196859db559cd8a2b1b2bc6e8ebdea111037415d7aaa

Contents?: true

Size: 1.54 KB

Versions: 30

Compression:

Stored size: 1.54 KB

Contents

# frozen_string_literal: true

require_relative 'base_report'

module Reek
  module Report
    #
    # Generates a list of smells in XML format
    #
    # @public
    #
    class XMLReport < BaseReport
      require 'rexml/document'

      # @public
      def show
        document.write output: $stdout, indent: 2
        $stdout.puts
      end

      private

      def document
        REXML::Document.new.tap do |document|
          document << REXML::XMLDecl.new << checkstyle
        end
      end

      def checkstyle
        REXML::Element.new('checkstyle').tap do |checkstyle|
          smells.group_by(&:source).each do |source, source_smells|
            checkstyle << file(source, source_smells)
          end
        end
      end

      # @quality :reek:FeatureEnvy
      # @quality :reek:NestedIterators { max_allowed_nesting: 2 }
      def file(name, smells)
        REXML::Element.new('file').tap do |file|
          file.add_attribute 'name', File.realpath(name)
          smells.each do |smell|
            smell.lines.each do |line|
              file << error(smell, line)
            end
          end
        end
      end

      # @quality :reek:UtilityFunction
      def error(smell, line)
        REXML::Element.new('error').tap do |error|
          error.add_attributes 'column' => 0,
                               'line' => line,
                               'message' => smell.message,
                               'severity' => 'warning',
                               'source' => smell.smell_type
        end
      end
    end
  end
end

Version data entries

30 entries across 28 versions & 2 rubygems

Version Path
reek-6.3.0 lib/reek/report/xml_report.rb
reek-6.2.0 lib/reek/report/xml_report.rb
reek-6.1.4 lib/reek/report/xml_report.rb
reek-6.1.3 lib/reek/report/xml_report.rb
reek-6.1.2 lib/reek/report/xml_report.rb
reek-6.1.1 lib/reek/report/xml_report.rb
reek-6.1.0 lib/reek/report/xml_report.rb
reek-6.0.6 lib/reek/report/xml_report.rb
reek-6.0.5 lib/reek/report/xml_report.rb
reek-6.0.4 lib/reek/report/xml_report.rb
reek-6.0.3 lib/reek/report/xml_report.rb
reek-6.0.2 lib/reek/report/xml_report.rb
reek-6.0.1 lib/reek/report/xml_report.rb
reek-6.0.0 lib/reek/report/xml_report.rb
reek-5.6.0 lib/reek/report/xml_report.rb
reek-5.5.0 lib/reek/report/xml_report.rb
reek-5.4.1 lib/reek/report/xml_report.rb
reek-5.4.0 lib/reek/report/xml_report.rb
reek-5.3.2 lib/reek/report/xml_report.rb
reek-5.3.1 lib/reek/report/xml_report.rb