@@ -7,8 +7,8 @@ const Ast = std.zig.Ast;
77const Token = std .zig .Token ;
88const primitives = std .zig .primitives ;
99
10- const indent_delta = 4 ;
11- const asm_indent_delta = 2 ;
10+ const indent_delta = 1 ;
11+ const asm_indent_delta = 1 ;
1212
1313pub const Error = Ast .RenderError ;
1414
@@ -509,17 +509,12 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {
509509 .bit_xor ,
510510 .bool_and ,
511511 .bool_or ,
512- .div ,
513512 .equal_equal ,
514513 .greater_or_equal ,
515514 .greater_than ,
516515 .less_or_equal ,
517516 .less_than ,
518517 .merge_error_sets ,
519- .mod ,
520- .mul ,
521- .mul_wrap ,
522- .mul_sat ,
523518 .sub ,
524519 .sub_wrap ,
525520 .sub_sat ,
@@ -538,6 +533,25 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {
538533 ais .popIndent ();
539534 },
540535
536+ .div ,
537+ .mod ,
538+ .mul ,
539+ .mul_wrap ,
540+ .mul_sat ,
541+ = > {
542+ const lhs , const rhs = tree .nodeData (node ).node_and_node ;
543+ try renderExpression (r , lhs , .none );
544+ const op_token = tree .nodeMainToken (node );
545+ try ais .pushIndent (.binop );
546+ if (tree .tokensOnSameLine (op_token , op_token + 1 )) {
547+ try renderToken (r , op_token , .none );
548+ } else {
549+ try renderToken (r , op_token , .newline );
550+ }
551+ try renderExpression (r , rhs , space );
552+ ais .popIndent ();
553+ },
554+
541555 .assign_destructure = > {
542556 const full = tree .assignDestructure (node );
543557 if (full .comptime_token ) | comptime_token | {
@@ -759,12 +773,12 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {
759773 return renderToken (r , rbrace , space );
760774 } else {
761775 // There is no trailing comma so render everything on one line.
762- try renderToken (r , lbrace , .space );
776+ try renderToken (r , lbrace , .none );
763777 var i = lbrace + 1 ;
764778 while (i < rbrace ) : (i += 1 ) {
765779 switch (tree .tokenTag (i )) {
766780 .doc_comment = > unreachable , // TODO
767- .identifier = > try renderIdentifier (r , i , .comma_space , .eagerly_unquote ),
781+ .identifier = > try renderIdentifier (r , i , if ( i + 1 != rbrace ) .comma_space else .none , .eagerly_unquote ),
768782 .comma = > {},
769783 else = > unreachable ,
770784 }
@@ -811,7 +825,7 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {
811825
812826 const rparen = tree .lastToken (full .ast .condition ) + 1 ;
813827
814- try renderToken (r , full .ast .switch_token , .space ); // switch
828+ try renderToken (r , full .ast .switch_token , .none ); // switch
815829 try renderToken (r , full .ast .switch_token + 1 , .none ); // (
816830 try renderExpression (r , full .ast .condition , .none ); // condition expression
817831 try renderToken (r , rparen , .space ); // )
@@ -1240,7 +1254,7 @@ fn renderWhile(r: *Render, while_node: Ast.full.While, space: Space) Error!void
12401254 try renderToken (r , inline_token , .space ); // inline
12411255 }
12421256
1243- try renderToken (r , while_node .ast .while_token , .space ); // if/for/while
1257+ try renderToken (r , while_node .ast .while_token , .none ); // if/for/while
12441258 try renderToken (r , while_node .ast .while_token + 1 , .none ); // lparen
12451259 try renderExpression (r , while_node .ast .cond_expr , .none ); // condition
12461260
@@ -1367,7 +1381,7 @@ fn renderFor(r: *Render, for_node: Ast.full.For, space: Space) Error!void {
13671381 try renderToken (r , inline_token , .space ); // inline
13681382 }
13691383
1370- try renderToken (r , for_node .ast .for_token , .space ); // if/for/while
1384+ try renderToken (r , for_node .ast .for_token , .none ); // if/for/while
13711385
13721386 const lparen = for_node .ast .for_token + 1 ;
13731387 try renderParamList (r , lparen , for_node .ast .inputs , .space );
@@ -1620,7 +1634,7 @@ fn renderFnProto(r: *Render, fn_proto: Ast.full.FnProto, space: Space) Error!voi
16201634 try renderIdentifier (r , after_fn_token , .none , .preserve_when_shadowing ); // name
16211635 break :blk after_fn_token + 1 ;
16221636 } else blk : {
1623- try renderToken (r , fn_proto .ast .fn_token , .space ); // fn
1637+ try renderToken (r , fn_proto .ast .fn_token , .none ); // fn
16241638 break :blk fn_proto .ast .fn_token + 1 ;
16251639 };
16261640 assert (tree .tokenTag (lparen ) == .l_paren );
@@ -2003,14 +2017,14 @@ fn renderStructInit(
20032017 ais .popIndent ();
20042018 } else {
20052019 // Render all on one line, no trailing comma.
2006- try renderToken (r , struct_init .ast .lbrace , .space );
2020+ try renderToken (r , struct_init .ast .lbrace , .none );
20072021
2008- for (struct_init .ast .fields ) | field_init | {
2022+ for (struct_init .ast .fields , 0 .. ) | field_init , i | {
20092023 const init_token = tree .firstToken (field_init );
20102024 try renderToken (r , init_token - 3 , .none ); // .
20112025 try renderIdentifier (r , init_token - 2 , .space , .eagerly_unquote ); // name
20122026 try renderToken (r , init_token - 1 , .space ); // =
2013- try renderExpressionFixup (r , field_init , . comma_space );
2027+ try renderExpressionFixup (r , field_init , if ( i + 1 != struct_init . ast . fields . len ) . comma_space else .none );
20142028 }
20152029 }
20162030
@@ -2067,9 +2081,9 @@ fn renderArrayInit(
20672081 try renderToken (r , array_init .ast .lbrace , .none );
20682082 try renderExpression (r , array_init .ast .elements [0 ], .none );
20692083 } else {
2070- try renderToken (r , array_init .ast .lbrace , .space );
2071- for (array_init .ast .elements ) | elem | {
2072- try renderExpression (r , elem , . comma_space );
2084+ try renderToken (r , array_init .ast .lbrace , .none );
2085+ for (array_init .ast .elements , 0 .. ) | elem , i | {
2086+ try renderExpression (r , elem , if ( i + 1 != array_init . ast . elements . len ) . comma_space else .none );
20732087 }
20742088 }
20752089 return renderToken (r , last_elem_token + 1 , space ); // rbrace
@@ -2329,9 +2343,9 @@ fn renderContainerDecl(
23292343 }
23302344
23312345 // Print all the declarations on the same line.
2332- try renderToken (r , lbrace , .space ); // lbrace
2333- for (container_decl .ast .members ) | member | {
2334- try renderMember (r , container , member , . space );
2346+ try renderToken (r , lbrace , .none ); // lbrace
2347+ for (container_decl .ast .members , 0 .. ) | member , i | {
2348+ try renderMember (r , container , member , if ( i + 1 != container_decl . ast . members . len ) . space else .none );
23352349 }
23362350 return renderToken (r , rbrace , space ); // rbrace
23372351 }
@@ -3114,7 +3128,7 @@ fn anythingBetween(tree: Ast, start_token: Ast.TokenIndex, end_token: Ast.TokenI
31143128
31153129fn writeFixingWhitespace (writer : std .ArrayList (u8 ).Writer , slice : []const u8 ) Error ! void {
31163130 for (slice ) | byte | switch (byte ) {
3117- '\t ' = > try writer .writeAll ( " " ** indent_delta ),
3131+ '\t ' = > try writer .writeByte ( ' \t ' ),
31183132 '\r ' = > {},
31193133 else = > try writer .writeByte (byte ),
31203134 };
@@ -3438,12 +3452,12 @@ fn AutoIndentingStream(comptime UnderlyingWriter: type) type {
34383452 return self .indent_stack .items .len == 0 ;
34393453 }
34403454
3441- /// Writes ' ' bytes if the current line is empty
3455+ /// Writes '\t ' bytes if the current line is empty
34423456 fn applyIndent (self : * Self ) WriteError ! void {
34433457 const current_indent = self .currentIndent ();
34443458 if (self .current_line_empty and current_indent > 0 ) {
34453459 if (self .disabled_offset == null ) {
3446- try self .underlying_writer .writeByteNTimes (' ' , current_indent );
3460+ try self .underlying_writer .writeByteNTimes ('\t ' , current_indent );
34473461 }
34483462 self .applied_indent = current_indent ;
34493463 }
0 commit comments