UNPKG

solid-code

Version:

JavaScript code quality front-end

103 lines (88 loc) 2.91 kB
var path = require('path'); var fs = require('fs'); var check = require('check-types'); function discoverSourceFiles(files) { check.verifyArray(files, 'expect list of filenames'); var glob = require("glob"); var filenames = []; files.forEach(function (shortName) { if (fs.existsSync(shortName)) { var stat = fs.lstatSync(shortName); if (stat.isDirectory()) { log.debug(shortName, 'is a folder'); shortName = path.join(shortName, '*.js'); } } var foundMatches = glob.sync(shortName); var discovered = []; foundMatches.forEach(function (match) { if (!fs.lstatSync(match).isDirectory(match)) { discovered.push(match); } }); filenames = filenames.concat(discovered); }); filenames = filenames.map(function (shortName) { return path.resolve(shortName); }); return filenames; } var testing = require('./testing'); var preload = require('./preload'); var complexity = require('./complexity'); var reqs = require('./reqs'); var jshint = require('./jshint-wrapper'); function solidFiles(files, callback) { check.verifyArray(files, 'expect list of filenames'); if (callback) { check.verifyFunction(callback, 'expected call back function'); } preload.run(files); testing(files, function (failed, sourceAndTestFiles) { check.verifyArray(sourceAndTestFiles, 'expected to get back list of filenames'); console.log(); complexity.run(sourceAndTestFiles); console.log(); /* enable once required score makes sense for AMD reqs.run(files, { colors: true }); console.log(); */ files.forEach(function (filename) { jshint.run({ filename: filename }); }); if (callback) { callback(sourceAndTestFiles); } }); } function watchFilesForChanges(filenames, sourceAndTestFiles) { console.assert(Array.isArray(filenames), 'could not discover source files'); console.assert(Array.isArray(sourceAndTestFiles), 'expected to get back list of filenames'); if (args.watch && sourceAndTestFiles.length) { console.log('watching', sourceAndTestFiles.length, 'files...'); var watch = require('nodewatch'); sourceAndTestFiles.forEach(function (filename) { watch.add(filename); }); watch.onChange(function (file, prev, curr, action){ log.warn('file', file, action); solidFiles(filenames); }); } } function run(options) { console.assert(options, 'missing options'); console.assert(Array.isArray(options.files), 'expect list of files in options.files'); var filenames = discoverSourceFiles(options.files); console.assert(Array.isArray(filenames), 'could not discover source files'); solidFiles(filenames, function (sourceAndTestFiles) { check.verifyArray(sourceAndTestFiles, 'expected to get back list of filenames'); watchFilesForChanges(filenames, sourceAndTestFiles); }); } module.exports.run = run;