authorgravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2023-06-20 14:19:14+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-06-24 16:47:49-07:00
log283d6509730a0ca6fae0ed07a1814f5a9237f282
treecadd5634824e5c3e51c48a3f0a655d689a0c2387
parentbe0c69957e7489423606023ad820599652a60e15

fmt: add rewrite for cast builtin type parameters


1 files changed, 56 insertions(+), 2 deletions(-)

lib/std/zig/render.zig+56-2
......@@ -1390,14 +1390,51 @@ fn renderBuiltinCall(
13901390) Error!void {
13911391 const token_tags = tree.tokens.items(.tag);
13921392
1393 // TODO remove before release of 0.11.0
1393 // TODO remove before release of 0.12.0
13941394 const slice = tree.tokenSlice(builtin_token);
1395 const rewrite_two_param_cast = params.len == 2 and for ([_][]const u8{
1396 "@bitCast",
1397 "@errSetCast",
1398 "@floatCast",
1399 "@intCast",
1400 "@ptrCast",
1401 "@intFromFloat",
1402 "@floatToInt",
1403 "@enumFromInt",
1404 "@intToEnum",
1405 "@floatFromInt",
1406 "@intToFloat",
1407 "@ptrFromInt",
1408 "@intToPtr",
1409 "@truncate",
1410 }) |name| {
1411 if (mem.eql(u8, slice, name)) break true;
1412 } else false;
1413
1414 if (rewrite_two_param_cast) {
1415 const after_last_param_token = tree.lastToken(params[1]) + 1;
1416 if (token_tags[after_last_param_token] != .comma) {
1417 // Render all on one line, no trailing comma.
1418 try ais.writer().writeAll("@as");
1419 try renderToken(ais, tree, builtin_token + 1, .none); // (
1420 try renderExpression(gpa, ais, tree, params[0], .comma_space);
1421 } else {
1422 // Render one param per line.
1423 try ais.writer().writeAll("@as");
1424 ais.pushIndent();
1425 try renderToken(ais, tree, builtin_token + 1, .newline); // (
1426 try renderExpression(gpa, ais, tree, params[0], .comma);
1427 }
1428 }
1429 // Corresponding logic below builtin name rewrite below
1430
1431 // TODO remove before release of 0.11.0
13951432 if (mem.eql(u8, slice, "@maximum")) {
13961433 try ais.writer().writeAll("@max");
13971434 } else if (mem.eql(u8, slice, "@minimum")) {
13981435 try ais.writer().writeAll("@min");
13991436 }
1400 //
1437 // TODO remove before release of 0.12.0
14011438 else if (mem.eql(u8, slice, "@boolToInt")) {
14021439 try ais.writer().writeAll("@intFromBool");
14031440 } else if (mem.eql(u8, slice, "@enumToInt")) {
......@@ -1420,6 +1457,23 @@ fn renderBuiltinCall(
14201457 try renderToken(ais, tree, builtin_token, .none); // @name
14211458 }
14221459
1460 if (rewrite_two_param_cast) {
1461 // Matches with corresponding logic above builtin name rewrite
1462 const after_last_param_token = tree.lastToken(params[1]) + 1;
1463 try ais.writer().writeAll("(");
1464 try renderExpression(gpa, ais, tree, params[1], .none);
1465 try ais.writer().writeAll(")");
1466 if (token_tags[after_last_param_token] != .comma) {
1467 // Render all on one line, no trailing comma.
1468 return renderToken(ais, tree, after_last_param_token, space); // )
1469 } else {
1470 // Render one param per line.
1471 ais.popIndent();
1472 try renderToken(ais, tree, after_last_param_token, .newline); // ,
1473 return renderToken(ais, tree, after_last_param_token + 1, space); // )
1474 }
1475 }
1476
14231477 if (params.len == 0) {
14241478 try renderToken(ais, tree, builtin_token + 1, .none); // (
14251479 return renderToken(ais, tree, builtin_token + 2, space); // )