UNPKG

solid-code

Version:

JavaScript code quality front-end

83 lines (73 loc) 1.74 kB
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 }); }