diff --git a/packages/babel-generator/src/generators/base.js b/packages/babel-generator/src/generators/base.js index a7d1bd35b2..dec9fe11bf 100644 --- a/packages/babel-generator/src/generators/base.js +++ b/packages/babel-generator/src/generators/base.js @@ -14,11 +14,14 @@ export function Program(node: Object) { export function BlockStatement(node: Object) { this.token("{"); this.printInnerComments(node); - if (node.body.length) { + + let hasDirectives = node.directives && node.directives.length; + + if (node.body.length || hasDirectives) { this.newline(); this.printSequence(node.directives, node, { indent: true }); - if (node.directives && node.directives.length) this.newline(); + if (hasDirectives) this.newline(); this.printSequence(node.body, node, { indent: true }); this.removeTrailingNewline(); diff --git a/packages/babel-generator/test/index.js b/packages/babel-generator/test/index.js index 47e6499a64..40d8402d34 100644 --- a/packages/babel-generator/test/index.js +++ b/packages/babel-generator/test/index.js @@ -230,6 +230,20 @@ describe("programmatic generation", function() { assert.equal(ast.program.body[0].consequent.type, "BlockStatement"); }); + it("prints directives in block with empty body", function() { + let blockStatement = t.blockStatement( + [], + [t.directive(t.directiveLiteral("use strict"))] + ); + + let output = generate.default(blockStatement).code; + assert.equal(output, [ + "{", + " \"use strict\";", + "}" + ].join("\n")); + }); + it("flow object indentation", function() { let objectStatement = t.objectTypeAnnotation( [ diff --git a/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/get-module-name-option/expected.js b/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/get-module-name-option/expected.js index 236ed887cb..f1f858900a 100644 --- a/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/get-module-name-option/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/get-module-name-option/expected.js @@ -1 +1,3 @@ -define("my custom module name", [], function () {}); +define("my custom module name", [], function () { + "use strict"; +}); diff --git a/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/imports/expected.js b/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/imports/expected.js index ac340082b3..b86128d22b 100644 --- a/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/imports/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/imports/expected.js @@ -1 +1,3 @@ -define(["foo", "foo-bar", "./directory/foo-bar"], function () {}); +define(["foo", "foo-bar", "./directory/foo-bar"], function () { + "use strict"; +}); diff --git a/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/get-module-name-option/expected.js b/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/get-module-name-option/expected.js index 775365ff70..d5c9406620 100644 --- a/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/get-module-name-option/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/get-module-name-option/expected.js @@ -10,4 +10,6 @@ factory(); global.myCustomModuleName = mod.exports; } -})(this, function () {}); +})(this, function () { + "use strict"; +}); diff --git a/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/imports/expected.js b/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/imports/expected.js index c35422d7b9..4cdcec5068 100644 --- a/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/imports/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/imports/expected.js @@ -10,4 +10,6 @@ factory(global.foo, global.fooBar, global.fooBar); global.actual = mod.exports; } -})(this, function () {}); +})(this, function () { + "use strict"; +}); diff --git a/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/non-default-imports/expected.js b/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/non-default-imports/expected.js index 8a80ab5648..cd795edd21 100644 --- a/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/non-default-imports/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/non-default-imports/expected.js @@ -10,4 +10,6 @@ factory(global.render); global.actual = mod.exports; } -})(this, function (_render) {}); +})(this, function (_render) { + "use strict"; +}); diff --git a/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/override-import-name/expected.js b/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/override-import-name/expected.js index b93ebd1057..a6255fa22e 100644 --- a/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/override-import-name/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/override-import-name/expected.js @@ -10,4 +10,6 @@ factory(global.baz); global.actual = mod.exports; } -})(this, function () {}); +})(this, function () { + "use strict"; +});