format: Fix single line list suffix comments being dropped Sequence() was only adding comments in multiline list cases, not in the single element/line case. Bug: gn:141 Change-Id: I913558706bf0913c432bea258f263400ee1d59fc Reviewed-on: https://gn-review.googlesource.com/c/gn/+/7140 Commit-Queue: Scott Graham <scottmg@chromium.org> Reviewed-by: Nico Weber <thakis@chromium.org>
diff --git a/src/gn/command_format.cc b/src/gn/command_format.cc index 3cc4218..623d8e2 100644 --- a/src/gn/command_format.cc +++ b/src/gn/command_format.cc
@@ -137,6 +137,8 @@ void PrintTrailingCommentsWrapped(const std::vector<Token>& comments); + void FlushComments(); + void PrintSuffixComments(const ParseNode* node); // End the current line, flushing end of line comments. @@ -341,7 +343,7 @@ } } -void Printer::Newline() { +void Printer::FlushComments() { if (!comments_.empty()) { Print(" "); // Save the margin, and temporarily set it to where the first comment @@ -351,6 +353,10 @@ stack_.pop_back(); comments_.clear(); } +} + +void Printer::Newline() { + FlushComments(); Trim(); Print("\n"); PrintMargin(); @@ -698,7 +704,7 @@ sub1.Expr(binop->right(), prec_right, std::string()); sub1.Print(suffix); sub1.PrintSuffixComments(root); - sub1.PrintSuffixComments(binop->right()); + sub1.FlushComments(); penalty_current_line += AssessPenalty(sub1.String()); if (!is_assignment && left_is_multiline) { // In e.g. xxx + yyy, if xxx is already multiline, then we want a penalty @@ -715,7 +721,7 @@ sub2.Expr(binop->right(), prec_right, std::string()); sub2.Print(suffix); sub2.PrintSuffixComments(root); - sub2.PrintSuffixComments(binop->right()); + sub2.FlushComments(); penalty_next_line += AssessPenalty(sub2.String()); // Force a list on the RHS that would normally be a single line into @@ -732,7 +738,7 @@ sub3.Sequence(kSequenceStyleList, rhs_list->contents(), rhs_list->End(), true); sub3.PrintSuffixComments(root); - sub3.PrintSuffixComments(binop->right()); + sub3.FlushComments(); sub3.stack_.pop_back(); penalty_multiline_rhs_list = AssessPenalty(sub3.String()); tried_rhs_multiline = true; @@ -892,12 +898,12 @@ stack_.pop_back(); Newline(); + } - // Defer any end of line comment until we reach the newline. - if (end->comments() && !end->comments()->suffix().empty()) { - std::copy(end->comments()->suffix().begin(), - end->comments()->suffix().end(), std::back_inserter(comments_)); - } + // Defer any end of line comment until we reach the newline. + if (end->comments() && !end->comments()->suffix().empty()) { + std::copy(end->comments()->suffix().begin(), + end->comments()->suffix().end(), std::back_inserter(comments_)); } if (style == kSequenceStyleList)
diff --git a/src/gn/command_format_unittest.cc b/src/gn/command_format_unittest.cc index 503e6cf..4dcf3bb 100644 --- a/src/gn/command_format_unittest.cc +++ b/src/gn/command_format_unittest.cc
@@ -124,3 +124,4 @@ FORMAT_TEST(077) FORMAT_TEST(078) FORMAT_TEST(079) +FORMAT_TEST(080)
diff --git a/src/gn/format_test_data/080.gn b/src/gn/format_test_data/080.gn new file mode 100644 index 0000000..3e3fdba --- /dev/null +++ b/src/gn/format_test_data/080.gn
@@ -0,0 +1,33 @@ +# https://crbug.com/gn/141. 80 col --------------------------------------------- + +a = + [ "b" ] # comment1 + +a = + [ "b", "c" ] # comment1b + +a = + b # comment2 + +a = + { b = 3 } # comment3 + +a = + { # comment4 + + b = 3 } # comment5 + +a = + { b = 3 # comment6 + } + +if (true) { + if (true) { + if (true) { + something_longer_on_the_lhs = + [ "something that will exceed 80 col if dewrapped" ] # comment7 + + something_longer_on_the_lhs = [ "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ] # comment8 + } + } +}
diff --git a/src/gn/format_test_data/080.golden b/src/gn/format_test_data/080.golden new file mode 100644 index 0000000..9f18a5e --- /dev/null +++ b/src/gn/format_test_data/080.golden
@@ -0,0 +1,34 @@ +# https://crbug.com/gn/141. 80 col --------------------------------------------- + +a = [ "b" ] # comment1 + +a = [ + "b", + "c", +] # comment1b + +a = b # comment2 + +a = { + b = 3 +} # comment3 + +a = { # comment4 + b = 3 +} # comment5 + +a = { + b = 3 # comment6 +} + +if (true) { + if (true) { + if (true) { + something_longer_on_the_lhs = + [ "something that will exceed 80 col if dewrapped" ] # comment7 + + something_longer_on_the_lhs = + [ "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ] # comment8 + } + } +}