Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Unified Diff: tools/gn/command_format.cc

Issue 607173002: gn format: fix comments at end of blocks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: clang warning Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tools/gn/command_format_unittest.cc » ('j') | tools/gn/parse_tree.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/command_format.cc
diff --git a/tools/gn/command_format.cc b/tools/gn/command_format.cc
index a9dceec43e875b667bb9181bbb3f5bd5196355f1..cd10e3c5fe5b677cf0e9ebffbcd460f375c30a1f 100644
--- a/tools/gn/command_format.cc
+++ b/tools/gn/command_format.cc
@@ -50,6 +50,7 @@ class Printer {
kSequenceStyleFunctionCall,
kSequenceStyleList,
kSequenceStyleBlock,
+ kSequenceStyleBracedBlock,
};
enum ExprStyle {
@@ -78,8 +79,13 @@ class Printer {
// added to the output.
ExprStyle Expr(const ParseNode* root);
+ // Format a list of values using the given style.
+ // |end| holds any trailing comments to be printed just before the closing
+ // bracket.
template <class PARSENODE> // Just for const covariance.
- void Sequence(SequenceStyle style, const std::vector<PARSENODE*>& list);
+ void Sequence(SequenceStyle style,
+ const std::vector<PARSENODE*>& list,
+ const ParseNode* end);
std::string output_; // Output buffer.
std::vector<Token> comments_; // Pending end-of-line comments.
@@ -210,18 +216,14 @@ Printer::ExprStyle Printer::Expr(const ParseNode* root) {
Print(" ");
Expr(binop->right());
} else if (const BlockNode* block = root->AsBlock()) {
- Sequence(kSequenceStyleBlock, block->statements());
+ Sequence(kSequenceStyleBracedBlock, block->statements(), block->End());
} else if (const ConditionNode* condition = root->AsConditionNode()) {
Print("if (");
Expr(condition->condition());
- Print(") {");
- margin_ += kIndentSize;
- Newline();
- Block(condition->if_true());
- margin_ -= kIndentSize;
- Trim();
- PrintMargin();
- Print("}");
+ Print(") ");
+ Sequence(kSequenceStyleBracedBlock,
+ condition->if_true()->statements(),
+ condition->if_true()->End());
if (condition->if_false()) {
Print(" else ");
// If it's a block it's a bare 'else', otherwise it's an 'else if'. See
@@ -230,31 +232,24 @@ Printer::ExprStyle Printer::Expr(const ParseNode* root) {
if (is_else_if) {
Expr(condition->if_false());
} else {
- Print("{");
- margin_ += kIndentSize;
- Newline();
- Block(condition->if_false());
- margin_ -= kIndentSize;
- Trim();
- PrintMargin();
- Print("}");
+ Sequence(kSequenceStyleBracedBlock,
+ condition->if_false()->AsBlock()->statements(),
+ condition->if_false()->AsBlock()->End());
}
}
} else if (const FunctionCallNode* func_call = root->AsFunctionCall()) {
Print(func_call->function().value());
- Sequence(kSequenceStyleFunctionCall, func_call->args()->contents());
- Print(" {");
- margin_ += kIndentSize;
- Newline();
- Block(func_call->block());
- margin_ -= kIndentSize;
- Trim();
- PrintMargin();
- Print("}");
+ Sequence(kSequenceStyleFunctionCall,
+ func_call->args()->contents(),
+ func_call->args()->End());
+ Print(" ");
+ Sequence(kSequenceStyleBracedBlock,
+ func_call->block()->statements(),
+ func_call->block()->End());
} else if (const IdentifierNode* identifier = root->AsIdentifier()) {
Print(identifier->value().value());
} else if (const ListNode* list = root->AsList()) {
- Sequence(kSequenceStyleList, list->contents());
+ Sequence(kSequenceStyleList, list->contents(), list->End());
} else if (const LiteralNode* literal = root->AsLiteral()) {
// TODO(scottmg): Quoting?
Print(literal->value().value());
@@ -264,6 +259,8 @@ Printer::ExprStyle Printer::Expr(const ParseNode* root) {
} else if (const BlockCommentNode* block_comment = root->AsBlockComment()) {
Print(block_comment->comment().value());
result = kExprStyleComment;
+ } else if (const EndNode* end = root->AsEnd()) {
+ Print(end->value().value());
} else {
CHECK(false) << "Unhandled case in Expr.";
}
@@ -280,14 +277,20 @@ Printer::ExprStyle Printer::Expr(const ParseNode* root) {
template <class PARSENODE>
void Printer::Sequence(SequenceStyle style,
- const std::vector<PARSENODE*>& list) {
+ const std::vector<PARSENODE*>& list,
+ const ParseNode* end) {
bool force_multiline = false;
if (style == kSequenceStyleFunctionCall)
Print("(");
else if (style == kSequenceStyleList)
Print("[");
+ else if (style == kSequenceStyleBracedBlock)
+ Print("{");
+
+ if (style == kSequenceStyleBlock || style == kSequenceStyleBracedBlock)
+ force_multiline = true;
- if (style == kSequenceStyleBlock)
+ if (end && end->comments() && !end->comments()->before().empty())
force_multiline = true;
// If there's before line comments, make sure we have a place to put them.
@@ -302,7 +305,7 @@ void Printer::Sequence(SequenceStyle style,
if (style != kSequenceStyleFunctionCall)
Print(" ");
Expr(list[0]);
- CHECK(list[0]->comments()->after().empty());
+ CHECK(!list[0]->comments() || list[0]->comments()->after().empty());
if (style != kSequenceStyleFunctionCall)
Print(" ");
} else {
@@ -311,16 +314,28 @@ void Printer::Sequence(SequenceStyle style,
for (const auto& x : list) {
Newline();
ExprStyle expr_style = Expr(x);
- CHECK(x->comments()->after().empty());
+ CHECK(!x->comments() || x->comments()->after().empty());
if (i < list.size() - 1 || style == kSequenceStyleList) {
- if (expr_style == kExprStyleRegular)
+ if ((style == kSequenceStyleList || kSequenceStyleFunctionCall) &&
+ expr_style == kExprStyleRegular) {
Print(",");
- else
+ } else {
Newline();
+ }
}
++i;
}
+ // Trailing comments.
+ if (end->comments()) {
+ if (!list.empty())
+ Newline();
+ for (const auto& c : end->comments()->before()) {
+ Newline();
+ TrimAndPrintToken(c);
+ }
+ }
+
margin_ -= kIndentSize;
Newline();
}
@@ -329,6 +344,8 @@ void Printer::Sequence(SequenceStyle style,
Print(")");
else if (style == kSequenceStyleList)
Print("]");
+ else if (style == kSequenceStyleBracedBlock)
+ Print("}");
}
} // namespace
« no previous file with comments | « no previous file | tools/gn/command_format_unittest.cc » ('j') | tools/gn/parse_tree.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698