| ... | ... | @@ -26,10 +26,7 @@ pub fn renderTree(buffer: *std.ArrayList(u8), tree: ast.Tree) Error!void { |
| 26 | 26 | const ais = &auto_indenting_stream; |
| 27 | 27 | |
| 28 | 28 | // Render all the line comments at the beginning of the file. |
| 29 | | const comment_end_loc = if (tree.tokens.items(.tag)[0] == .eof) |
| 30 | | tree.source.len |
| 31 | | else |
| 32 | | tree.tokens.items(.start)[0]; |
| 29 | const comment_end_loc = tree.tokens.items(.start)[0]; |
| 33 | 30 | _ = try renderComments(ais, tree, 0, comment_end_loc); |
| 34 | 31 | |
| 35 | 32 | try renderMembers(ais, tree, tree.rootDecls()); |
| ... | ... | @@ -1609,15 +1606,18 @@ fn renderArrayInit( |
| 1609 | 1606 | } else { |
| 1610 | 1607 | try renderExpression(ais, tree, array_init.ast.type_expr, .none); // T |
| 1611 | 1608 | } |
| 1609 | |
| 1612 | 1610 | if (array_init.ast.elements.len == 0) { |
| 1613 | 1611 | ais.pushIndentNextLine(); |
| 1614 | 1612 | try renderToken(ais, tree, array_init.ast.lbrace, .none); // lbrace |
| 1615 | 1613 | ais.popIndent(); |
| 1616 | 1614 | return renderToken(ais, tree, array_init.ast.lbrace + 1, space); // rbrace |
| 1617 | 1615 | } |
| 1616 | |
| 1618 | 1617 | const last_elem = array_init.ast.elements[array_init.ast.elements.len - 1]; |
| 1619 | 1618 | const last_elem_token = tree.lastToken(last_elem); |
| 1620 | | if (token_tags[last_elem_token + 1] == .comma) { |
| 1619 | const trailing_comma = token_tags[last_elem_token + 1] == .comma; |
| 1620 | if (trailing_comma) { |
| 1621 | 1621 | // Render one element per line. |
| 1622 | 1622 | ais.pushIndentNextLine(); |
| 1623 | 1623 | try renderToken(ais, tree, array_init.ast.lbrace, .newline); |
| ... | ... | @@ -2001,18 +2001,12 @@ fn renderComments(ais: *Ais, tree: ast.Tree, start: usize, end: usize) Error!boo |
| 2001 | 2001 | var rendered_empty_comments = false; |
| 2002 | 2002 | while (mem.indexOf(u8, tree.source[index..end], "//")) |offset| { |
| 2003 | 2003 | const comment_start = index + offset; |
| 2004 | | const newline_index = mem.indexOfScalar(u8, tree.source[comment_start..end], '\n') orelse { |
| 2005 | | // comment ends in EOF. |
| 2006 | | const untrimmed_comment = tree.source[comment_start..]; |
| 2007 | | const trimmed_comment = mem.trimRight(u8, untrimmed_comment, &std.ascii.spaces); |
| 2008 | | if (trimmed_comment.len != 2) { |
| 2009 | | try ais.writer().print("{s}\n", .{trimmed_comment}); |
| 2010 | | index = end; |
| 2011 | | } |
| 2012 | | return index != start; |
| 2013 | | }; |
| 2014 | | const newline = comment_start + newline_index; |
| 2015 | | const untrimmed_comment = tree.source[comment_start..newline]; |
| 2004 | |
| 2005 | // If there is no newline, the comment ends with EOF |
| 2006 | const newline_index = mem.indexOfScalar(u8, tree.source[comment_start..end], '\n'); |
| 2007 | const newline = if (newline_index) |i| comment_start + i else null; |
| 2008 | |
| 2009 | const untrimmed_comment = tree.source[comment_start .. newline orelse tree.source.len]; |
| 2016 | 2010 | const trimmed_comment = mem.trimRight(u8, untrimmed_comment, &std.ascii.spaces); |
| 2017 | 2011 | |
| 2018 | 2012 | // Don't leave any whitespace at the start of the file |
| ... | ... | @@ -2041,7 +2035,7 @@ fn renderComments(ais: *Ais, tree: ast.Tree, start: usize, end: usize) Error!boo |
| 2041 | 2035 | try ais.writer().print("{s}\n", .{trimmed_comment}); |
| 2042 | 2036 | rendered_empty_comments = false; |
| 2043 | 2037 | } |
| 2044 | | index = newline + 1; |
| 2038 | index = 1 + (newline orelse return true); |
| 2045 | 2039 | |
| 2046 | 2040 | if (ais.disabled_offset) |disabled_offset| { |
| 2047 | 2041 | if (mem.eql(u8, trimmed_comment, "// zig fmt: on")) { |