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" {
22722272 );
22732273}
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
22752307const std = @import("std");
22762308const mem = std.mem;
22772309const warn = std.debug.warn;
std/zig/render.zig+31-6
......@@ -427,9 +427,23 @@ fn renderExpression(
427427 },
428428
429429 ast.Node.PrefixOp.Op.ArrayType => |array_index| {
430 try renderToken(tree, stream, prefix_op_node.op_token, indent, start_col, Space.None); // [
431 try renderExpression(allocator, stream, tree, indent, start_col, array_index, Space.None);
432 try renderToken(tree, stream, tree.nextToken(array_index.lastToken()), indent, start_col, Space.None); // ]
430 const lbracket = prefix_op_node.op_token;
431 const rbracket = tree.nextToken(array_index.lastToken());
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); // ]
433447 },
434448 ast.Node.PrefixOp.Op.BitNot,
435449 ast.Node.PrefixOp.Op.BoolNot,
......@@ -524,7 +538,18 @@ fn renderExpression(
524538
525539 try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs, Space.None);
526540 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 }
528553 return renderToken(tree, stream, rbracket, indent, start_col, space); // ]
529554 },
530555
......@@ -559,7 +584,7 @@ fn renderExpression(
559584
560585 if (field_inits.len == 0) {
561586 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);
563588 return renderToken(tree, stream, suffix_op.rtoken, indent, start_col, space);
564589 }
565590
......@@ -2019,7 +2044,7 @@ fn renderTokenOffset(
20192044
20202045 const after_comment_token = tree.tokens.at(token_index + offset);
20212046 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,
20232048 else => indent,
20242049 };
20252050 try stream.writeByteNTimes(' ', next_line_indent);