Sha256: cf36d37631d67c531f3479421eec887c1115e782cbc132c9d0e9befe90f442c4

Contents?: true

Size: 1.1 KB

Versions: 5

Compression:

Stored size: 1.1 KB

Contents

# frozen_string_literal: true

require "rexml/document"

module SlimLint
  # Outputs report as a Checkstyle XML document.
  class Reporter::CheckstyleReporter < Reporter
    def display_report(report)
      document = REXML::Document.new.tap do |d|
        d << REXML::XMLDecl.new
      end
      checkstyle = REXML::Element.new("checkstyle", document)

      report.lints.group_by(&:filename).map do |lint|
        map_file(lint, checkstyle)
      end

      log.log document.to_s
    end

    private

    def map_file(file, checkstyle)
      REXML::Element.new("file", checkstyle).tap do |f|
        path_name = file.first
        path_name = relative_path(file) if defined?(relative_path)
        f.attributes["name"] = path_name

        file.last.map { |o| map_offense(o, f) }
      end
    end

    def map_offense(offence, parent)
      REXML::Element.new("error", parent).tap do |e|
        e.attributes["line"] = offence.line
        e.attributes["severity"] = offence.error? ? "error" : "warning"
        e.attributes["message"] = offence.message
        e.attributes["source"] = "slim-lint"
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
slim_lint_standard-0.0.2.2 lib/slim_lint/reporter/checkstyle_reporter.rb
slim_lint_standard-0.0.2.1 lib/slim_lint/reporter/checkstyle_reporter.rb
slim_lint_standard-0.0.2 lib/slim_lint/reporter/checkstyle_reporter.rb
slim_lint_standard-0.0.1 lib/slim_lint/reporter/checkstyle_reporter.rb
slim_lint_standard-0.0.0 lib/slim_lint/reporter/checkstyle_reporter.rb