UNPKG

1.7 kBJavaScriptView Raw
1/**
2 * @fileoverview CheckStyle XML reporter
3 * @author Ian Christian Myers
4 */
5"use strict";
6
7const xmlEscape = require("../util/xml-escape");
8
9//------------------------------------------------------------------------------
10// Helper Functions
11//------------------------------------------------------------------------------
12
13/**
14 * Returns the severity of warning or error
15 * @param {Object} message message object to examine
16 * @returns {string} severity level
17 * @private
18 */
19function getMessageType(message) {
20 if (message.fatal || message.severity === 2) {
21 return "error";
22 }
23 return "warning";
24
25}
26
27//------------------------------------------------------------------------------
28// Public Interface
29//------------------------------------------------------------------------------
30
31module.exports = function(results) {
32
33 let output = "";
34
35 output += "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
36 output += "<checkstyle version=\"4.3\">";
37
38 results.forEach(result => {
39 const messages = result.messages;
40
41 output += `<file name="${xmlEscape(result.filePath)}">`;
42
43 messages.forEach(message => {
44 output += [
45 `<error line="${xmlEscape(message.line)}"`,
46 `column="${xmlEscape(message.column)}"`,
47 `severity="${xmlEscape(getMessageType(message))}"`,
48 `message="${xmlEscape(message.message)}${message.ruleId ? ` (${message.ruleId})` : ""}"`,
49 `source="${message.ruleId ? xmlEscape(`eslint.rules.${message.ruleId}`) : ""}" />`
50 ].join(" ");
51 });
52
53 output += "</file>";
54
55 });
56
57 output += "</checkstyle>";
58
59 return output;
60};