gulp-htmlhint-checkstyle-file-reporter
Version:
gulp-htmlhint checkstyle file reporter
95 lines (82 loc) • 2.21 kB
JavaScript
/**
* @author Kenichiro Murata
* @copyright 2016 Kenichiro Murata
* @license MIT
* @fileoverview gulp-htmlhint checkstyle file reporter.
*/
var fs = require('fs')
var errorFileCount = 0
function _reporter (results) {
var files = {}
var out = []
var pairs = {
'&': '&',
'"': '"',
"'": ''',
'<': '<',
'>': '>'
}
var fileName, i, issue, errorMessage
function encode (s) {
for (var r in pairs) {
if (typeof (s) !== 'undefined') {
s = s.replace(new RegExp(r, 'g'), pairs[r])
}
}
return s || ''
}
results.forEach(function (result) {
// Register the file
result.file = result.file.replace(/^\.\//, '')
if (!files[result.file]) {
files[result.file] = []
}
// Create the error message
errorMessage = result.error.reason
// Add the error
files[result.file].push({
severity: result.error.severity,
line: result.error.line,
column: result.error.character,
message: errorMessage,
source: 'htmlhint.' + result.error.code
})
})
for (fileName in files) {
if (files.hasOwnProperty(fileName)) {
out.push('\t<file name="' + fileName + '">')
for (i = 0; i < files[fileName].length; i++) {
issue = files[fileName][i]
out.push(
'\t\t<error ' +
'line="' + issue.line + '" ' +
'column="' + issue.column + '" ' +
'severity="' + issue.severity + '" ' +
'message="' + encode(issue.message) + '" ' +
'source="' + encode(issue.source) + '" ' +
'/>'
)
}
out.push('\t</file>')
}
}
var filename = process.env.HTMLHINT_CHECKSTYLE_FILE || 'htmlhint-checkstyle.xml'
filename += '.tmp.' + errorFileCount
fs.writeFileSync(filename, out.join('\n'))
}
module.exports = function (file) {
errorFileCount++
return _reporter(file.htmlhint.messages.map(function (msg) {
return {
file: msg.file,
error: {
severity: msg.error.type,
character: msg.error.col,
code: msg.error.rule.id,
line: msg.error.line,
reason: msg.error.message
}
}
}))
}