diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2023-11-04 17:37:34 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2023-11-04 17:37:34 -0700 |
| commit | 31ad3af956231357ffa2c0fcfaf96a95c2fe1e8b (patch) | |
| tree | 32b5837255e2e02cc6c4b67adfc3096c8288fa43 /lib/std | |
| parent | fc1e7a56441aea4a9394c4e8c0142110891b4a1a (diff) | |
| download | zig-31ad3af956231357ffa2c0fcfaf96a95c2fe1e8b.tar.gz zig-31ad3af956231357ffa2c0fcfaf96a95c2fe1e8b.zip | |
std.zig.render: support fixing unused parameter
Diffstat (limited to 'lib/std')
| -rw-r--r-- | lib/std/zig/render.zig | 82 |
1 files changed, 67 insertions, 15 deletions
diff --git a/lib/std/zig/render.zig b/lib/std/zig/render.zig index 348b75159f..f8ad44353f 100644 --- a/lib/std/zig/render.zig +++ b/lib/std/zig/render.zig @@ -133,6 +133,7 @@ fn renderMember( ) Error!void { const tree = r.tree; const ais = r.ais; + const node_tags = tree.nodes.items(.tag); const token_tags = tree.tokens.items(.tag); const main_tokens = tree.nodes.items(.main_token); const datas = tree.nodes.items(.data); @@ -194,6 +195,45 @@ fn renderMember( ais.popIndent(); try ais.insertNewline(); try renderToken(r, tree.lastToken(body_node), space); // rbrace + } else if (r.fixups.unused_var_decls.count() != 0) { + ais.pushIndentNextLine(); + const lbrace = tree.nodes.items(.main_token)[body_node]; + try renderToken(r, lbrace, .newline); + + var fn_proto_buf: [1]Ast.Node.Index = undefined; + const full_fn_proto = tree.fullFnProto(&fn_proto_buf, fn_proto).?; + var it = full_fn_proto.iterate(&tree); + while (it.next()) |param| { + const name_ident = param.name_token.?; + assert(token_tags[name_ident] == .identifier); + if (r.fixups.unused_var_decls.contains(name_ident)) { + const w = ais.writer(); + try w.writeAll("_ = "); + try w.writeAll(tokenSliceForRender(r.tree, name_ident)); + try w.writeAll(";\n"); + } + } + var statements_buf: [2]Ast.Node.Index = undefined; + const statements = switch (node_tags[body_node]) { + .block_two, + .block_two_semicolon, + => b: { + statements_buf = .{ datas[body_node].lhs, datas[body_node].rhs }; + if (datas[body_node].lhs == 0) { + break :b statements_buf[0..0]; + } else if (datas[body_node].rhs == 0) { + break :b statements_buf[0..1]; + } else { + break :b statements_buf[0..2]; + } + }, + .block, + .block_semicolon, + => tree.extra_data[datas[body_node].lhs..datas[body_node].rhs], + + else => unreachable, + }; + return finishRenderBlock(r, body_node, statements, space); } else { return renderExpression(r, body_node, space); } @@ -1069,7 +1109,7 @@ fn renderVarDecl( space: Space, ) Error!void { try renderVarDeclWithoutFixups(r, var_decl, ignore_comptime_token, space); - if (r.fixups.unused_var_decls.contains(var_decl.ast.mut_token)) { + if (r.fixups.unused_var_decls.contains(var_decl.ast.mut_token + 1)) { // Discard the variable like this: `_ = foo;` const w = r.ais.writer(); try w.writeAll("_ = "); @@ -1967,7 +2007,6 @@ fn renderBlock( const tree = r.tree; const ais = r.ais; const token_tags = tree.tokens.items(.tag); - const node_tags = tree.nodes.items(.tag); const lbrace = tree.nodes.items(.main_token)[block_node]; if (token_tags[lbrace - 1] == .colon and @@ -1976,22 +2015,35 @@ fn renderBlock( try renderIdentifier(r, lbrace - 2, .none, .eagerly_unquote); // identifier try renderToken(r, lbrace - 1, .space); // : } - ais.pushIndentNextLine(); if (statements.len == 0) { try renderToken(r, lbrace, .none); - } else { - try renderToken(r, lbrace, .newline); - for (statements, 0..) |stmt, i| { - if (i != 0) try renderExtraNewline(r, stmt); - switch (node_tags[stmt]) { - .global_var_decl, - .local_var_decl, - .simple_var_decl, - .aligned_var_decl, - => try renderVarDecl(r, tree.fullVarDecl(stmt).?, false, .semicolon), - else => try renderExpression(r, stmt, .semicolon), - } + ais.popIndent(); + try renderToken(r, tree.lastToken(block_node), space); // rbrace + return; + } + try renderToken(r, lbrace, .newline); + return finishRenderBlock(r, block_node, statements, space); +} + +fn finishRenderBlock( + r: *Render, + block_node: Ast.Node.Index, + statements: []const Ast.Node.Index, + space: Space, +) Error!void { + const tree = r.tree; + const node_tags = tree.nodes.items(.tag); + const ais = r.ais; + for (statements, 0..) |stmt, i| { + if (i != 0) try renderExtraNewline(r, stmt); + switch (node_tags[stmt]) { + .global_var_decl, + .local_var_decl, + .simple_var_decl, + .aligned_var_decl, + => try renderVarDecl(r, tree.fullVarDecl(stmt).?, false, .semicolon), + else => try renderExpression(r, stmt, .semicolon), } } ais.popIndent(); |
