| ... | ... | @@ -39,11 +39,12 @@ pub fn render(allocator: &mem.Allocator, stream: var, tree: &ast.Tree) (@typeOf( |
| 39 | 39 | } |
| 40 | 40 | |
| 41 | 41 | fn renderExtraNewline(tree: &ast.Tree, stream: var, node: &ast.Node) !void { |
| 42 | | var first_token = node.firstToken(); |
| 43 | | while (tree.tokens.at(first_token - 1).id == Token.Id.DocComment) { |
| 44 | | first_token -= 1; |
| 42 | const first_token = node.firstToken(); |
| 43 | var prev_token = first_token; |
| 44 | while (tree.tokens.at(prev_token - 1).id == Token.Id.DocComment) { |
| 45 | prev_token -= 1; |
| 45 | 46 | } |
| 46 | | const prev_token_end = tree.tokens.at(first_token - 1).end; |
| 47 | const prev_token_end = tree.tokens.at(prev_token - 1).end; |
| 47 | 48 | const loc = tree.tokenLocation(prev_token_end, first_token); |
| 48 | 49 | if (loc.line >= 2) { |
| 49 | 50 | try stream.writeByte('\n'); |
| ... | ... | @@ -1715,7 +1716,17 @@ fn renderToken(tree: &ast.Tree, stream: var, token_index: ast.TokenIndex, indent |
| 1715 | 1716 | else => {}, |
| 1716 | 1717 | } |
| 1717 | 1718 | |
| 1718 | | if (next_token.id != Token.Id.LineComment) { |
| 1719 | // Skip over same line doc comments |
| 1720 | var offset: usize = 1; |
| 1721 | if (next_token.id == Token.Id.DocComment) { |
| 1722 | const loc = tree.tokenLocationPtr(token.end, next_token); |
| 1723 | if (loc.line == 0) { |
| 1724 | offset += 1; |
| 1725 | next_token = tree.tokens.at(token_index + offset); |
| 1726 | } |
| 1727 | } |
| 1728 | |
| 1729 | if (next_token.id != Token.Id.LineComment) blk: { |
| 1719 | 1730 | switch (space) { |
| 1720 | 1731 | Space.None, Space.NoNewline => return, |
| 1721 | 1732 | Space.Newline => { |
| ... | ... | @@ -1739,7 +1750,6 @@ fn renderToken(tree: &ast.Tree, stream: var, token_index: ast.TokenIndex, indent |
| 1739 | 1750 | } |
| 1740 | 1751 | |
| 1741 | 1752 | var loc = tree.tokenLocationPtr(token.end, next_token); |
| 1742 | | var offset: usize = 1; |
| 1743 | 1753 | if (loc.line == 0) { |
| 1744 | 1754 | try stream.print(" {}", mem.trimRight(u8, tree.tokenSlicePtr(next_token), " ")); |
| 1745 | 1755 | offset = 2; |
| ... | ... | @@ -1820,8 +1830,15 @@ fn renderToken(tree: &ast.Tree, stream: var, token_index: ast.TokenIndex, indent |
| 1820 | 1830 | fn renderDocComments(tree: &ast.Tree, stream: var, node: var, indent: usize) (@typeOf(stream).Child.Error || Error)!void { |
| 1821 | 1831 | const comment = node.doc_comments ?? return; |
| 1822 | 1832 | var it = comment.lines.iterator(0); |
| 1833 | const first_token = node.firstToken(); |
| 1823 | 1834 | while (it.next()) |line_token_index| { |
| 1824 | | try renderToken(tree, stream, line_token_index.*, indent, Space.Newline); |
| 1825 | | try stream.writeByteNTimes(' ', indent); |
| 1835 | if (line_token_index.* < first_token) { |
| 1836 | try renderToken(tree, stream, line_token_index.*, indent, Space.Newline); |
| 1837 | try stream.writeByteNTimes(' ', indent); |
| 1838 | } else { |
| 1839 | try renderToken(tree, stream, line_token_index.*, indent, Space.NoComment); |
| 1840 | try stream.write("\n"); |
| 1841 | try stream.writeByteNTimes(' ', indent); |
| 1842 | } |
| 1826 | 1843 | } |
| 1827 | 1844 | } |