diff --git a/bin/babel/index.js b/bin/babel/index.js index 1a9eda4947..59c5b42328 100755 --- a/bin/babel/index.js +++ b/bin/babel/index.js @@ -15,6 +15,7 @@ commander.option("-r, --external-helpers", "Replace helpers with references to a commander.option("-e, --experimental", "Enable experimental support for proposed ES7 features"); commander.option("-p, --playground", "Enable playground support"); +commander.option("-c, --compact [mode]", "When set to \"auto\" compact is `true` when the input size exceeds 100KB. (auto|true|false)", "auto"); commander.option("-m, --modules [modules]", "Module formatter type to use [common]", "common"); commander.option("-l, --whitelist [whitelist]", "Whitelist of transformers to ONLY use", util.list); commander.option("-b, --blacklist [blacklist]", "Blacklist of transformers to NOT use", util.list); @@ -113,6 +114,7 @@ exports.opts = { optional: commander.optional, comments: !commander.removeComments, modules: commander.modules, + compact: commander.compact, loose: commander.loose }; diff --git a/lib/babel/generation/buffer.js b/lib/babel/generation/buffer.js index 330a57b250..a6b30837fd 100644 --- a/lib/babel/generation/buffer.js +++ b/lib/babel/generation/buffer.js @@ -5,11 +5,10 @@ module.exports = Buffer; var repeating = require("repeating"); var trimRight = require("trim-right"); var isBoolean = require("lodash/lang/isBoolean"); -var messages = require("../messages"); var includes = require("lodash/collection/includes"); var isNumber = require("lodash/lang/isNumber"); -function Buffer(position, format, opts, code) { +function Buffer(position, format) { this.position = position; this._indent = format.indent.base; this.format = format; diff --git a/lib/babel/generation/generators/expressions.js b/lib/babel/generation/generators/expressions.js index 68b54ed368..97e6c1effe 100644 --- a/lib/babel/generation/generators/expressions.js +++ b/lib/babel/generation/generators/expressions.js @@ -46,11 +46,9 @@ exports.ConditionalExpression = function (node, print) { exports.NewExpression = function (node, print) { this.push("new "); print(node.callee); - if (node.arguments.length || this.format.parentheses) { - this.push("("); - print.list(node.arguments); - this.push(")"); - } + this.push("("); + print.list(node.arguments); + this.push(")"); }; exports.SequenceExpression = function (node, print) { diff --git a/lib/babel/generation/generators/statements.js b/lib/babel/generation/generators/statements.js index 98bb3983fb..f027f35826 100644 --- a/lib/babel/generation/generators/statements.js +++ b/lib/babel/generation/generators/statements.js @@ -159,7 +159,7 @@ exports.SwitchStatement = function (node, print) { this.push("}"); }; -exports.SwitchCase = function (node, print, parent) { +exports.SwitchCase = function (node, print) { if (node.test) { this.push("case "); print(node.test); diff --git a/lib/babel/generation/index.js b/lib/babel/generation/index.js index 140eb8a555..78ee131d6e 100644 --- a/lib/babel/generation/index.js +++ b/lib/babel/generation/index.js @@ -12,6 +12,7 @@ var Whitespace = require("./whitespace"); var repeating = require("repeating"); var SourceMap = require("./source-map"); var Position = require("./position"); +var messages = require("../messages"); var Buffer = require("./buffer"); var extend = require("lodash/object/extend"); var merge = require("lodash/object/merge"); @@ -31,7 +32,7 @@ function CodeGenerator(ast, opts, code) { this.whitespace = new Whitespace(this.tokens, this.comments, this.format); this.position = new Position; this.map = new SourceMap(this.position, opts, code); - this.buffer = new Buffer(this.position, this.format, opts, code); + this.buffer = new Buffer(this.position, this.format); } each(Buffer.prototype, function (fn, key) { @@ -47,23 +48,20 @@ CodeGenerator.normalizeOptions = function (code, opts) { if (indent && indent !== " ") style = indent; } - var format = merge({ - parentheses: true, + var format = { comments: opts.comments == null || opts.comments, - concise: false, - compact: "auto", + compact: opts.compact, indent: { adjustMultilineComment: true, style: style, base: 0 } - }, opts.format || {}); + }; if (format.compact === "auto") { format.compact = code.length > 100000; // 100KB if (format.compact) { - format.compact = true; console.error(messages.get("codeGeneratorDeopt", opts.filename, "100KB")); } } diff --git a/lib/babel/transformation/file.js b/lib/babel/transformation/file.js index 6d0ea188a1..86cd6cf9e3 100644 --- a/lib/babel/transformation/file.js +++ b/lib/babel/transformation/file.js @@ -83,15 +83,18 @@ File.validOptions = [ "keepModuleIdExtensions", "code", "ast", - "format", "playground", "experimental", "externalHelpers", "auxiliaryComment", + "compact", "resolveModuleSource", "getModuleName", + // legacy + "format", + // these are used by plugins "ignore", "only", @@ -124,6 +127,7 @@ File.prototype.normalizeOptions = function (opts) { comments: true, filename: "unknown", modules: "common", + compact: "auto", loose: [], code: true, ast: true @@ -140,6 +144,7 @@ File.prototype.normalizeOptions = function (opts) { opts.blacklist = util.arrayify(opts.blacklist); opts.whitelist = util.arrayify(opts.whitelist); opts.optional = util.arrayify(opts.optional); + opts.compact = util.booleanify(opts.compact); opts.loose = util.arrayify(opts.loose); if (includes(opts.loose, "all") || includes(opts.loose, true)) { @@ -178,8 +183,7 @@ File.prototype.normalizeOptions = function (opts) { if (opts.reactCompat) { opts.optional.push("reactCompat"); - console.error("The reactCompat option has been moved into the optional transformer " + - "`reactCompat` - backwards compatibility will be removed in v4.0.0"); + console.error("The reactCompat option has been moved into the optional transformer `reactCompat`"); } var ensureEnabled = function (key) { diff --git a/lib/babel/util.js b/lib/babel/util.js index 4b1b1e8ea3..803e0b4eb4 100644 --- a/lib/babel/util.js +++ b/lib/babel/util.js @@ -56,6 +56,12 @@ exports.arrayify = function (val) { throw new TypeError("illegal type for arrayify"); }; +exports.booleanify = function (val) { + if (val === "true") return true; + if (val === "false") return false; + return val; +}; + var templateVisitor = { enter: function (node, parent, scope, nodes) { if (t.isExpressionStatement(node)) {