solid-code
Version:
JavaScript code quality front-end
83 lines (73 loc) • 1.74 kB
JavaScript
var jshint = require('jshint').JSHINT;
var path = require('path');
var fs = require('fs');
module.exports = {
run: run
};
var jshintOptions = {
"es5": true,
"boss": true,
"node": true,
"strict": true,
"white": true,
"smarttabs": true,
"maxlen": 100,
"newcap": false,
"undef": true,
"unused": true,
"onecase": true,
"indent": 4
};
var jshintGlobals = {
require: true,
module: true,
console: true,
process: true
};
// returns list of errors through callback
function run(options, cb) {
"use strict";
console.assert(options, 'missing options');
console.assert(options.filename, 'missing input filename');
if (cb) {
console.assert(typeof cb === 'function', 'expected callback function');
}
fs.readFile(options.filename, 'utf-8', function onFileData(err, data) {
if (err) throw err;
if (!jshint(data, jshintOptions, jshintGlobals)) {
var errors = reporter(options.filename, jshint.errors);
console.assert(Array.isArray(errors), 'expected array of errors');
if (cb) {
cb(errors);
}
}
});
}
function reporter(filename, res) {
"use strict";
var len = res.length;
var str = "";
var errors = [];
res.forEach(function (r) {
var err = r;
str += "line " + err.line + ", col " +
err.character + ", " + err.reason + "\n";
errors.push({
line: err.line,
column: err.character,
reason: err.reason
});
});
if (str) {
console.log(str + len + " jshint error" +
((len === 1) ? "" : "s"));
}
return errors;
}
if (!module.parent) {
var filename = process.argv[2];
console.assert(filename, 'missing input filename');
run({
filename: filename
});
}