diff --git a/AK/Format.h b/AK/Format.h index ff31d69b4c..f552b59fed 100644 --- a/AK/Format.h +++ b/AK/Format.h @@ -99,6 +99,12 @@ String format(StringView fmtstr, const Parameters&... parameters) Array formatters { Detail::Format::make_type_erased_formatter(parameters)... }; return Detail::Format::format(fmtstr, formatters); } +template +void format(StringBuilder& builder, StringView fmtstr, const Parameters&... parameters) +{ + Array formatters { Detail::Format::make_type_erased_formatter(parameters)... }; + Detail::Format::format(builder, fmtstr, formatters); +} template void StringBuilder::appendff(StringView fmtstr, const Parameters&... parameters) { AK::format(*this, fmtstr, parameters...); } diff --git a/AK/Tests/TestFormat.cpp b/AK/Tests/TestFormat.cpp index 4e4a284ae5..d54ab36e11 100644 --- a/AK/Tests/TestFormat.cpp +++ b/AK/Tests/TestFormat.cpp @@ -65,4 +65,13 @@ TEST_CASE(everything) EXPECT_EQ(AK::format("{{{:04}/{}/{0:8}/{1}", 42u, "foo"), "{0042/foo/ 42/foo"); } +TEST_CASE(string_builder) +{ + StringBuilder builder; + builder.appendff(" {} ", 42); + builder.appendff("{1}{0} ", 1, 2); + + EXPECT_EQ(builder.to_string(), " 42 21 "); +} + TEST_MAIN(Format)