summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKrasimir Georgiev <krasimir@google.com>2018-02-14 19:47:58 +0000
committerKrasimir Georgiev <krasimir@google.com>2018-02-14 19:47:58 +0000
commit76064a4b1e7fd1d53cdef12300cb21ceccad3e48 (patch)
treedcb027179613cff61ee8a39966de425cab3725d8
parentab31b7759dc3cc02b83c49ce1790aef0db9bf1f0 (diff)
downloadbcm5719-llvm-76064a4b1e7fd1d53cdef12300cb21ceccad3e48.tar.gz
bcm5719-llvm-76064a4b1e7fd1d53cdef12300cb21ceccad3e48.zip
[clang-format] Recognize percents as format specifiers in protos
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 llvm-svn: 325159
-rw-r--r--clang/lib/Format/TokenAnnotator.cpp3
-rw-r--r--clang/unittests/Format/FormatTestProto.cpp6
-rw-r--r--clang/unittests/Format/FormatTestTextProto.cpp4
3 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp
index 248e2b58501..0d54208bbe9 100644
--- a/clang/lib/Format/TokenAnnotator.cpp
+++ b/clang/lib/Format/TokenAnnotator.cpp
@@ -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;
diff --git a/clang/unittests/Format/FormatTestProto.cpp b/clang/unittests/Format/FormatTestProto.cpp
index 27ecde7f340..40a069b3f3d 100644
--- a/clang/unittests/Format/FormatTestProto.cpp
+++ b/clang/unittests/Format/FormatTestProto.cpp
@@ -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
diff --git a/clang/unittests/Format/FormatTestTextProto.cpp b/clang/unittests/Format/FormatTestTextProto.cpp
index 8786b270ed5..151774b9e2e 100644
--- a/clang/unittests/Format/FormatTestTextProto.cpp
+++ b/clang/unittests/Format/FormatTestTextProto.cpp
@@ -386,5 +386,9 @@ TEST_F(FormatTestTextProto, FormatsExtensions) {
" }\n"
"}");
}
+
+TEST_F(FormatTestTextProto, NoSpaceAfterPercent) {
+ verifyFormat("key: %d");
+}
} // end namespace tooling
} // end namespace clang
OpenPOWER on IntegriCloud