UNPKG

1.05 kBJavaScriptView Raw
1// eslint-disable-next-line no-control-regex
2const xmlEscape = s => (`${s}`).replace(/[<>&"'\x00-\x1F\x7F\u0080-\uFFFF]/g, c => {
3 switch (c) {
4 case '<':
5 return '&lt;';
6 case '>':
7 return '&gt;';
8 case '&':
9 return '&amp;';
10 case '"':
11 return '&quot;';
12 case '\'':
13 return '&apos;';
14 default:
15 return `&#${c.charCodeAt(0)};`;
16 }
17});
18
19module.exports = results => {
20 const files = results.map(file => {
21 const warnings = file.warnings.map(({column, line, text}) => {
22 const css = file._postcssResult && file._postcssResult.css;
23 const lines = css && css.split('\n') || [];
24 const evidence = lines[line - 1];
25
26 return [
27 `<issue line="${line}"`,
28 ` char="${column}"`,
29 ` evidence="${evidence ? xmlEscape(evidence) : ''}"`,
30 ` reason="${xmlEscape(text)}" />`
31 ].join('');
32 });
33
34 return `<file name="${file.source}">${warnings.join('')}</file>`;
35 });
36
37 return `<?xml version="1.0" encoding="utf-8"?><jslint>${files.join('')}</jslint>`;
38};