diff --git a/src/fast-path.js b/src/fast-path.js index 66083018..66ecf7a9 100644 --- a/src/fast-path.js +++ b/src/fast-path.js @@ -448,7 +448,9 @@ FPp.needsParens = function() { parent.object === node ); - case "AssignmentExpression": + case "AssignmentExpression": { + const grandParent = this.getParentNode(1) + if (parent.type === "ArrowFunctionExpression" && parent.body === node) { return true; } else if ( @@ -468,9 +470,16 @@ FPp.needsParens = function() { return node.left.type === "ObjectPattern"; } else if (parent.type === "AssignmentExpression") { return false; + } else if ( + parent.type === "SequenceExpression" && + grandParent && + grandParent.type === "ForStatement" && + (grandParent.init === parent || grandParent.update === parent) + ) { + return false; } return true; - + } case "ConditionalExpression": switch (parent.type) { case "TaggedTemplateExpression": diff --git a/tests/assignment/__snapshots__/jsfmt.spec.js.snap b/tests/assignment/__snapshots__/jsfmt.spec.js.snap index d3553705..8f562d1d 100644 --- a/tests/assignment/__snapshots__/jsfmt.spec.js.snap +++ b/tests/assignment/__snapshots__/jsfmt.spec.js.snap @@ -20,3 +20,22 @@ computedDescriptionLines = (focused && !loading && descriptionLinesFocused) || descriptionLines; `; + +exports[`sequence.js 1`] = ` +for ((i = 0), (len = arr.length); i < len; i++) { + console.log(arr[i]) +} + +for (i = 0, len = arr.length; i < len; i++) { + console.log(arr[i]) +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +for (i = 0, len = arr.length; i < len; i++) { + console.log(arr[i]); +} + +for (i = 0, len = arr.length; i < len; i++) { + console.log(arr[i]); +} + +`; diff --git a/tests/assignment/sequence.js b/tests/assignment/sequence.js new file mode 100644 index 00000000..3d9bf072 --- /dev/null +++ b/tests/assignment/sequence.js @@ -0,0 +1,7 @@ +for ((i = 0), (len = arr.length); i < len; i++) { + console.log(arr[i]) +} + +for (i = 0, len = arr.length; i < len; i++) { + console.log(arr[i]) +}