@@ -110,38 +110,44 @@ fn renderTopLevelDecl(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, i
110
110
111
111
try renderDocComments (tree , stream , tag , indent );
112
112
113
- const name_space = if (tag .type_expr == null and tag .value_expr != null ) Space .Space else Space .None ;
114
- try renderToken (tree , stream , tag .name_token , indent , name_space ); // name
113
+ if (tag .type_expr == null and tag .value_expr == null ) {
114
+ return renderTokenAndTrailingComma (tree , stream , tag .name_token , indent , Space .Newline ); // name,
115
+ }
116
+
117
+ if (tag .type_expr == null ) {
118
+ try renderToken (tree , stream , tag .name_token , indent , Space .Space ); // name
119
+ } else {
120
+ try renderToken (tree , stream , tag .name_token , indent , Space .None ); // name
121
+ }
115
122
116
123
if (tag .type_expr ) | type_expr | {
117
124
try renderToken (tree , stream , tree .nextToken (tag .name_token ), indent , Space .Space ); // :
118
125
119
- const after_type_space = if (tag .value_expr == null ) Space .None else Space .Space ;
120
- try renderExpression (allocator , stream , tree , indent , type_expr , after_type_space );
121
- }
122
-
123
- if (tag .value_expr ) | value_expr | {
124
- try renderToken (tree , stream , tree .prevToken (value_expr .firstToken ()), indent , Space .Space ); // =
125
- try renderExpression (allocator , stream , tree , indent , value_expr , Space .None );
126
+ if (tag .value_expr == null ) {
127
+ return renderTrailingComma (allocator , stream , tree , indent , type_expr , Space .Newline ); // type,
128
+ } else {
129
+ try renderExpression (allocator , stream , tree , indent , type_expr , Space .Space ); // type
130
+ }
126
131
}
127
132
128
- try renderToken (tree , stream , tree .nextToken (decl .lastToken ()), indent , Space .Newline ); // ,
133
+ const value_expr = ?? tag .value_expr ;
134
+ try renderToken (tree , stream , tree .prevToken (value_expr .firstToken ()), indent , Space .Space ); // =
135
+ try renderTrailingComma (allocator , stream , tree , indent , value_expr , Space .Newline ); // value,
129
136
},
130
137
131
138
ast .Node .Id .EnumTag = > {
132
139
const tag = @fieldParentPtr (ast .Node .EnumTag , "base" , decl );
133
140
134
141
try renderDocComments (tree , stream , tag , indent );
135
142
136
- const after_name_space = if (tag .value == null ) Space .None else Space .Space ;
137
- try renderToken (tree , stream , tag .name_token , indent , after_name_space ); // name
138
-
139
143
if (tag .value ) | value | {
144
+ try renderToken (tree , stream , tag .name_token , indent , Space .Space ); // name
145
+
140
146
try renderToken (tree , stream , tree .nextToken (tag .name_token ), indent , Space .Space ); // =
141
- try renderExpression (allocator , stream , tree , indent , value , Space .None );
147
+ try renderTrailingComma (allocator , stream , tree , indent , value , Space .Newline );
148
+ } else {
149
+ try renderTokenAndTrailingComma (tree , stream , tag .name_token , indent , Space .Newline ); // name
142
150
}
143
-
144
- try renderToken (tree , stream , tree .nextToken (decl .lastToken ()), indent , Space .Newline ); // ,
145
151
},
146
152
147
153
ast .Node .Id .Comptime = > {
@@ -1584,7 +1590,6 @@ const Space = enum {
1584
1590
NoNewline ,
1585
1591
NoIndent ,
1586
1592
NoComment ,
1587
- IgnoreEmptyComment ,
1588
1593
};
1589
1594
1590
1595
fn renderToken (tree : & ast.Tree , stream : var , token_index : ast.TokenIndex , indent : usize , space : Space ) (@typeOf (stream ).Child .Error || Error )! void {
@@ -1604,15 +1609,14 @@ fn renderToken(tree: &ast.Tree, stream: var, token_index: ast.TokenIndex, indent
1604
1609
return stream .write ("\n " );
1605
1610
}
1606
1611
},
1607
- Space .Space , Space . IgnoreEmptyComment = > return stream .writeByte (' ' ),
1612
+ Space .Space = > return stream .writeByte (' ' ),
1608
1613
Space .NoComment = > unreachable ,
1609
1614
}
1610
1615
}
1611
1616
1612
1617
const comment_is_empty = mem .trimRight (u8 , tree .tokenSlicePtr (next_token ), " " ).len == 2 ;
1613
1618
if (comment_is_empty ) {
1614
1619
switch (space ) {
1615
- Space .IgnoreEmptyComment = > return stream .writeByte (' ' ),
1616
1620
Space .Newline = > return stream .writeByte ('\n ' ),
1617
1621
else = > {},
1618
1622
}
@@ -1644,7 +1648,7 @@ fn renderToken(tree: &ast.Tree, stream: var, token_index: ast.TokenIndex, indent
1644
1648
}
1645
1649
},
1646
1650
Space .NoNewline = > {},
1647
- Space .NoComment , Space . IgnoreEmptyComment = > unreachable ,
1651
+ Space .NoComment = > unreachable ,
1648
1652
}
1649
1653
return ;
1650
1654
}
@@ -1681,7 +1685,7 @@ fn renderToken(tree: &ast.Tree, stream: var, token_index: ast.TokenIndex, indent
1681
1685
try stream .writeByteNTimes (' ' , next_line_indent );
1682
1686
},
1683
1687
Space .NoNewline = > {},
1684
- Space .NoComment , Space . IgnoreEmptyComment = > unreachable ,
1688
+ Space .NoComment = > unreachable ,
1685
1689
}
1686
1690
return ;
1687
1691
}
@@ -1720,27 +1724,22 @@ fn renderTrailingComma(allocator: &mem.Allocator, stream: var, tree: &ast.Tree,
1720
1724
}
1721
1725
}
1722
1726
1723
- fn renderTrailingCommaAndEmptyComment (allocator : & mem.Allocator , stream : var , tree : & ast.Tree , indent : usize , base : & ast.Node ) (@typeOf (stream ).Child .Error || Error )! void
1724
- {
1725
- const end_token = base .lastToken () + 1 ;
1727
+ fn renderTokenAndTrailingComma (tree : & ast.Tree , stream : var , token_index : ast.TokenIndex , indent : usize , space : Space ) (@typeOf (stream ).Child .Error || Error )! void {
1728
+ const end_token = token_index + 1 ;
1726
1729
switch (tree .tokens .at (end_token ).id ) {
1727
1730
Token .Id .Comma = > {
1728
- try renderExpression (allocator , stream , tree , indent , base , Space .None );
1729
- try renderToken (tree , stream , end_token , indent , Space .Space ); // ,
1730
-
1731
- const next_token = tree .tokens .at (end_token + 1 );
1732
- if (next_token .id != Token .Id .LineComment ) {
1733
- try stream .print ("//\n " );
1734
- }
1731
+ try renderToken (tree , stream , token_index , indent , Space .None );
1732
+ try renderToken (tree , stream , end_token , indent , space ); // ,
1735
1733
},
1736
1734
Token .Id .LineComment = > {
1737
- try renderExpression ( allocator , stream , tree , indent , base , Space .NoComment );
1735
+ try renderToken ( tree , stream , token_index , indent , Space .NoComment );
1738
1736
try stream .write (", " );
1739
- try renderToken (tree , stream , end_token , indent , Space . Newline );
1737
+ try renderToken (tree , stream , end_token , indent , space );
1740
1738
},
1741
1739
else = > {
1742
- try renderExpression (allocator , stream , tree , indent , base , Space .None );
1743
- try stream .write (", //\n " );
1740
+ try renderToken (tree , stream , token_index , indent , Space .None );
1741
+ try stream .write (",\n " );
1742
+ assert (space == Space .Newline );
1744
1743
},
1745
1744
}
1746
1745
}
0 commit comments