authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2019-06-26 20:03:38+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2019-06-26 20:03:38+03:00
log7325f80bb2aa1759ea5477b8ea26266ecc607db7
tree5f2b6eabdbba0d5ac9a099ce8a74bb314de5bfb4
parentf6d83ba9185dd81106c731e12ab361685fa226c4
signaturelock-open Commit is signed but in an unrecognized format.

improved comment indentation in arrays


2 files changed, 63 insertions(+), 6 deletions(-)

std/zig/parser_test.zig+32
...@@ -2272,6 +2272,38 @@ test "zig fmt: comment after params" {...@@ -2272,6 +2272,38 @@ test "zig fmt: comment after params" {
2272 );2272 );
2273}2273}
22742274
2275test "zig fmt: comment in array initializer/access" {
2276 try testCanonical(
2277 \\test "a" {
2278 \\ var a = x{ //aa
2279 \\ //bb
2280 \\ };
2281 \\ var a = []x{ //aa
2282 \\ //bb
2283 \\ };
2284 \\ var b = [ //aa
2285 \\ _
2286 \\ ]x{ //aa
2287 \\ //bb
2288 \\ 9,
2289 \\ };
2290 \\ var c = b[ //aa
2291 \\ 0
2292 \\ ];
2293 \\ var d = [_
2294 \\ //aa
2295 \\ ]x{ //aa
2296 \\ //bb
2297 \\ 9,
2298 \\ };
2299 \\ var e = d[0
2300 \\ //aa
2301 \\ ];
2302 \\}
2303 \\
2304 );
2305}
2306
2275const std = @import("std");2307const std = @import("std");
2276const mem = std.mem;2308const mem = std.mem;
2277const warn = std.debug.warn;2309const warn = std.debug.warn;
std/zig/render.zig+31-6
...@@ -427,9 +427,23 @@ fn renderExpression(...@@ -427,9 +427,23 @@ fn renderExpression(
427 },427 },
428428
429 ast.Node.PrefixOp.Op.ArrayType => |array_index| {429 ast.Node.PrefixOp.Op.ArrayType => |array_index| {
430 try renderToken(tree, stream, prefix_op_node.op_token, indent, start_col, Space.None); // [430 const lbracket = prefix_op_node.op_token;
431 try renderExpression(allocator, stream, tree, indent, start_col, array_index, Space.None);431 const rbracket = tree.nextToken(array_index.lastToken());
432 try renderToken(tree, stream, tree.nextToken(array_index.lastToken()), indent, start_col, Space.None); // ]432
433 try renderToken(tree, stream, lbracket, indent, start_col, Space.None); // [
434
435 const starts_with_comment = tree.tokens.at(lbracket + 1).id == .LineComment;
436 const ends_with_comment = tree.tokens.at(rbracket - 1).id == .LineComment;
437 const new_indent = if (ends_with_comment) indent + indent_delta else indent;
438 const new_space = if (ends_with_comment) Space.Newline else Space.None;
439 try renderExpression(allocator, stream, tree, new_indent, start_col, array_index, new_space);
440 if (starts_with_comment) {
441 try stream.writeByte('\n');
442 }
443 if (ends_with_comment or starts_with_comment) {
444 try stream.writeByteNTimes(' ', indent);
445 }
446 try renderToken(tree, stream, rbracket, indent, start_col, Space.None); // ]
433 },447 },
434 ast.Node.PrefixOp.Op.BitNot,448 ast.Node.PrefixOp.Op.BitNot,
435 ast.Node.PrefixOp.Op.BoolNot,449 ast.Node.PrefixOp.Op.BoolNot,
...@@ -524,7 +538,18 @@ fn renderExpression(...@@ -524,7 +538,18 @@ fn renderExpression(
524538
525 try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs, Space.None);539 try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs, Space.None);
526 try renderToken(tree, stream, lbracket, indent, start_col, Space.None); // [540 try renderToken(tree, stream, lbracket, indent, start_col, Space.None); // [
527 try renderExpression(allocator, stream, tree, indent, start_col, index_expr, Space.None);541
542 const starts_with_comment = tree.tokens.at(lbracket + 1).id == .LineComment;
543 const ends_with_comment = tree.tokens.at(rbracket - 1).id == .LineComment;
544 const new_indent = if (ends_with_comment) indent + indent_delta else indent;
545 const new_space = if (ends_with_comment) Space.Newline else Space.None;
546 try renderExpression(allocator, stream, tree, new_indent, start_col, index_expr, new_space);
547 if (starts_with_comment) {
548 try stream.writeByte('\n');
549 }
550 if (ends_with_comment or starts_with_comment) {
551 try stream.writeByteNTimes(' ', indent);
552 }
528 return renderToken(tree, stream, rbracket, indent, start_col, space); // ]553 return renderToken(tree, stream, rbracket, indent, start_col, space); // ]
529 },554 },
530555
...@@ -559,7 +584,7 @@ fn renderExpression(...@@ -559,7 +584,7 @@ fn renderExpression(
559584
560 if (field_inits.len == 0) {585 if (field_inits.len == 0) {
561 try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs, Space.None);586 try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs, Space.None);
562 try renderToken(tree, stream, lbrace, indent, start_col, Space.None);587 try renderToken(tree, stream, lbrace, indent + indent_delta, start_col, Space.None);
563 return renderToken(tree, stream, suffix_op.rtoken, indent, start_col, space);588 return renderToken(tree, stream, suffix_op.rtoken, indent, start_col, space);
564 }589 }
565590
...@@ -2019,7 +2044,7 @@ fn renderTokenOffset(...@@ -2019,7 +2044,7 @@ fn renderTokenOffset(
20192044
2020 const after_comment_token = tree.tokens.at(token_index + offset);2045 const after_comment_token = tree.tokens.at(token_index + offset);
2021 const next_line_indent = switch (after_comment_token.id) {2046 const next_line_indent = switch (after_comment_token.id) {
2022 Token.Id.RParen, Token.Id.RBrace, Token.Id.RBracket => indent - indent_delta,2047 Token.Id.RParen, Token.Id.RBrace, Token.Id.RBracket => if (indent > indent_delta) indent - indent_delta else 0,
2023 else => indent,2048 else => indent,
2024 };2049 };
2025 try stream.writeByteNTimes(' ', next_line_indent);2050 try stream.writeByteNTimes(' ', next_line_indent);