authorgravatar for timonkruiper@gmail.comTimon Kruiper <timonkruiper@gmail.com> 2019-06-04 14:46:06+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-06-04 12:44:50-04:00
logfd771ea9fb8926127b4ecb2793608b04a4430b2d
treedd10d0711ad22b992970bccad844715adc2c6338
parent7eb82b8651e134c18fe7377dca271d6963333d61

Added LineComment support when MultiLines are used in ArrayInit

also added the corresponding testcase

2 files changed, 17 insertions(+), 7 deletions(-)

std/zig/parser_test.zig+6
...@@ -2223,6 +2223,12 @@ test "zig fmt: multiline string in array" {...@@ -2223,6 +2223,12 @@ test "zig fmt: multiline string in array" {
2223 \\ ,2223 \\ ,
2224 \\ \\bbb2224 \\ \\bbb
2225 \\ };2225 \\ };
2226 \\ const Bar = [][]const u8{ // comment here
2227 \\ \\aaa
2228 \\ \\
2229 \\ , // and another comment can go here
2230 \\ \\bbb
2231 \\ };
2226 \\}2232 \\}
2227 \\2233 \\
2228 );2234 );
std/zig/render.zig+11-7
...@@ -727,10 +727,13 @@ fn renderExpression(...@@ -727,10 +727,13 @@ fn renderExpression(
727 }727 }
728728
729 var new_indent = indent + indent_delta;729 var new_indent = indent + indent_delta;
730 try renderToken(tree, stream, lbrace, new_indent, start_col, Space.Newline);
731730
732 if (tree.tokens.at(lbrace + 1).id != Token.Id.MultilineStringLiteralLine) {731 if (tree.tokens.at(tree.nextToken(lbrace)).id != Token.Id.MultilineStringLiteralLine) {
732 try renderToken(tree, stream, lbrace, new_indent, start_col, Space.Newline);
733 try stream.writeByteNTimes(' ', new_indent);733 try stream.writeByteNTimes(' ', new_indent);
734 } else {
735 new_indent -= indent_delta;
736 try renderToken(tree, stream, lbrace, new_indent, start_col, Space.None);
734 }737 }
735738
736 it.set(0);739 it.set(0);
...@@ -738,9 +741,6 @@ fn renderExpression(...@@ -738,9 +741,6 @@ fn renderExpression(
738 var col: usize = 1;741 var col: usize = 1;
739 while (it.next()) |expr| : (i += 1) {742 while (it.next()) |expr| : (i += 1) {
740 if (it.peek()) |next_expr| {743 if (it.peek()) |next_expr| {
741 if (expr.*.id == ast.Node.Id.MultilineStringLiteral) {
742 new_indent -= indent_delta;
743 }
744 try renderExpression(allocator, stream, tree, new_indent, start_col, expr.*, Space.None);744 try renderExpression(allocator, stream, tree, new_indent, start_col, expr.*, Space.None);
745745
746 const comma = tree.nextToken(expr.*.lastToken());746 const comma = tree.nextToken(expr.*.lastToken());
...@@ -756,7 +756,11 @@ fn renderExpression(...@@ -756,7 +756,11 @@ fn renderExpression(
756 }756 }
757 col = 1;757 col = 1;
758758
759 try renderToken(tree, stream, comma, new_indent, start_col, Space.Newline); // ,759 if (tree.tokens.at(tree.nextToken(comma)).id != Token.Id.MultilineStringLiteralLine) {
760 try renderToken(tree, stream, comma, new_indent, start_col, Space.Newline); // ,
761 } else {
762 try renderToken(tree, stream, comma, new_indent, start_col, Space.None); // ,
763 }
760764
761 try renderExtraNewline(tree, stream, start_col, next_expr.*);765 try renderExtraNewline(tree, stream, start_col, next_expr.*);
762 if (next_expr.*.id != ast.Node.Id.MultilineStringLiteral) {766 if (next_expr.*.id != ast.Node.Id.MultilineStringLiteral) {
...@@ -766,7 +770,7 @@ fn renderExpression(...@@ -766,7 +770,7 @@ fn renderExpression(
766 try renderExpression(allocator, stream, tree, new_indent, start_col, expr.*, Space.Comma); // ,770 try renderExpression(allocator, stream, tree, new_indent, start_col, expr.*, Space.Comma); // ,
767 }771 }
768 }772 }
769 const last_node = it.prev() orelse unreachable;773 const last_node = it.prev().?;
770 if (last_node.*.id != ast.Node.Id.MultilineStringLiteral) {774 if (last_node.*.id != ast.Node.Id.MultilineStringLiteral) {
771 try stream.writeByteNTimes(' ', indent);775 try stream.writeByteNTimes(' ', indent);
772 }776 }