-
Notifications
You must be signed in to change notification settings - Fork 13.6k
[libc++][format] Propagate m
when formatting range elements
#94562
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
@llvm/pr-subscribers-libcxx Author: A. Jiang (frederick-vs-ja) ChangesAs per [tab:formatter.range.type], the effects of the Fixes #60995. Fixes #90196. Full diff: https://github.com/llvm/llvm-project/pull/94562.diff 2 Files Affected:
diff --git a/libcxx/include/__format/range_formatter.h b/libcxx/include/__format/range_formatter.h
index 6915630743493..ee94acc71776a 100644
--- a/libcxx/include/__format/range_formatter.h
+++ b/libcxx/include/__format/range_formatter.h
@@ -214,6 +214,8 @@ struct _LIBCPP_TEMPLATE_VIS range_formatter {
switch (*__begin) {
case _CharT('m'):
if constexpr (__fmt_pair_like<_Tp>) {
+ __underlying_.set_separator(_LIBCPP_STATICALLY_WIDEN(_CharT, ": "));
+ __underlying_.set_brackets({}, {});
set_brackets(_LIBCPP_STATICALLY_WIDEN(_CharT, "{"), _LIBCPP_STATICALLY_WIDEN(_CharT, "}"));
set_separator(_LIBCPP_STATICALLY_WIDEN(_CharT, ", "));
++__begin;
diff --git a/libcxx/test/std/utilities/format/format.range/format.range.formatter/format.functions.tests.h b/libcxx/test/std/utilities/format/format.range/format.range.formatter/format.functions.tests.h
index 78b067e8cffa9..3d4a5db09b70f 100644
--- a/libcxx/test/std/utilities/format/format.range/format.range.formatter/format.functions.tests.h
+++ b/libcxx/test/std/utilities/format/format.range/format.range.formatter/format.functions.tests.h
@@ -993,10 +993,10 @@ void test_pair_tuple(TestFunction check, ExceptionTest check_exception, auto&& i
// *** n
check(SV("__(1, 'a'), (42, '*')___"), SV("{:_^24n}"), input);
- check(SV("__(1, 'a'), (42, '*')___"), SV("{:_^24nm}"), input); // m should have no effect
+ check(SV("____1: 'a', 42: '*'_____"), SV("{:_^24nm}"), input);
// *** type ***
- check(SV("__{(1, 'a'), (42, '*')}___"), SV("{:_^26m}"), input);
+ check(SV("____{1: 'a', 42: '*'}_____"), SV("{:_^26m}"), input);
check_exception("Type s requires character type as formatting argument", SV("{:s}"), input);
check_exception("Type ?s requires character type as formatting argument", SV("{:?s}"), input);
for (std::basic_string_view<CharT> fmt : fmt_invalid_types<CharT>("s"))
@@ -1053,7 +1053,7 @@ void test_pair_tuple(TestFunction check, ExceptionTest check_exception, auto&& i
check(SV("1: 'a', 42: '*'"), SV("{:n:m}"), input);
check(SV("1, 'a', 42, '*'"), SV("{:n:n}"), input);
check(SV("{1: 'a', 42: '*'}"), SV("{:m:m}"), input);
- check(SV("{1, 'a', 42, '*'}"), SV("{:m:n}"), input);
+ check(SV("{1: 'a', 42: '*'}"), SV("{:m:n}"), input);
}
template <class CharT, class TestFunction, class ExceptionTest>
|
As per [tab:formatter.range.type], the effects of the `m` option need to be propagated to the formatter of range elements.
Thanks for the patch. I haven't had time to investigate the example |
Tagging for LLVM 19 since I think this is a nice bug to fix. |
Removing from LLVM 19 since this needs discussion on the reflector according to @mordante. |
@mordante Has there been any discussion on the reflector about this? |
This comment was marked as outdated.
This comment was marked as outdated.
Ping @mordante (again) |
As per [tab:formatter.range.type], the effects of the
m
option need to be propagated to the formatter of range elements.Fixes #60995. Fixes #90196.