summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKrasimir Georgiev <krasimir@google.com>2017-08-03 14:17:29 +0000
committerKrasimir Georgiev <krasimir@google.com>2017-08-03 14:17:29 +0000
commitddb19248eb1bea29aaf5c9ed8b1b19e45b08e8e9 (patch)
tree6f26a5a479b91990fededd9e8d17a933809112e5
parent50f6d3545785b061ece2fad2355bc914912db7cc (diff)
downloadbcm5719-llvm-ddb19248eb1bea29aaf5c9ed8b1b19e45b08e8e9.tar.gz
bcm5719-llvm-ddb19248eb1bea29aaf5c9ed8b1b19e45b08e8e9.zip
[clang-format] Fix indent of 'key <...>' and 'key {...}' in text protos
Summary: This patch fixes the indentation of the code pattern `key <...>`and `key {...}` in text protos. Previously, such line would be alinged depending on the column of the previous colon, which usually indents too much. I'm gonna go ahead and commit this since it's a straightforward bugfix. Reviewers: djasper, klimek Subscribers: klimek, cfe-commits Differential Revision: https://reviews.llvm.org/D36143 llvm-svn: 309941
-rw-r--r--clang/lib/Format/ContinuationIndenter.cpp5
-rw-r--r--clang/unittests/Format/FormatTestProto.cpp13
-rw-r--r--clang/unittests/Format/FormatTestTextProto.cpp44
3 files changed, 61 insertions, 1 deletions
diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp
index 26dacf6562b..25a470474b7 100644
--- a/clang/lib/Format/ContinuationIndenter.cpp
+++ b/clang/lib/Format/ContinuationIndenter.cpp
@@ -731,7 +731,10 @@ unsigned ContinuationIndenter::getNewLineColumn(const LineState &State) {
if (NextNonComment->is(TT_TemplateString) && NextNonComment->closesScope())
return State.Stack[State.Stack.size() - 2].LastSpace;
if (Current.is(tok::identifier) && Current.Next &&
- Current.Next->is(TT_DictLiteral))
+ (Current.Next->is(TT_DictLiteral) ||
+ ((Style.Language == FormatStyle::LK_Proto ||
+ Style.Language == FormatStyle::LK_TextProto) &&
+ Current.Next->isOneOf(TT_TemplateOpener, tok::l_brace))))
return State.Stack.back().Indent;
if (NextNonComment->is(TT_ObjCStringLiteral) &&
State.StartOfStringLiteral != 0)
diff --git a/clang/unittests/Format/FormatTestProto.cpp b/clang/unittests/Format/FormatTestProto.cpp
index ca26c543959..df94d817273 100644
--- a/clang/unittests/Format/FormatTestProto.cpp
+++ b/clang/unittests/Format/FormatTestProto.cpp
@@ -361,6 +361,19 @@ TEST_F(FormatTestProto, FormatsOptions) {
" data1 <key1: value1>\n"
" data2 {key2: value2}\n"
">;");
+
+ verifyFormat("option (MyProto.options) = <\n"
+ " app_id: 'com.javax.swing.salsa.latino'\n"
+ " head_id: 1\n"
+ " data <key: value>\n"
+ ">;");
+
+ verifyFormat("option (MyProto.options) = {\n"
+ " app_id: 'com.javax.swing.salsa.latino'\n"
+ " head_id: 1\n"
+ " headheadheadheadheadhead_id: 1\n"
+ " product_data {product {1}}\n"
+ "};");
}
TEST_F(FormatTestProto, FormatsService) {
diff --git a/clang/unittests/Format/FormatTestTextProto.cpp b/clang/unittests/Format/FormatTestTextProto.cpp
index 2de7e181f2c..0a7bcdd8236 100644
--- a/clang/unittests/Format/FormatTestTextProto.cpp
+++ b/clang/unittests/Format/FormatTestTextProto.cpp
@@ -245,6 +245,50 @@ TEST_F(FormatTestTextProto, SupportsAngleBracketMessageFields) {
">\n"
"field: OK,\n"
"field_c <field <field <>>>");
+
+ verifyFormat("app_id: 'com.javax.swing.salsa.latino'\n"
+ "head_id: 1\n"
+ "data <key: value>");
+
+ verifyFormat("app_id: 'com.javax.swing.salsa.latino'\n"
+ "head_id: 1\n"
+ "data <key: value>\n"
+ "tail_id: 2");
+
+ verifyFormat("app_id: 'com.javax.swing.salsa.latino'\n"
+ "head_id: 1\n"
+ "data <key: value>\n"
+ "data {key: value}");
+
+ verifyFormat("app {\n"
+ " app_id: 'com.javax.swing.salsa.latino'\n"
+ " head_id: 1\n"
+ " data <key: value>\n"
+ "}");
+
+ verifyFormat("app: {\n"
+ " app_id: 'com.javax.swing.salsa.latino'\n"
+ " head_id: 1\n"
+ " data <key: value>\n"
+ "}");
+
+ verifyFormat("app_id: 'com.javax.swing.salsa.latino'\n"
+ "headheadheadheadheadhead_id: 1\n"
+ "product_data {product {1}}");
+
+ verifyFormat("app_id: 'com.javax.swing.salsa.latino'\n"
+ "headheadheadheadheadhead_id: 1\n"
+ "product_data <product {1}>");
+
+ verifyFormat("app_id: 'com.javax.swing.salsa.latino'\n"
+ "headheadheadheadheadhead_id: 1\n"
+ "product_data <product <1>>");
+
+ verifyFormat("app <\n"
+ " app_id: 'com.javax.swing.salsa.latino'\n"
+ " headheadheadheadheadhead_id: 1\n"
+ " product_data <product {1}>\n"
+ ">");
}
} // end namespace tooling
} // end namespace clang
OpenPOWER on IntegriCloud