Sha256: 6e4eedb98974a4653728f4d83f64840928c95c8b0c8306bdccee938e23ffdc37
Contents?: true
Size: 1.55 KB
Versions: 6
Compression:
Stored size: 1.55 KB
Contents
require 'rexml/document' module Pronto module Formatter class CheckstyleFormatter def initialize @output = '' end def format(messages, _) open_xml process_messages(messages) close_xml @output end private def open_xml @document = REXML::Document.new.tap do |d| d << REXML::XMLDecl.new end @checkstyle = REXML::Element.new('checkstyle', @document) end def process_messages(messages) group_messages(messages).map do |path, path_messages| REXML::Element.new('file', @checkstyle).tap do |file| file.attributes['name'] = path add_file_messages(path_messages, file) end end end def group_messages(messages) messages.group_by { |message| message.path } end def add_file_messages(path_messages, file) path_messages.each do |message| REXML::Element.new('error', file).tap do |e| e.attributes['line'] = message.line.new_lineno if message.line e.attributes['severity'] = to_checkstyle_severity(message.level) e.attributes['message'] = message.msg e.attributes['source'] = 'com.puppycrawl.tools.checkstyle.pronto' end end end def close_xml @document.write(@output, 2) end def to_checkstyle_severity(pronto_level) case pronto_level when :error, :fatal then 'error' else pronto_level.to_s end end end end end
Version data entries
6 entries across 6 versions & 1 rubygems