diff --git a/AUTHORS b/AUTHORS index 9608692..35bb56d 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1 +1,2 @@ -Sindre Sorhus (http://github.com/sindresorhus) +Sindre Sorhus (https://github.com/sindresorhus) +Radko Dinev (https://github.com/radkodinev) diff --git a/tasks/lib/check.js b/tasks/lib/check.js new file mode 100644 index 0000000..8df5206 --- /dev/null +++ b/tasks/lib/check.js @@ -0,0 +1,51 @@ +'use strict'; + +var path = require('path'); +var async = require('async'); +var chalk = require('chalk'); +var spawn = require('win-spawn'); +var grunt = require('grunt'); + +module.exports = function (files, options, cb) { + var failCount = 0; + var filesToCheck = files.filter(function (src) { + return path.basename(src)[0] !== '_' && grunt.file.exists(src); + }); + + async.eachLimit(filesToCheck, options.numCPUs, function (src, next) { + var bin; + var args; + + if (options.bundleExec) { + bin = 'bundle'; + args = ['exec', 'sass', '--check', src]; + } else { + bin = 'sass'; + args = ['--check', src]; + } + + grunt.verbose.writeln('Command: ' + bin + ' ' + args.join(' ')); + + grunt.verbose.writeln('Checking file ' + chalk.cyan(src) + ' syntax.'); + spawn(bin, args, { stdio: 'inherit' }) + .on('error', grunt.warn) + .on('close', function (code) { + if (code > 0) { + failCount++; + grunt.log.error('Checking file ' + chalk.cyan(src) + ' - ' + chalk.red('failed') + '.'); + } else { + grunt.verbose.ok('Checking file ' + chalk.cyan(src) + ' - ' + chalk.green('passed') + '.'); + } + + next(); + }); + }, function () { + if (failCount > 0) { + grunt.warn('Sass check failed for ' + failCount + ' files.'); + } else { + grunt.log.ok('All ' + chalk.cyan(filesToCheck.length) + ' files passed.'); + } + + cb(); + }); +}; diff --git a/tasks/sass.js b/tasks/sass.js index 600082a..1e6eea1 100644 --- a/tasks/sass.js +++ b/tasks/sass.js @@ -1,11 +1,5 @@ -/* - * grunt-contrib-sass - * http://gruntjs.com/ - * - * Copyright (c) 2013 Sindre Sorhus, contributors - * Licensed under the MIT license. - */ 'use strict'; + var path = require('path'); var dargs = require('dargs'); var numCPUs = require('os').cpus().length || 1; @@ -14,6 +8,8 @@ var chalk = require('chalk'); var spawn = require('win-spawn'); var which = require('which'); +var checkFilesSyntax = require('./lib/check'); + module.exports = function (grunt) { var bannerCallback = function (filename, banner) { grunt.verbose.writeln('Writing CSS banner for ' + filename); @@ -31,50 +27,6 @@ module.exports = function (grunt) { } }; - var checkFiles = function (files, options, cb) { - var failCount = 0; - var filesToCheck = files.filter(function (src) { - return path.basename(src)[0] !== '_' && grunt.file.exists(src); - }); - - async.eachLimit(filesToCheck, numCPUs, function (src, next) { - var bin; - var args; - - if (options.bundleExec) { - bin = 'bundle'; - args = ['exec', 'sass', '--check', src]; - } else { - bin = 'sass'; - args = ['--check', src]; - } - - grunt.verbose.writeln('Command: ' + bin + ' ' + args.join(' ')); - - grunt.verbose.writeln('Checking file ' + chalk.cyan(src) + ' syntax.'); - spawn(bin, args, { stdio: 'inherit' }) - .on('error', grunt.warn) - .on('close', function (code) { - if (code > 0) { - failCount++; - grunt.log.error('Checking file ' + chalk.cyan(src) + ' - ' + chalk.red('failed') + '.'); - } else { - grunt.verbose.ok('Checking file ' + chalk.cyan(src) + ' - ' + chalk.green('passed') + '.'); - } - - next(); - }); - }, function () { - if (failCount > 0) { - grunt.warn('Sass check failed for ' + failCount + ' files.'); - } else { - grunt.log.ok('All ' + chalk.cyan(filesToCheck.length) + ' files passed.'); - } - - cb(); - }); - }; - grunt.registerMultiTask('sass', 'Compile Sass to CSS', function () { var cb = this.async(); var options = this.options(); @@ -93,7 +45,9 @@ module.exports = function (grunt) { } if (options.check) { - checkFiles(this.filesSrc, options, cb); + options.numCPUs = numCPUs; + + checkFilesSyntax(this.filesSrc, options, cb); return; }