ut-tools
Version:
Build and Release management automation package.
66 lines (53 loc) • 1.77 kB
JavaScript
/**
* @fileoverview CheckStyle XML reporter
* @author Ian Christian Myers
*/
// modified to output relative paths
;
const path = require('path');
const xmlEscape = function(s) {
return (`${s}`).replace(/[<>&"'\x00-\x1F\x7F\u0080-\uFFFF]/g, c => { // eslint-disable-line no-control-regex
switch (c) {
case '<':
return '<';
case '>':
return '>';
case '&':
return '&';
case '"':
return '"';
case "'":
return ''';
default:
return `&#${c.charCodeAt(0)};`;
}
});
};
function getMessageType(message) {
if (message.fatal || message.severity === 2) {
return 'error';
}
return 'warning';
}
module.exports = function(results) {
let output = '';
output += '<?xml version="1.0" encoding="utf-8"?>';
output += '<checkstyle version="4.3">';
const cwd = process.cwd();
results.forEach(result => {
const messages = result.messages;
output += `<file name="${xmlEscape(path.relative(cwd, result.filePath))}">`;
messages.forEach(message => {
output += [
`<error line="${xmlEscape(message.line)}"`,
`column="${xmlEscape(message.column)}"`,
`severity="${xmlEscape(getMessageType(message))}"`,
`message="${xmlEscape(message.message)}${message.ruleId ? ` (${message.ruleId})` : ''}"`,
`source="${message.ruleId ? xmlEscape(`eslint.rules.${message.ruleId}`) : ''}" />`
].join(' ');
});
output += '</file>';
});
output += '</checkstyle>';
return output;
};