| ... | @@ -1444,18 +1444,24 @@ fn renderExpression( | ... | @@ -1444,18 +1444,24 @@ fn renderExpression( |
| 1444 | try renderExpression(allocator, stream, tree, indent, start_col, for_node.array_expr, Space.None); | 1444 | try renderExpression(allocator, stream, tree, indent, start_col, for_node.array_expr, Space.None); |
| 1445 | | 1445 | |
| 1446 | const rparen = tree.nextToken(for_node.array_expr.lastToken()); | 1446 | const rparen = tree.nextToken(for_node.array_expr.lastToken()); |
| 1447 | const rparen_space = if (for_node.payload != null or | 1447 | |
| 1448 | for_node.body.id == ast.Node.Id.Block) Space.Space else Space.Newline; | 1448 | const has_payload = for_node.payload != null; |
| 1449 | try renderToken(tree, stream, rparen, indent, start_col, rparen_space); // ) | 1449 | const body_is_block = for_node.body.id == ast.Node.Id.Block; |
| | 1450 | const src_one_line_to_body = !body_is_block and tree.tokensOnSameLine(rparen, for_node.body.firstToken()); |
| | 1451 | const body_indent = if (!body_is_block and !src_one_line_to_body) indent + indent_delta else indent; |
| | 1452 | |
| | 1453 | const rparen_space = if (has_payload or body_is_block or src_one_line_to_body) Space.Space else Space.Newline; |
| | 1454 | try renderToken(tree, stream, rparen, body_indent, start_col, rparen_space); // ) |
| 1450 | | 1455 | |
| 1451 | if (for_node.payload) |payload| { | 1456 | if (for_node.payload) |payload| { |
| 1452 | const payload_space = if (for_node.body.id == ast.Node.Id.Block) Space.Space else Space.Newline; | 1457 | const payload_space = if (body_is_block or src_one_line_to_body) Space.Space else Space.Newline; |
| 1453 | try renderExpression(allocator, stream, tree, indent, start_col, payload, payload_space); | 1458 | try renderExpression(allocator, stream, tree, body_indent, start_col, payload, payload_space); // |x| |
| 1454 | } | 1459 | } |
| 1455 | | 1460 | |
| 1456 | const body_space = blk: { | 1461 | const body_space = blk: { |
| 1457 | if (for_node.@"else" != null) { | 1462 | if (for_node.@"else") |@"else"| { |
| 1458 | if (for_node.body.id == ast.Node.Id.Block) { | 1463 | const src_one_line_to_else = tree.tokensOnSameLine(for_node.body.lastToken(), @"else".firstToken()); |
| | 1464 | if (body_is_block or src_one_line_to_else) { |
| 1459 | break :blk Space.Space; | 1465 | break :blk Space.Space; |
| 1460 | } else { | 1466 | } else { |
| 1461 | break :blk Space.Newline; | 1467 | break :blk Space.Newline; |
| ... | @@ -1464,19 +1470,12 @@ fn renderExpression( | ... | @@ -1464,19 +1470,12 @@ fn renderExpression( |
| 1464 | break :blk space; | 1470 | break :blk space; |
| 1465 | } | 1471 | } |
| 1466 | }; | 1472 | }; |
| 1467 | if (for_node.body.id == ast.Node.Id.Block) { | | |
| 1468 | try renderExpression(allocator, stream, tree, indent, start_col, for_node.body, body_space); | | |
| 1469 | } else { | | |
| 1470 | try stream.writeByteNTimes(' ', indent + indent_delta); | | |
| 1471 | try renderExpression(allocator, stream, tree, indent, start_col, for_node.body, body_space); | | |
| 1472 | } | | |
| 1473 | | 1473 | |
| 1474 | if (for_node.@"else") |@"else"| { | 1474 | if (!body_is_block and !src_one_line_to_body) try stream.writeByteNTimes(' ', body_indent); |
| 1475 | if (for_node.body.id != ast.Node.Id.Block) { | 1475 | try renderExpression(allocator, stream, tree, body_indent, start_col, for_node.body, body_space); |
| 1476 | try stream.writeByteNTimes(' ', indent); | | |
| 1477 | } | | |
| 1478 | | 1476 | |
| 1479 | return renderExpression(allocator, stream, tree, indent, start_col, &@"else".base, space); | 1477 | if (for_node.@"else") |@"else"| { |
| | 1478 | return renderExpression(allocator, stream, tree, body_indent, start_col, &@"else".base, space); |
| 1480 | } | 1479 | } |
| 1481 | }, | 1480 | }, |
| 1482 | | 1481 | |