diff --git a/packages/babel-generator/src/generators/base.js b/packages/babel-generator/src/generators/base.js index bceaf00521..d291683b6b 100644 --- a/packages/babel-generator/src/generators/base.js +++ b/packages/babel-generator/src/generators/base.js @@ -21,7 +21,7 @@ export function BlockStatement(node: Object) { if (node.directives && node.directives.length) this.newline(); this.printSequence(node.body, node, { indent: true }); - if (!this.format.retainLines && !this.format.concise) this.removeTrailingNewline(); + this.removeTrailingNewline(); this.source("end", node.loc); this.rightBrace(); diff --git a/packages/babel-generator/src/generators/expressions.js b/packages/babel-generator/src/generators/expressions.js index 38f4973665..72e7f4ac9c 100644 --- a/packages/babel-generator/src/generators/expressions.js +++ b/packages/babel-generator/src/generators/expressions.js @@ -89,6 +89,8 @@ export function Decorator(node: Object) { function commaSeparatorNewline() { this.token(","); this.newline(); + + if (!this.endsWith("\n")) this.space(); } export function CallExpression(node: Object) { @@ -97,7 +99,7 @@ export function CallExpression(node: Object) { this.token("("); - let isPrettyCall = node._prettyCall && !this.format.retainLines && !this.format.compact; + let isPrettyCall = node._prettyCall; let separator; if (isPrettyCall) { diff --git a/packages/babel-generator/src/generators/statements.js b/packages/babel-generator/src/generators/statements.js index c3229db035..3b062d06a8 100644 --- a/packages/babel-generator/src/generators/statements.js +++ b/packages/babel-generator/src/generators/statements.js @@ -209,14 +209,14 @@ function variableDeclarationIdent() { // "let " or "var " indentation. this.token(","); this.newline(); - for (let i = 0; i < 4; i++) this.space(true); + if (this.endsWith("\n")) for (let i = 0; i < 4; i++) this.space(true); } function constDeclarationIdent() { // "const " indentation. this.token(","); this.newline(); - for (let i = 0; i < 6; i++) this.space(true); + if (this.endsWith("\n")) for (let i = 0; i < 6; i++) this.space(true); } export function VariableDeclaration(node: Object, parent: Object) { @@ -247,7 +247,7 @@ export function VariableDeclaration(node: Object, parent: Object) { // let separator; - if (!this.format.compact && !this.format.concise && hasInits && !this.format.retainLines) { + if (hasInits) { separator = node.kind === "const" ? constDeclarationIdent : variableDeclarationIdent; } diff --git a/packages/babel-generator/src/printer.js b/packages/babel-generator/src/printer.js index a03c4f0f31..14139c2d16 100644 --- a/packages/babel-generator/src/printer.js +++ b/packages/babel-generator/src/printer.js @@ -512,7 +512,7 @@ export default class Printer { if (!this.endsWith("[") && !this.endsWith("{")) this.space(); - let val = comment.type === "CommentLine" ? `//${comment.value}` : `/*${comment.value}*/`; + let val = comment.type === "CommentLine" ? `//${comment.value}\n` : `/*${comment.value}*/`; // if (comment.type === "CommentBlock" && this.format.indent.adjustMultilineComment) { @@ -526,19 +526,13 @@ export default class Printer { val = val.replace(/\n(?!$)/g, `\n${repeat(" ", indentSize)}`); } - // force a newline for line comments when retainLines is set in case the next printed node - // doesn't catch up - if ((this.format.compact || this.format.concise || this.format.retainLines) && - comment.type === "CommentLine") { - val += "\n"; - } - // this.token(val); // whitespace after - this.newline((this._whitespace ? this._whitespace.getNewlinesAfter(comment) : 0) || - (comment.type === "CommentLine" ? 1 : 0)); + this.newline((this._whitespace ? this._whitespace.getNewlinesAfter(comment) : 0) + + // Subtract one to account for the line force-added above. + (comment.type === "CommentLine" ? -1 : 0)); }); } diff --git a/packages/babel-generator/test/fixtures/comments/simple-a-lot-of-line-comment/expected.js b/packages/babel-generator/test/fixtures/comments/simple-a-lot-of-line-comment/expected.js index 47869b2606..45443e8c59 100644 --- a/packages/babel-generator/test/fixtures/comments/simple-a-lot-of-line-comment/expected.js +++ b/packages/babel-generator/test/fixtures/comments/simple-a-lot-of-line-comment/expected.js @@ -20,6 +20,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + function test() {} // Copyright (C) 2012 Yusuke Suzuki