class RuboCop::Formatter::MarkdownFormatter

This formatter displays the report data in markdown

def file_finished(file, offenses)

def file_finished(file, offenses)
  files << Struct.new(:path, :offenses).new(file, offenses)
  summary.offense_count += offenses.count
end

def finished(inspected_files)

def finished(inspected_files)
  summary.inspected_files = inspected_files
  render_markdown
end

def initialize(output, options = {})

def initialize(output, options = {})
  super
  @files = []
  @summary = Struct.new(:offense_count, :inspected_files, :target_files).new(0)
end

def possible_ellipses(location)

def possible_ellipses(location)
  location.single_line? ? '' : ' ...'
end

def render_markdown

def render_markdown
  n_files = pluralize(summary.inspected_files.count, 'file')
  n_offenses = pluralize(summary.offense_count, 'offense', no_for_zero: true)
  output.write "# RuboCop Inspection Report\n\n"
  output.write "#{n_files} inspected, #{n_offenses} detected:\n\n"
  write_file_messages
end

def started(target_files)

def started(target_files)
  summary.target_files = target_files
end

def write_code(offense)

def write_code(offense)
  code = offense.location.source_line + possible_ellipses(offense.location)
  output.write "    ```rb\n    #{code}\n    ```\n\n" unless code.blank?
end

def write_context(offense)

def write_context(offense)
  output.write(
    "  * **Line # #{offense.location.line} - #{offense.severity}:** #{offense.message}\n\n"
  )
end

def write_file_messages

def write_file_messages
  files.each do |file|
    next if file.offenses.empty?
    write_heading(file)
    file.offenses.each do |offense|
      write_context(offense)
      write_code(offense)
    end
  end
end

def write_heading(file)

def write_heading(file)
  filename = relative_path(file.path)
  n_offenses = pluralize(file.offenses.count, 'offense')
  output.write "### #{filename} - (#{n_offenses})\n"
end