class SlimLint::Reporter::JsonReporter

Outputs report as a JSON document.

Public Instance Methods

display_report(report) click to toggle source
# File lib/slim_lint/reporter/json_reporter.rb, line 6
def display_report(report)
  lints = report.lints
  grouped = lints.group_by(&:filename)

  report_hash = {
    metadata: metadata,
    files: grouped.map { |l| map_file(l) },
    summary: {
      offense_count: lints.length,
      target_file_count: grouped.length,
      inspected_file_count: report.files.length,
    },
  }

  log.log report_hash.to_json
end

Private Instance Methods

map_file(file) click to toggle source
# File lib/slim_lint/reporter/json_reporter.rb, line 34
def map_file(file)
  {
    path: file.first,
    offenses: file.last.map { |o| map_offense(o) },
  }
end
map_offense(offense) click to toggle source
# File lib/slim_lint/reporter/json_reporter.rb, line 41
def map_offense(offense)
  {
    severity: offense.severity,
    message: offense.message,
    location: {
      line: offense.line,
    },
    linter: offense.linter&.name,
  }
end
metadata() click to toggle source
# File lib/slim_lint/reporter/json_reporter.rb, line 25
def metadata
  {
    slim_lint_version: SlimLint::VERSION,
    ruby_engine: RUBY_ENGINE,
    ruby_patchlevel: RUBY_PATCHLEVEL.to_s,
    ruby_platform: RUBY_PLATFORM,
  }
end