description and source-coderun = function () {
var options = this.options,
args = this.args;
var fileCount = 0,
changedFileCount = 0,
unVerifiedFiles = [];
function verifyActionHandler(src) {
unVerifiedFiles.push(src);
}
function verifyAndWriteActionHandler(src, result) {
grunt.verbose.writeln(options.dest + src);
grunt.file.write(options.dest + src, result);
changedFileCount++;
}
function convertCamelCaseToUnderScore(config) {
var underscoreKey;
_.forEach([config.js, config.css, config.html], function(conf) {
_.forEach(conf, function(value, key) {
underscoreKey = stringUtils.underscored(key);
if ("fileTypes" !== key && key !== underscoreKey) {
conf[underscoreKey] = value;
delete conf[key];
}
});
});
}
function getConfig() {
var config,
rcFile = require("rc")("jsbeautifier", {});
if (options.config || !_.isEqual(rcFile, {})) {
var baseConfig = options.config ? grunt.file.readJSON(path.resolve(options.config)) : rcFile;
config = {
js: {},
css: {},
html: {}
};
if (!baseConfig.js && !baseConfig.css && !baseConfig.html) {
_.extend(config.js, baseConfig);
_.extend(config.css, baseConfig);
_.extend(config.html, baseConfig);
}
_.extend(config.js, baseConfig.js);
_.extend(config.css, baseConfig.css);
_.extend(config.html, baseConfig.html);
_.extend(config.js, options.js);
_.extend(config.css, options.css);
_.extend(config.html, options.html);
} else {
config = options;
}
config.js.fileTypes = _.union(config.js.fileTypes, [".js", ".json", '.es6']);
config.css.fileTypes = _.union(config.css.fileTypes, [".css"]);
config.html.fileTypes = _.union(config.html.fileTypes, [".html"]);
grunt.verbose.writeln("Beautify config before converting camelcase to underscore: " + JSON.stringify(config));
convertCamelCaseToUnderScore(config);
grunt.verbose.writeln("Using beautify config: " + JSON.stringify(config));
return config;
}
var sourceFiles = this.task.files,
done = this.task.async();
if ((sourceFiles && sourceFiles.length > 0) || !_.isEmpty(args.file)) {
if (!_.isEmpty(options.dest)) {
grunt.verbose.writeln("All beautified files will be stored under \"" + options.dest + "\" folder");
if (!stringUtils.endsWith(options.dest, "/")) {
options.dest += "/";
}
}
grunt.verbose.writeln("Using mode=\"" + options.mode + "\"...");
var actionHandler = "VERIFY_ONLY" === options.mode ? verifyActionHandler : verifyAndWriteActionHandler,
config = getConfig();
addJsNewLine = config.js.end_with_newline !== false;
jsBeautifyVersion(options.jsBeautifyVersion, function(error) {
if (error) {
grunt.fail.fatal("Unable to update js-beautify version to " + options.jsBeautifyVersion + " due to \n" + error);
return done(error);
}
var q = async.queue(function(src, callback) {
if (grunt.file.isDir(src)) {
callback();
return;
}
beautify(src, config, actionHandler);
fileCount++;
callback();
}, 10);
q.drain = function() {
if (unVerifiedFiles.length) {
grunt.fail.warn("The following files are not beautified:\n" + unVerifiedFiles.join("\n").cyan + "\n");
}
grunt.log.write("Beautified " + fileCount.toString().cyan + " files, changed " + changedFileCount.toString().cyan ...