Modernize and improve parse_tree.cc

- Modernize with = default, std::make_unique().
- Use early returns, remove else after returns, and use ternary
  operators.
- Skip the loop earlier in ListNode::SortList().

Change-Id: I4211b1a496a00359d3730958bfc1c85957f92c9a
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/19321
Reviewed-by: Takuto Ikuta <tikuta@google.com>
Commit-Queue: Takuto Ikuta <tikuta@google.com>
diff --git a/src/gn/parse_tree.cc b/src/gn/parse_tree.cc
index 34602b1..feccdb2 100644
--- a/src/gn/parse_tree.cc
+++ b/src/gn/parse_tree.cc
@@ -26,6 +26,9 @@
 const char kJsonBeforeComment[] = "before_comment";
 const char kJsonSuffixComment[] = "suffix_comment";
 const char kJsonAfterComment[] = "after_comment";
+
+namespace {
+
 const char kJsonLocation[] = "location";
 const char kJsonLocationBeginLine[] = "begin_line";
 const char kJsonLocationBeginColumn[] = "begin_column";
@@ -36,8 +39,6 @@
 const char kJsonBeginToken[] = "begin_token";
 const char kJsonEnd[] = "end";
 
-namespace {
-
 enum DepsCategory {
   DEPS_CATEGORY_LOCAL,
   DEPS_CATEGORY_RELATIVE,
@@ -231,25 +232,27 @@
 }
 
 void ParseNode::AddCommentsJSONNodes(base::Value* out_value) const {
-  if (comments_) {
-    if (comments_->before().size()) {
-      base::Value comment_values(base::Value::Type::LIST);
-      for (const auto& token : comments_->before())
-        comment_values.GetList().push_back(base::Value(token.value()));
-      out_value->SetKey(kJsonBeforeComment, std::move(comment_values));
-    }
-    if (comments_->suffix().size()) {
-      base::Value comment_values(base::Value::Type::LIST);
-      for (const auto& token : comments_->suffix())
-        comment_values.GetList().push_back(base::Value(token.value()));
-      out_value->SetKey(kJsonSuffixComment, std::move(comment_values));
-    }
-    if (comments_->after().size()) {
-      base::Value comment_values(base::Value::Type::LIST);
-      for (const auto& token : comments_->after())
-        comment_values.GetList().push_back(base::Value(token.value()));
-      out_value->SetKey(kJsonAfterComment, std::move(comment_values));
-    }
+  if (!comments_) {
+    return;
+  }
+
+  if (comments_->before().size()) {
+    base::Value comment_values(base::Value::Type::LIST);
+    for (const auto& token : comments_->before())
+      comment_values.GetList().push_back(base::Value(token.value()));
+    out_value->SetKey(kJsonBeforeComment, std::move(comment_values));
+  }
+  if (comments_->suffix().size()) {
+    base::Value comment_values(base::Value::Type::LIST);
+    for (const auto& token : comments_->suffix())
+      comment_values.GetList().push_back(base::Value(token.value()));
+    out_value->SetKey(kJsonSuffixComment, std::move(comment_values));
+  }
+  if (comments_->after().size()) {
+    base::Value comment_values(base::Value::Type::LIST);
+    for (const auto& token : comments_->after())
+      comment_values.GetList().push_back(base::Value(token.value()));
+    out_value->SetKey(kJsonAfterComment, std::move(comment_values));
   }
 }
 
@@ -279,7 +282,7 @@
 #undef RETURN_IF_MATCHES_NAME
 
   NOTREACHED() << str_type;
-  return std::unique_ptr<ParseNode>();
+  return nullptr;
 }
 
 // AccessorNode ---------------------------------------------------------------
@@ -295,7 +298,7 @@
 Value AccessorNode::Execute(Scope* scope, Err* err) const {
   if (subscript_)
     return ExecuteSubscriptAccess(scope, err);
-  else if (member_)
+  if (member_)
     return ExecuteScopeAccess(scope, err);
   NOTREACHED();
   return Value();
@@ -304,7 +307,7 @@
 LocationRange AccessorNode::GetRange() const {
   if (subscript_)
     return LocationRange(base_.location(), subscript_->GetRange().end());
-  else if (member_)
+  if (member_)
     return LocationRange(base_.location(), member_->GetRange().end());
   NOTREACHED();
   return LocationRange();
@@ -361,14 +364,15 @@
   }
   if (base_value->type() == Value::LIST) {
     return ExecuteArrayAccess(scope, base_value, err);
-  } else if (base_value->type() == Value::SCOPE) {
-    return ExecuteScopeSubscriptAccess(scope, base_value, err);
-  } else {
-    *err = MakeErrorDescribing(
-        std::string("Expecting either a list or a scope for subscript, got ") +
-        Value::DescribeType(base_value->type()) + ".");
-    return Value();
   }
+  if (base_value->type() == Value::SCOPE) {
+    return ExecuteScopeSubscriptAccess(scope, base_value, err);
+  }
+
+  *err = MakeErrorDescribing(
+      std::string("Expecting either a list or a scope for subscript, got ") +
+      Value::DescribeType(base_value->type()) + ".");
+  return Value();
 }
 
 Value AccessorNode::ExecuteArrayAccess(Scope* scope,
@@ -376,8 +380,9 @@
                                        Err* err) const {
   size_t index = 0;
   if (!ComputeAndValidateListIndex(scope, base_value->list_value().size(),
-                                   &index, err))
+                                   &index, err)) {
     return Value();
+  }
   return base_value->list_value()[index];
 }
 
@@ -593,7 +598,8 @@
   if (begin_token_.type() != Token::INVALID &&
       end_->value().type() != Token::INVALID) {
     return begin_token_.range().Union(end_->value().range());
-  } else if (!statements_.empty()) {
+  }
+  if (!statements_.empty()) {
     return statements_[0]->GetRange().Union(
         statements_[statements_.size() - 1]->GetRange());
   }
@@ -634,9 +640,9 @@
   std::unique_ptr<BlockNode> ret;
 
   if (result_mode == kDumpResultModeReturnsScope) {
-    ret.reset(new BlockNode(BlockNode::RETURNS_SCOPE));
+    ret = std::make_unique<BlockNode>(BlockNode::RETURNS_SCOPE);
   } else if (result_mode == kDumpResultModeDiscardsResult) {
-    ret.reset(new BlockNode(BlockNode::DISCARDS_RESULT));
+    ret = std::make_unique<BlockNode>(BlockNode::DISCARDS_RESULT);
   } else {
     NOTREACHED();
   }
@@ -691,9 +697,8 @@
 }
 
 LocationRange ConditionNode::GetRange() const {
-  if (if_false_)
-    return if_token_.range().Union(if_false_->GetRange());
-  return if_token_.range().Union(if_true_->GetRange());
+  return if_token_.range().Union(if_false_ ? if_false_->GetRange()
+                                           : if_true_->GetRange());
 }
 
 Err ConditionNode::MakeErrorDescribing(const std::string& msg,
@@ -749,9 +754,8 @@
 LocationRange FunctionCallNode::GetRange() const {
   if (function_.type() == Token::INVALID)
     return LocationRange();  // This will be null in some tests.
-  if (block_)
-    return function_.range().Union(block_->GetRange());
-  return function_.range().Union(args_->GetRange());
+  return function_.range().Union(block_ ? block_->GetRange()
+                                        : args_->GetRange());
 }
 
 Err FunctionCallNode::MakeErrorDescribing(const std::string& msg,
@@ -859,7 +863,7 @@
 
 // ListNode -------------------------------------------------------------------
 
-ListNode::ListNode() {}
+ListNode::ListNode() = default;
 
 ListNode::~ListNode() = default;
 
@@ -938,11 +942,13 @@
       const ParseNode* node = contents_[i].get();
       if (!node->AsLiteral() && !node->AsIdentifier() && !node->AsAccessor()) {
         skip = true;
-        continue;
+        break;
       }
     }
-    if (skip)
+    if (skip) {
       continue;
+    }
+
     // Save the original line number so that we can re-assign ranges. We assume
     // they're contiguous lines because GetSortRanges() does so above. We need
     // to re-assign these line numbers primiarily because `gn format` uses them