1 | /**
|
2 | * @fileoverview JSLint XML reporter
|
3 | * @author Ian Christian Myers
|
4 | */
|
5 | ;
|
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 | * - < is the escape sequence for <
|
17 | * - > is the escape sequence for >
|
18 | * - " is the escape sequence for "
|
19 | * - ' is the escape sequence for '
|
20 | * - & is the escape sequence for &
|
21 | *
|
22 | * @param {string} message to escape
|
23 | * @returns {string} escaped message
|
24 | */
|
25 | function escapeSpecialCharacters(message) {
|
26 |
|
27 | message = message || "";
|
28 | var pairs = {
|
29 | "&": "&",
|
30 | "\"": """,
|
31 | "'": "'",
|
32 | "<": "<",
|
33 | ">": ">"
|
34 | };
|
35 |
|
36 | return message.replace(/[&"'<>]/g, function(c) {
|
37 | return pairs[c];
|
38 | });
|
39 |
|
40 | }
|
41 |
|
42 | //------------------------------------------------------------------------------
|
43 | // Public Interface
|
44 | //------------------------------------------------------------------------------
|
45 |
|
46 | module.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 | };
|