]> granicus.if.org Git - clang/commitdiff
[clang-format] Recognize percents as format specifiers in protos
authorKrasimir Georgiev <krasimir@google.com>
Wed, 14 Feb 2018 19:47:58 +0000 (19:47 +0000)
committerKrasimir Georgiev <krasimir@google.com>
Wed, 14 Feb 2018 19:47:58 +0000 (19:47 +0000)
Summary:
Frequently, a percent in protos denotes a formatting specifier for string replacement.
Thus it is desirable to keep the percent together with what follows after it.

Reviewers: djasper

Reviewed By: djasper

Subscribers: klimek, cfe-commits

Differential Revision: https://reviews.llvm.org/D43294

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@325159 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Format/TokenAnnotator.cpp
unittests/Format/FormatTestProto.cpp
unittests/Format/FormatTestTextProto.cpp

index 248e2b585015d76aff5b80a76920ce260e6c8f63..0d54208bbe9910688238dce78259c40958b61335 100644 (file)
@@ -2425,6 +2425,9 @@ bool TokenAnnotator::spaceRequiredBefore(const AnnotatedLine &Line,
     if (Left.MatchingParen && Left.MatchingParen->is(TT_ProtoExtensionLSquare) &&
         Right.isOneOf(tok::l_brace, tok::less))
       return !Style.Cpp11BracedListStyle;
+    // A percent is probably part of a formatting specification, such as %lld.
+    if (Left.is(tok::percent))
+      return false;
   } else if (Style.Language == FormatStyle::LK_JavaScript) {
     if (Left.is(TT_JsFatArrow))
       return true;
index 27ecde7f340931d5a2ec32573afb5312bc98d488..40a069b3f3d03caf1cb863ea2697b1c5ac50629d 100644 (file)
@@ -432,5 +432,11 @@ TEST_F(FormatTestProto, FormatsOptionsExtensions) {
                "};");
 }
 
+TEST_F(FormatTestProto, NoSpaceAfterPercent) {
+  verifyFormat("option (MyProto.options) = {\n"
+               "  key: %lld\n"
+               "};");
+}
+
 } // end namespace tooling
 } // end namespace clang
index 8786b270ed59c87e161cb98999e2b5cda9c14f40..151774b9e2e515f87522921dc391a2a42ef62d16 100644 (file)
@@ -386,5 +386,9 @@ TEST_F(FormatTestTextProto, FormatsExtensions) {
                "  }\n"
                "}");
 }
+
+TEST_F(FormatTestTextProto, NoSpaceAfterPercent) {
+  verifyFormat("key: %d");
+}
 } // end namespace tooling
 } // end namespace clang