diff options
Diffstat (limited to 'tools/eslint/lib/formatters/checkstyle.js')
-rw-r--r-- | tools/eslint/lib/formatters/checkstyle.js | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/tools/eslint/lib/formatters/checkstyle.js b/tools/eslint/lib/formatters/checkstyle.js new file mode 100644 index 0000000000..5e98c8b131 --- /dev/null +++ b/tools/eslint/lib/formatters/checkstyle.js @@ -0,0 +1,68 @@ +/** + * @fileoverview CheckStyle XML reporter + * @author Ian Christian Myers + */ +"use strict"; + +//------------------------------------------------------------------------------ +// Helper Functions +//------------------------------------------------------------------------------ + +function getMessageType(message) { + if (message.fatal || message.severity === 2) { + return "error"; + } else { + return "warning"; + } +} + +function xmlEscape(s) { + return ("" + s).replace(/[<>&"']/g, function(c) { + switch (c) { + case "<": + return "<"; + case ">": + return ">"; + case "&": + return "&"; + case "\"": + return """; + case "'": + return "'"; + // no default + } + }); +} + +//------------------------------------------------------------------------------ +// Public Interface +//------------------------------------------------------------------------------ + +module.exports = function(results) { + + var output = ""; + + output += "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; + output += "<checkstyle version=\"4.3\">"; + + results.forEach(function(result) { + var messages = result.messages; + + output += "<file name=\"" + xmlEscape(result.filePath) + "\">"; + + messages.forEach(function(message) { + output += "<error line=\"" + xmlEscape(message.line) + "\" " + + "column=\"" + xmlEscape(message.column) + "\" " + + "severity=\"" + xmlEscape(getMessageType(message)) + "\" " + + "message=\"" + xmlEscape(message.message) + + (message.ruleId ? " (" + message.ruleId + ")" : "") + "\" />"; + }); + + output += "</file>"; + + }); + + output += "</checkstyle>"; + + return output; +}; |