authorgravatar for mail@isaacfreund.comIsaac Freund <mail@isaacfreund.com> 2021-02-23 19:56:56+01:00
committergravatar for mail@isaacfreund.comIsaac Freund <mail@isaacfreund.com> 2021-02-23 19:56:56+01:00
logb028a92a6033b5a8de6607b3f544f9c8f376f0fd
treece2a4dbf48603088c12ce1c43b443904f5a10baf
parentabfe21383035522945e52ffb3954c03398767a39
signaturelock-open Commit is signed but in an unrecognized format.

zig fmt: handle comments in array type/init/access


2 files changed, 53 insertions(+), 39 deletions(-)

lib/std/zig/parser_test.zig+35-31
......@@ -3521,37 +3521,41 @@ test "zig fmt: comment after params" {
35213521 );
35223522}
35233523
3524//test "zig fmt: comment in array initializer/access" {
3525// try testCanonical(
3526// \\test "a" {
3527// \\ var a = x{ //aa
3528// \\ //bb
3529// \\ };
3530// \\ var a = []x{ //aa
3531// \\ //bb
3532// \\ };
3533// \\ var b = [ //aa
3534// \\ _
3535// \\ ]x{ //aa
3536// \\ //bb
3537// \\ 9,
3538// \\ };
3539// \\ var c = b[ //aa
3540// \\ 0
3541// \\ ];
3542// \\ var d = [_
3543// \\ //aa
3544// \\ ]x{ //aa
3545// \\ //bb
3546// \\ 9,
3547// \\ };
3548// \\ var e = d[0
3549// \\ //aa
3550// \\ ];
3551// \\}
3552// \\
3553// );
3554//}
3524test "zig fmt: comment in array initializer/access" {
3525 try testCanonical(
3526 \\test "a" {
3527 \\ var a = x{ //aa
3528 \\ //bb
3529 \\ };
3530 \\ var a = []x{ //aa
3531 \\ //bb
3532 \\ };
3533 \\ var b = [ //aa
3534 \\ _
3535 \\ ]x{ //aa
3536 \\ //bb
3537 \\ 9,
3538 \\ };
3539 \\ var c = b[ //aa
3540 \\ 0
3541 \\ ];
3542 \\ var d = [
3543 \\ _
3544 \\ //aa
3545 \\ :
3546 \\ 0
3547 \\ ]x{ //aa
3548 \\ //bb
3549 \\ 9,
3550 \\ };
3551 \\ var e = d[
3552 \\ 0
3553 \\ //aa
3554 \\ ];
3555 \\}
3556 \\
3557 );
3558}
35553559
35563560test "zig fmt: comments at several places in struct init" {
35573561 try testTransform(
lib/std/zig/render.zig+18-8
......@@ -439,9 +439,13 @@ fn renderExpression(gpa: *Allocator, ais: *Ais, tree: ast.Tree, node: ast.Node.I
439439 const suffix = datas[node];
440440 const lbracket = tree.firstToken(suffix.rhs) - 1;
441441 const rbracket = tree.lastToken(suffix.rhs) + 1;
442 const one_line = tree.tokensOnSameLine(lbracket, rbracket);
443 const inner_space = if (one_line) Space.none else Space.newline;
442444 try renderExpression(gpa, ais, tree, suffix.lhs, .none);
443 try renderToken(ais, tree, lbracket, .none); // [
444 try renderExpression(gpa, ais, tree, suffix.rhs, .none);
445 ais.pushIndentNextLine();
446 try renderToken(ais, tree, lbracket, inner_space); // [
447 try renderExpression(gpa, ais, tree, suffix.rhs, inner_space);
448 ais.popIndent();
445449 return renderToken(ais, tree, rbracket, space); // ]
446450 },
447451
......@@ -679,7 +683,6 @@ fn renderExpression(gpa: *Allocator, ais: *Ais, tree: ast.Tree, node: ast.Node.I
679683 }
680684}
681685
682// TODO: handle comments inside the brackets
683686fn renderArrayType(
684687 gpa: *Allocator,
685688 ais: *Ais,
......@@ -687,13 +690,18 @@ fn renderArrayType(
687690 array_type: ast.full.ArrayType,
688691 space: Space,
689692) Error!void {
690 try renderToken(ais, tree, array_type.ast.lbracket, .none); // lbracket
691 try renderExpression(gpa, ais, tree, array_type.ast.elem_count, .none);
693 const rbracket = tree.firstToken(array_type.ast.elem_type) - 1;
694 const one_line = tree.tokensOnSameLine(array_type.ast.lbracket, rbracket);
695 const inner_space = if (one_line) Space.none else Space.newline;
696 ais.pushIndentNextLine();
697 try renderToken(ais, tree, array_type.ast.lbracket, inner_space); // lbracket
698 try renderExpression(gpa, ais, tree, array_type.ast.elem_count, inner_space);
692699 if (array_type.ast.sentinel) |sentinel| {
693 try renderToken(ais, tree, tree.firstToken(sentinel) - 1, .none); // colon
694 try renderExpression(gpa, ais, tree, sentinel, .none);
700 try renderToken(ais, tree, tree.firstToken(sentinel) - 1, inner_space); // colon
701 try renderExpression(gpa, ais, tree, sentinel, inner_space);
695702 }
696 try renderToken(ais, tree, tree.firstToken(array_type.ast.elem_type) - 1, .none); // rbracket
703 ais.popIndent();
704 try renderToken(ais, tree, rbracket, .none); // rbracket
697705 return renderExpression(gpa, ais, tree, array_type.ast.elem_type, space);
698706}
699707
......@@ -1577,7 +1585,9 @@ fn renderStructInit(
15771585 try renderExpression(gpa, ais, tree, struct_init.ast.type_expr, .none); // T
15781586 }
15791587 if (struct_init.ast.fields.len == 0) {
1588 ais.pushIndentNextLine();
15801589 try renderToken(ais, tree, struct_init.ast.lbrace, .none); // lbrace
1590 ais.popIndent();
15811591 return renderToken(ais, tree, struct_init.ast.lbrace + 1, space); // rbrace
15821592 }
15831593