Skip to content

Commit

Permalink
Code refactoring for the babel-generator (#5344)
Browse files Browse the repository at this point in the history
* refactoring code for babel-generator package

* removing spaces and refactoring if statement

* fixing warnings
  • Loading branch information
artemgurzhii authored and loganfsmyth committed Mar 2, 2017
1 parent 01918c6 commit 0d3a7e9
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 112 deletions.
4 changes: 1 addition & 3 deletions packages/babel-generator/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,7 @@ import type { Format } from "./printer";
*/

class Generator extends Printer {
constructor(ast, opts, code) {
opts = opts || {};

constructor(ast, opts = {}, code) {
const tokens = ast.tokens || [];
const format = normalizeOptions(code, opts, tokens);
const map = opts.sourceMaps ? new SourceMap(opts, code) : null;
Expand Down
153 changes: 49 additions & 104 deletions packages/babel-generator/src/node/parentheses.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,8 @@ export function NullableTypeAnnotation(node: Object, parent: Object): boolean {
export { NullableTypeAnnotation as FunctionTypeAnnotation };

export function UpdateExpression(node: Object, parent: Object): boolean {
if (t.isMemberExpression(parent) && parent.object === node) {
// (foo++).test()
return true;
}

return false;
// (foo++).test()
return t.isMemberExpression(parent) && parent.object === node;
}

export function ObjectExpression(node: Object, parent: Object, printStack: Array<Object>): boolean {
Expand All @@ -51,15 +47,11 @@ export function DoExpression(node: Object, parent: Object, printStack: Array<Obj
}

export function Binary(node: Object, parent: Object): boolean {
if ((t.isCallExpression(parent) || t.isNewExpression(parent)) && parent.callee === node) {
return true;
}

if (t.isUnaryLike(parent)) {
return true;
}

if (t.isMemberExpression(parent) && parent.object === node) {
if (
((t.isCallExpression(parent) || t.isNewExpression(parent)) && parent.callee === node) ||
t.isUnaryLike(parent) ||
(t.isMemberExpression(parent) && parent.object === node)
) {
return true;
}

Expand All @@ -70,12 +62,11 @@ export function Binary(node: Object, parent: Object): boolean {
const nodeOp = node.operator;
const nodePos = PRECEDENCE[nodeOp];

if (parentPos > nodePos) {
return true;
}

// Logical expressions with the same precedence don't need parens.
if (parentPos === nodePos && parent.right === node && !t.isLogicalExpression(parent)) {
if (
// Logical expressions with the same precedence don't need parens.
(parentPos === nodePos && parent.right === node && !t.isLogicalExpression(parent)) ||
parentPos > nodePos
) {
return true;
}
}
Expand All @@ -84,55 +75,27 @@ export function Binary(node: Object, parent: Object): boolean {
}

export function BinaryExpression(node: Object, parent: Object): boolean {
if (node.operator === "in") {
// let i = (1 in []);
if (t.isVariableDeclarator(parent)) {
return true;
}

// for ((1 in []);;);
if (t.isFor(parent)) {
return true;
}
}

return false;
// let i = (1 in []);
// for ((1 in []);;);
return node.operator === "in" && (t.isVariableDeclarator(parent) || t.isFor(parent));
}

export function SequenceExpression(node: Object, parent: Object): boolean {
if (t.isForStatement(parent)) {

if (
// Although parentheses wouldn"t hurt around sequence
// expressions in the head of for loops, traditional style
// dictates that e.g. i++, j++ should not be wrapped with
// parentheses.
return false;
}

if (t.isExpressionStatement(parent) && parent.expression === node) {
return false;
}

if (t.isReturnStatement(parent)) {
return false;
}

if (t.isThrowStatement(parent)) {
return false;
}

if (t.isSwitchStatement(parent) && parent.discriminant === node) {
return false;
}

if (t.isWhileStatement(parent) && parent.test === node) {
return false;
}

if (t.isIfStatement(parent) && parent.test === node) {
return false;
}

if (t.isForInStatement(parent) && parent.right === node) {
t.isForStatement(parent) ||
t.isThrowStatement(parent) ||
t.isReturnStatement(parent) ||
(t.isIfStatement(parent) && parent.test === node) ||
(t.isWhileStatement(parent) && parent.test === node) ||
(t.isForInStatement(parent) && parent.right === node) ||
(t.isSwitchStatement(parent) && parent.discriminant === node) ||
(t.isExpressionStatement(parent) && parent.expression === node)
) {
return false;
}

Expand All @@ -158,15 +121,9 @@ export function ClassExpression(node: Object, parent: Object, printStack: Array<
}

export function UnaryLike(node: Object, parent: Object): boolean {
if (t.isMemberExpression(parent, { object: node })) {
return true;
}

if (t.isCallExpression(parent, { callee: node }) || t.isNewExpression(parent, { callee: node })) {
return true;
}

return false;
return t.isMemberExpression(parent, { object: node }) ||
t.isCallExpression(parent, { callee: node }) ||
t.isNewExpression(parent, { callee: node });
}

export function FunctionExpression(node: Object, parent: Object, printStack: Array<Object>): boolean {
Expand All @@ -189,19 +146,12 @@ export function ArrowFunctionExpression(node: Object, parent: Object): boolean {
}

export function ConditionalExpression(node: Object, parent: Object): boolean {
if (t.isUnaryLike(parent)) {
return true;
}

if (t.isBinary(parent)) {
return true;
}

if (t.isConditionalExpression(parent, { test: node })) {
return true;
}

if (t.isAwaitExpression(parent)) {
if (
t.isUnaryLike(parent) ||
t.isBinary(parent) ||
t.isConditionalExpression(parent, { test: node }) ||
t.isAwaitExpression(parent)
) {
return true;
}

Expand All @@ -227,28 +177,23 @@ function isFirstInStatement(printStack: Array<Object>, {
i--;
let parent = printStack[i];
while (i > 0) {
if (t.isExpressionStatement(parent, { expression: node })) {
return true;
}

if (t.isTaggedTemplateExpression(parent)) {
return true;
}

if (considerDefaultExports && t.isExportDefaultDeclaration(parent, { declaration: node })) {
return true;
}

if (considerArrow && t.isArrowFunctionExpression(parent, { body: node })) {
if (
t.isExpressionStatement(parent, { expression: node }) ||
t.isTaggedTemplateExpression(parent) ||
considerDefaultExports && t.isExportDefaultDeclaration(parent, { declaration: node }) ||
considerArrow && t.isArrowFunctionExpression(parent, { body: node })
) {
return true;
}

if ((t.isCallExpression(parent, { callee: node })) ||
(t.isSequenceExpression(parent) && parent.expressions[0] === node) ||
(t.isMemberExpression(parent, { object: node })) ||
(t.isConditional(parent, { test: node })) ||
(t.isBinary(parent, { left: node })) ||
(t.isAssignmentExpression(parent, { left: node }))) {
if (
t.isCallExpression(parent, { callee: node }) ||
(t.isSequenceExpression(parent) && parent.expressions[0] === node) ||
t.isMemberExpression(parent, { object: node }) ||
t.isConditional(parent, { test: node }) ||
t.isBinary(parent, { left: node }) ||
t.isAssignmentExpression(parent, { left: node })
) {
node = parent;
i--;
parent = printStack[i];
Expand Down
8 changes: 5 additions & 3 deletions packages/babel-generator/src/printer.js
Original file line number Diff line number Diff line change
Expand Up @@ -330,9 +330,11 @@ export default class Printer {
this._maybeAddAuxComment(this._insideAux && !oldInAux);

let needsParens = n.needsParens(node, parent, this._printStack);
if (this.format.retainFunctionParens &&
node.type === "FunctionExpression" &&
node.extra && node.extra.parenthesized) {
if (
this.format.retainFunctionParens &&
node.type === "FunctionExpression" &&
node.extra && node.extra.parenthesized
) {
needsParens = true;
}
if (needsParens) this.token("(");
Expand Down
4 changes: 2 additions & 2 deletions packages/babel-generator/src/whitespace.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
export default class Whitespace {
constructor(tokens) {
this.tokens = tokens;
this.used = {};
this.used = {};
}

/**
Expand Down Expand Up @@ -59,7 +59,7 @@ export default class Whitespace {
if (!endToken || !endToken.loc) return 0;

const start = startToken ? startToken.loc.end.line : 1;
const end = endToken.loc.start.line;
const end = endToken.loc.start.line;
let lines = 0;

for (let line = start; line < end; line++) {
Expand Down

0 comments on commit 0d3a7e9

Please sign in to comment.