mirror of
https://github.com/intel/llvm.git
synced 2026-01-15 12:25:46 +08:00
[clang-format] Fix parsing of msg{field}-style proto options
Summary:
This patch makes the `{` in `msg_field{field: OK}` in a proto option scope be
treated as an assignment operator. Previosly the added test case was formatted
as:
```
option (MyProto.options) = {
field_a: OK
field_b{field_c: OK} field_d: OKOKOK field_e: OK
}
```
Reviewers: djasper
Reviewed By: djasper
Subscribers: klimek, cfe-commits
Differential Revision: https://reviews.llvm.org/D34749
llvm-svn: 306672
This commit is contained in:
@@ -1570,8 +1570,10 @@ private:
|
||||
const FormatToken *NextNonComment = Current->getNextNonComment();
|
||||
if (Current->is(TT_ConditionalExpr))
|
||||
return prec::Conditional;
|
||||
if (NextNonComment && NextNonComment->is(tok::colon) &&
|
||||
NextNonComment->is(TT_DictLiteral))
|
||||
if (NextNonComment && Current->is(TT_SelectorName) &&
|
||||
(NextNonComment->is(TT_DictLiteral) ||
|
||||
(Style.Language == FormatStyle::LK_Proto &&
|
||||
NextNonComment->is(tok::less))))
|
||||
return prec::Assignment;
|
||||
if (Current->is(TT_JsComputedPropertyName))
|
||||
return prec::Assignment;
|
||||
|
||||
@@ -201,6 +201,12 @@ TEST_F(FormatTestProto, FormatsOptions) {
|
||||
" field_c: \"OK\"\n"
|
||||
" msg_field{field_d: 123}\n"
|
||||
"};");
|
||||
verifyFormat("option (MyProto.options) = {\n"
|
||||
" field_a: OK\n"
|
||||
" field_b{field_c: OK}\n"
|
||||
" field_d: OKOKOK\n"
|
||||
" field_e: OK\n"
|
||||
"}");
|
||||
|
||||
// Support syntax with <> instead of {}.
|
||||
verifyFormat("option (MyProto.options) = {\n"
|
||||
@@ -208,6 +214,13 @@ TEST_F(FormatTestProto, FormatsOptions) {
|
||||
" msg_field: <field_d: 123>\n"
|
||||
"};");
|
||||
|
||||
verifyFormat("option (MyProto.options) = {\n"
|
||||
" field_a: OK\n"
|
||||
" field_b<field_c: OK>\n"
|
||||
" field_d: OKOKOK\n"
|
||||
" field_e: OK\n"
|
||||
"}");
|
||||
|
||||
verifyFormat("option (MyProto.options) = {\n"
|
||||
" msg_field: <>\n"
|
||||
" field_c: \"OK\",\n"
|
||||
|
||||
Reference in New Issue
Block a user