This makes sure that we do not change the meaning of pieces of text with
format specifiers.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329263
91177308-0d34-0410-b5e6-
96231b3b80d8
// A percent is probably part of a formatting specification, such as %lld.
if (Left.is(tok::percent))
return false;
+ // Preserve the existence of a space before a percent for cases like 0x%04x
+ // and "%d %d"
+ if (Left.is(tok::numeric_constant) && Right.is(tok::percent))
+ return Right.WhitespaceRange.getEnd() != Right.WhitespaceRange.getBegin();
} else if (Style.Language == FormatStyle::LK_JavaScript) {
if (Left.is(TT_JsFatArrow))
return true;
"};");
}
-TEST_F(FormatTestProto, NoSpaceAfterPercent) {
+TEST_F(FormatTestProto, SpacesAroundPercents) {
verifyFormat("option (MyProto.options) = {\n"
" key: %lld\n"
+ " key: 0x%04x\n"
+ " key: \"%d %d\"\n"
"};");
}
"}");
}
-TEST_F(FormatTestTextProto, NoSpaceAfterPercent) {
+TEST_F(FormatTestTextProto, SpacesAroundPercents) {
verifyFormat("key: %d");
+ verifyFormat("key: 0x%04x");
+ verifyFormat("key: \"%d %d\"");
}
TEST_F(FormatTestTextProto, FormatsRepeatedListInitializers) {