(function () {
'use strict';
var color = require("./color");
exports.logger = {
log: (console.log).bind(console),
err: (process.stderr.write).bind(process.stderr)
};
exports.setLogger = function (l) {
this.logger = l;
};
exports.makeReporter = function (logger, colorize, terse) {
return {
logger: logger,
colorize: colorize,
terse: terse,
report: function (file, lint) {
return exports.report.call(this, file, lint, this.colorize, this.terse);
}
};
};
exports.report = function (file, lint, colorize, terse) {
var line, pad, fileMessage,
errors,
logger = this.logger;
fileMessage = "\n" + (colorize ? color.bold(file) : file);
if (!lint.ok) {
// remove nulls
errors = lint.errors.filter(function (e) { return e; });
if (terse) {
errors.forEach(function (e) {
logger.log(file + ':' + e.line + ':' + e.character + ': ' + e.reason);
});
} else {
logger.log(fileMessage);
errors.forEach(function (e, i) {
pad = "#" + String(i + 1);
while (pad.length < 3) {
pad = ' ' + pad;
}
line = ' // Line ' + e.line + ', Pos ' + e.character;
logger.log(pad + ' ' + (colorize ? color.yellow(e.reason) : e.reason));
logger.log(' ' + (e.evidence || '').replace(/^\s+|\s+$/, "") +
(colorize ? color.grey(line) : line));
});
}
} else {
if (terse) {
logger.err(".");
} else {
logger.log(fileMessage + " is " + (colorize ? color.green('OK') : 'OK') + ".");
}
}
return lint.ok;
};
}());