| ... | ... | @@ -133,6 +133,7 @@ fn renderMember( |
| 133 | 133 | ) Error!void { |
| 134 | 134 | const tree = r.tree; |
| 135 | 135 | const ais = r.ais; |
| 136 | const node_tags = tree.nodes.items(.tag); |
| 136 | 137 | const token_tags = tree.tokens.items(.tag); |
| 137 | 138 | const main_tokens = tree.nodes.items(.main_token); |
| 138 | 139 | const datas = tree.nodes.items(.data); |
| ... | ... | @@ -194,6 +195,45 @@ fn renderMember( |
| 194 | 195 | ais.popIndent(); |
| 195 | 196 | try ais.insertNewline(); |
| 196 | 197 | try renderToken(r, tree.lastToken(body_node), space); // rbrace |
| 198 | } else if (r.fixups.unused_var_decls.count() != 0) { |
| 199 | ais.pushIndentNextLine(); |
| 200 | const lbrace = tree.nodes.items(.main_token)[body_node]; |
| 201 | try renderToken(r, lbrace, .newline); |
| 202 | |
| 203 | var fn_proto_buf: [1]Ast.Node.Index = undefined; |
| 204 | const full_fn_proto = tree.fullFnProto(&fn_proto_buf, fn_proto).?; |
| 205 | var it = full_fn_proto.iterate(&tree); |
| 206 | while (it.next()) |param| { |
| 207 | const name_ident = param.name_token.?; |
| 208 | assert(token_tags[name_ident] == .identifier); |
| 209 | if (r.fixups.unused_var_decls.contains(name_ident)) { |
| 210 | const w = ais.writer(); |
| 211 | try w.writeAll("_ = "); |
| 212 | try w.writeAll(tokenSliceForRender(r.tree, name_ident)); |
| 213 | try w.writeAll(";\n"); |
| 214 | } |
| 215 | } |
| 216 | var statements_buf: [2]Ast.Node.Index = undefined; |
| 217 | const statements = switch (node_tags[body_node]) { |
| 218 | .block_two, |
| 219 | .block_two_semicolon, |
| 220 | => b: { |
| 221 | statements_buf = .{ datas[body_node].lhs, datas[body_node].rhs }; |
| 222 | if (datas[body_node].lhs == 0) { |
| 223 | break :b statements_buf[0..0]; |
| 224 | } else if (datas[body_node].rhs == 0) { |
| 225 | break :b statements_buf[0..1]; |
| 226 | } else { |
| 227 | break :b statements_buf[0..2]; |
| 228 | } |
| 229 | }, |
| 230 | .block, |
| 231 | .block_semicolon, |
| 232 | => tree.extra_data[datas[body_node].lhs..datas[body_node].rhs], |
| 233 | |
| 234 | else => unreachable, |
| 235 | }; |
| 236 | return finishRenderBlock(r, body_node, statements, space); |
| 197 | 237 | } else { |
| 198 | 238 | return renderExpression(r, body_node, space); |
| 199 | 239 | } |
| ... | ... | @@ -1069,7 +1109,7 @@ fn renderVarDecl( |
| 1069 | 1109 | space: Space, |
| 1070 | 1110 | ) Error!void { |
| 1071 | 1111 | try renderVarDeclWithoutFixups(r, var_decl, ignore_comptime_token, space); |
| 1072 | | if (r.fixups.unused_var_decls.contains(var_decl.ast.mut_token)) { |
| 1112 | if (r.fixups.unused_var_decls.contains(var_decl.ast.mut_token + 1)) { |
| 1073 | 1113 | // Discard the variable like this: `_ = foo;` |
| 1074 | 1114 | const w = r.ais.writer(); |
| 1075 | 1115 | try w.writeAll("_ = "); |
| ... | ... | @@ -1967,7 +2007,6 @@ fn renderBlock( |
| 1967 | 2007 | const tree = r.tree; |
| 1968 | 2008 | const ais = r.ais; |
| 1969 | 2009 | const token_tags = tree.tokens.items(.tag); |
| 1970 | | const node_tags = tree.nodes.items(.tag); |
| 1971 | 2010 | const lbrace = tree.nodes.items(.main_token)[block_node]; |
| 1972 | 2011 | |
| 1973 | 2012 | if (token_tags[lbrace - 1] == .colon and |
| ... | ... | @@ -1976,22 +2015,35 @@ fn renderBlock( |
| 1976 | 2015 | try renderIdentifier(r, lbrace - 2, .none, .eagerly_unquote); // identifier |
| 1977 | 2016 | try renderToken(r, lbrace - 1, .space); // : |
| 1978 | 2017 | } |
| 1979 | | |
| 1980 | 2018 | ais.pushIndentNextLine(); |
| 1981 | 2019 | if (statements.len == 0) { |
| 1982 | 2020 | try renderToken(r, lbrace, .none); |
| 1983 | | } else { |
| 1984 | | try renderToken(r, lbrace, .newline); |
| 1985 | | for (statements, 0..) |stmt, i| { |
| 1986 | | if (i != 0) try renderExtraNewline(r, stmt); |
| 1987 | | switch (node_tags[stmt]) { |
| 1988 | | .global_var_decl, |
| 1989 | | .local_var_decl, |
| 1990 | | .simple_var_decl, |
| 1991 | | .aligned_var_decl, |
| 1992 | | => try renderVarDecl(r, tree.fullVarDecl(stmt).?, false, .semicolon), |
| 1993 | | else => try renderExpression(r, stmt, .semicolon), |
| 1994 | | } |
| 2021 | ais.popIndent(); |
| 2022 | try renderToken(r, tree.lastToken(block_node), space); // rbrace |
| 2023 | return; |
| 2024 | } |
| 2025 | try renderToken(r, lbrace, .newline); |
| 2026 | return finishRenderBlock(r, block_node, statements, space); |
| 2027 | } |
| 2028 | |
| 2029 | fn finishRenderBlock( |
| 2030 | r: *Render, |
| 2031 | block_node: Ast.Node.Index, |
| 2032 | statements: []const Ast.Node.Index, |
| 2033 | space: Space, |
| 2034 | ) Error!void { |
| 2035 | const tree = r.tree; |
| 2036 | const node_tags = tree.nodes.items(.tag); |
| 2037 | const ais = r.ais; |
| 2038 | for (statements, 0..) |stmt, i| { |
| 2039 | if (i != 0) try renderExtraNewline(r, stmt); |
| 2040 | switch (node_tags[stmt]) { |
| 2041 | .global_var_decl, |
| 2042 | .local_var_decl, |
| 2043 | .simple_var_decl, |
| 2044 | .aligned_var_decl, |
| 2045 | => try renderVarDecl(r, tree.fullVarDecl(stmt).?, false, .semicolon), |
| 2046 | else => try renderExpression(r, stmt, .semicolon), |
| 1995 | 2047 | } |
| 1996 | 2048 | } |
| 1997 | 2049 | ais.popIndent(); |