UNPKG

2.05 kBJavaScriptView Raw
1/**
2 * @fileoverview CheckStyle XML reporter
3 * @author Ian Christian Myers
4 */
5"use strict";
6
7//------------------------------------------------------------------------------
8// Helper Functions
9//------------------------------------------------------------------------------
10
11function getMessageType(message, rules) {
12
13 // TODO: Get rule severity in a better way
14 var severity = null;
15
16 if (message.fatal) {
17 return "error";
18 }
19
20 severity = rules[message.ruleId][0] || rules[message.ruleId];
21
22 if (severity === 2) {
23 return "error";
24 }
25
26 return "warning";
27}
28
29function xmlEscape(s) {
30 return ("" + s).replace(/[<>&"']/g, function(c) {
31 switch(c) {
32 case "<":
33 return "&lt;";
34 case ">":
35 return "&gt;";
36 case "&":
37 return "&amp;";
38 case "\"":
39 return "&quot;";
40 case "'":
41 return "&apos;";
42 }
43 });
44}
45
46//------------------------------------------------------------------------------
47// Public Interface
48//------------------------------------------------------------------------------
49
50module.exports = function(results, config) {
51
52 var output = "",
53 rules = config.rules || {};
54
55 output += "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
56 output += "<checkstyle version=\"4.3\">";
57
58 results.forEach(function(result) {
59 var messages = result.messages;
60
61 output += "<file name=\"" + xmlEscape(result.filePath) + "\">";
62
63 messages.forEach(function(message) {
64 output += "<error line=\"" + xmlEscape(message.line) + "\" " +
65 "column=\"" + xmlEscape(message.column) + "\" " +
66 "severity=\"" + xmlEscape(getMessageType(message, rules)) + "\" " +
67 "message=\"" + xmlEscape(message.message) +
68 (message.ruleId ? " (" + message.ruleId + ")" : "") + "\" />";
69 });
70
71 output += "</file>";
72
73 });
74
75 output += "</checkstyle>";
76
77 return output;
78};