UNPKG

1.97 kBJavaScriptView Raw
1/**
2 * @fileoverview JSLint XML reporter
3 * @author Ian Christian Myers
4 */
5"use strict";
6
7 //------------------------------------------------------------------------------
8 // Helper Functions
9 //------------------------------------------------------------------------------
10
11/**
12 * Replace special characters before write to output.
13 *
14 * Rules:
15 * - single quotes is the escape sequence for double-quotes
16 * - &lt; is the escape sequence for <
17 * - &gt; is the escape sequence for >
18 * - &quot; is the escape sequence for "
19 * - &apos; is the escape sequence for '
20 * - &amp; is the escape sequence for &
21 *
22 * @param {string} message to escape
23 * @returns {string} escaped message
24 */
25function escapeSpecialCharacters(message) {
26
27 message = message || "";
28 var pairs = {
29 "&": "&amp;",
30 "\"": "&quot;",
31 "'": "&apos;",
32 "<": "&lt;",
33 ">": "&gt;"
34 };
35
36 return message.replace(/[&"'<>]/g, function(c) {
37 return pairs[c];
38 });
39
40}
41
42//------------------------------------------------------------------------------
43// Public Interface
44//------------------------------------------------------------------------------
45
46module.exports = function(results) {
47
48 var output = "";
49
50 output += "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
51 output += "<jslint>";
52
53 results.forEach(function(result) {
54 var messages = result.messages;
55
56 output += "<file name=\"" + result.filePath + "\">";
57
58 messages.forEach(function(message) {
59 output += "<issue line=\"" + message.line + "\" " +
60 "char=\"" + message.column + "\" " +
61 "evidence=\"" + escapeSpecialCharacters(message.source) + "\" " +
62 "reason=\"" + escapeSpecialCharacters(message.message) +
63 (message.ruleId ? " (" + message.ruleId + ")" : "") + "\" />";
64 });
65
66 output += "</file>";
67
68 });
69
70 output += "</jslint>";
71
72 return output;
73};