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

Unified Diff: tools/gn/command_format.cc

Issue 962003002: gn format: Have format sort sources (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: unsigned numbers in test Created 5 years, 10 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') | no next file with comments »
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 06c5670043fd875529a21b280ed6517e8f3eadab..7aa8749748bb371d8b54ca0c64dc3cb6cbed9067 100644
--- a/tools/gn/command_format.cc
+++ b/tools/gn/command_format.cc
@@ -129,6 +129,9 @@ class Printer {
// Flag assignments to sources, deps, etc. to make their RHSs multiline.
void AnnotatePreferredMultilineAssignment(const BinaryOpNode* binop);
+ // Alphabetically a list on the RHS if the LHS is 'sources'.
+ void SortIfSources(const BinaryOpNode* binop);
+
// Heuristics to decide if there should be a blank line added between two
// items. For various "small" items, it doesn't look nice if there's too much
// vertical whitespace added.
@@ -305,13 +308,29 @@ void Printer::AnnotatePreferredMultilineAssignment(const BinaryOpNode* binop) {
}
}
+void Printer::SortIfSources(const BinaryOpNode* binop) {
+ const IdentifierNode* ident = binop->left()->AsIdentifier();
+ const ListNode* list = binop->right()->AsList();
+ // TODO(scottmg): Sort more than 'sources'?
+ if ((binop->op().value() == "=" || binop->op().value() == "+=" ||
+ binop->op().value() == "-=") &&
+ ident && list) {
+ const base::StringPiece lhs = ident->value().value();
+ if (lhs == "sources")
+ const_cast<ListNode*>(list)->SortAsStringsList();
+ }
+}
+
+
bool Printer::ShouldAddBlankLineInBetween(const ParseNode* a,
const ParseNode* b) {
LocationRange a_range = a->GetRange();
LocationRange b_range = b->GetRange();
// If they're already separated by 1 or more lines, then we want to keep a
// blank line.
- return b_range.begin().line_number() > a_range.end().line_number() + 1;
+ return (b_range.begin().line_number() > a_range.end().line_number() + 1) ||
+ // Always put a blank line before a block comment.
+ b->AsBlockComment();
}
int Printer::CurrentColumn() const {
@@ -441,6 +460,8 @@ int Printer::Expr(const ParseNode* root,
CHECK(precedence_.find(binop->op().value()) != precedence_.end());
AnnotatePreferredMultilineAssignment(binop);
+ SortIfSources(binop);
+
Precedence prec = precedence_[binop->op().value()];
// Since binary operators format left-to-right, it is ok for the left side
@@ -648,11 +669,9 @@ void Printer::Sequence(SequenceStyle style,
Expr(x, kPrecedenceLowest, want_comma ? "," : std::string());
CHECK(!x->comments() || x->comments()->after().empty());
if (body_of_list) {
- if (!want_comma) {
- if (i < list.size() - 1 &&
- ShouldAddBlankLineInBetween(list[i], list[i + 1]))
- Newline();
- }
+ if (i < list.size() - 1 &&
+ ShouldAddBlankLineInBetween(list[i], list[i + 1]))
+ Newline();
}
++i;
}
« no previous file with comments | « no previous file | tools/gn/command_format_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698