fix %i formatter with missing argument (#10910)

This commit is contained in:
dave caruso
2024-05-07 23:51:10 -07:00
committed by GitHub
parent 127cb9fd42
commit 3c082012b7
3 changed files with 24 additions and 15 deletions

View File

@@ -1245,7 +1245,6 @@ pub const Formatter = struct {
var slice = slice_;
var i: u32 = 0;
var len: u32 = @as(u32, @truncate(slice.len));
var any_non_ascii = false;
var hit_percent = false;
while (i < len) : (i += 1) {
if (hit_percent) {
@@ -1259,6 +1258,9 @@ pub const Formatter = struct {
if (i >= len)
break;
if (this.remaining_values.len == 0)
break;
const token: PercentTag = switch (slice[i]) {
's' => .s,
'f' => .f,
@@ -1266,16 +1268,21 @@ pub const Formatter = struct {
'O' => .O,
'd', 'i' => .i,
'c' => .c,
'%' => {
// print up to and including the first %
const end = slice[0..i];
writer.writeAll(end);
// then skip the second % so we dont hit it again
slice = slice[@min(slice.len, i + 1)..];
i = 0;
continue;
},
else => continue,
};
// Flush everything up to the %
const end = slice[0 .. i - 1];
if (!any_non_ascii)
writer.writeAll(end)
else
writer.writeAll(end);
any_non_ascii = false;
writer.writeAll(end);
slice = slice[@min(slice.len, i + 1)..];
i = 0;
hit_percent = true;
@@ -1422,15 +1429,6 @@ pub const Formatter = struct {
}
if (this.remaining_values.len == 0) break;
},
'\\' => {
i += 1;
if (i >= len)
break;
if (slice[i] == '%') i += 2;
},
128...255 => {
any_non_ascii = true;
},
else => {},
}
}

View File

@@ -279,3 +279,8 @@ custom inspect
0.30000000000000004
Hello World 123
Hello %vWorld 123
Hello NaN %i
Hello NaN % 1
Hello NaN %j 1
Hello \5 6,
Hello %i 5 6

View File

@@ -255,3 +255,9 @@ console.log("%f", 0.30000000000000004);
console.log("Hello %cWorld", "color: red", 123);
console.log("Hello %vWorld", 123);
console.log("Hello %i %i", [1, 2, 3, 4]);
console.log("Hello %i %", [1, 2, 3, 4], 1);
console.log("Hello %i %j", [1, 2, 3, 4], 1);
console.log("Hello \\%i %i,", 5, 6);
console.log("Hello %%i %i", 5, 6);