authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-05-30 16:08:40-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-05-30 16:08:40-04:00
logb082cd4580890190218f876bf28816b4878ae85c
treed232c4deda8f1b68fe2ebce1ecc99fafcb0db13e
parent84b1842026053197cdd8afe0c436ded55f352949

zig fmt: field access does not cause spaces for slicing

See #1003

2 files changed, 16 insertions(+), 5 deletions(-)

std/zig/parser_test.zig+2
...@@ -2,7 +2,9 @@ test "zig fmt: spaces around slice operator" {...@@ -2,7 +2,9 @@ test "zig fmt: spaces around slice operator" {
2 try testCanonical(2 try testCanonical(
3 \\var a = b[c..d];3 \\var a = b[c..d];
4 \\var a = b[c + 1 .. d];4 \\var a = b[c + 1 .. d];
5 \\var a = b[c + 1 ..];
5 \\var a = b[c .. d + 1];6 \\var a = b[c .. d + 1];
7 \\var a = b[c.a..d.e];
6 \\8 \\
7 );9 );
8}10}
std/zig/render.zig+14-5
...@@ -530,13 +530,14 @@ fn renderExpression(...@@ -530,13 +530,14 @@ fn renderExpression(
530 const lbracket = tree.prevToken(range.start.firstToken());530 const lbracket = tree.prevToken(range.start.firstToken());
531 const dotdot = tree.nextToken(range.start.lastToken());531 const dotdot = tree.nextToken(range.start.lastToken());
532532
533 const spaces_around_op = range.start.id == ast.Node.Id.InfixOp or533 const after_start_space_bool = nodeCausesSliceOpSpace(range.start) or
534 (if (range.end) |end| end.id == ast.Node.Id.InfixOp else false);534 (if (range.end) |end| nodeCausesSliceOpSpace(end) else false);
535 const op_space = if (spaces_around_op) Space.Space else Space.None;535 const after_start_space = if (after_start_space_bool) Space.Space else Space.None;
536 const after_op_space = if (range.end != null) after_start_space else Space.None;
536537
537 try renderToken(tree, stream, lbracket, indent, start_col, Space.None); // [538 try renderToken(tree, stream, lbracket, indent, start_col, Space.None); // [
538 try renderExpression(allocator, stream, tree, indent, start_col, range.start, op_space);539 try renderExpression(allocator, stream, tree, indent, start_col, range.start, after_start_space);
539 try renderToken(tree, stream, dotdot, indent, start_col, op_space); // ..540 try renderToken(tree, stream, dotdot, indent, start_col, after_op_space); // ..
540 if (range.end) |end| {541 if (range.end) |end| {
541 try renderExpression(allocator, stream, tree, indent, start_col, end, Space.None);542 try renderExpression(allocator, stream, tree, indent, start_col, end, Space.None);
542 }543 }
...@@ -1959,3 +1960,11 @@ fn nodeIsBlock(base: &const ast.Node) bool {...@@ -1959,3 +1960,11 @@ fn nodeIsBlock(base: &const ast.Node) bool {
1959 else => false,1960 else => false,
1960 };1961 };
1961}1962}
1963
1964fn nodeCausesSliceOpSpace(base: &ast.Node) bool {
1965 const infix_op = base.cast(ast.Node.InfixOp) ?? return false;
1966 return switch (infix_op.op) {
1967 ast.Node.InfixOp.Op.Period => false,
1968 else => true,
1969 };
1970}