]> granicus.if.org Git - clang/commitdiff
Address post-commit review comments from r190038.
authorDaniel Jasper <djasper@google.com>
Thu, 5 Sep 2013 10:48:50 +0000 (10:48 +0000)
committerDaniel Jasper <djasper@google.com>
Thu, 5 Sep 2013 10:48:50 +0000 (10:48 +0000)
Mostly additional comments :-).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190042 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Format/ContinuationIndenter.cpp
lib/Format/Format.cpp
lib/Format/TokenAnnotator.h

index c47d799f44557443794f4f6614fe02784119b730..c894a4b29e2f15952de6dea362bc598a5f606075 100644 (file)
@@ -511,6 +511,21 @@ unsigned ContinuationIndenter::moveStateToNextToken(LineState &State,
     bool AvoidBinPacking;
     if (Current.is(tok::l_brace)) {
       if (Current.MatchingParen && Current.BlockKind == BK_Block) {
+        // If this is an l_brace starting a nested block, we pretend (wrt. to
+        // indentation) that we already consumed the corresponding r_brace.
+        // Thus, we remove all ParenStates caused bake fake parentheses that end
+        // at the r_brace. The net effect of this is that we don't indent
+        // relative to the l_brace, if the nested block is the last parameter of
+        // a function. For example, this formats:
+        //
+        //   SomeFunction(a, [] {
+        //     f();  // break
+        //   });
+        //
+        // instead of:
+        //   SomeFunction(a, [] {
+        //                        f();  // break
+        //                      });
         for (unsigned i = 0; i != Current.MatchingParen->FakeRParens; ++i)
           State.Stack.pop_back();
         NewIndent = State.Stack.back().LastSpace;
@@ -565,6 +580,8 @@ unsigned ContinuationIndenter::moveStateToNextToken(LineState &State,
   // Remove scopes created by fake parenthesis.
   if (Current.isNot(tok::r_brace) ||
       (Current.MatchingParen && Current.MatchingParen->BlockKind != BK_Block)) {
+    // Don't remove FakeRParens attached to r_braces that surround nested blocks
+    // as they will have been removed early (see above).
     for (unsigned i = 0, e = Current.FakeRParens; i != e; ++i) {
       unsigned VariablePos = State.Stack.back().VariablePos;
       State.Stack.pop_back();
index 512f99f5e7f246ec900a40dfda3a58240e5dcbb4..c482c402ec8f79458207096ae1ef3e599aefb59b 100644 (file)
@@ -489,8 +489,8 @@ private:
     ++Count;
   }
 
-  /// \brief Format all children of \p Tok assuming the parent is indented to
-  /// \p ParentIndent.
+  /// \brief If the \p State's next token is an r_brace closing a nested block,
+  /// format the nested block before it.
   ///
   /// Returns \c true if all children could be placed successfully and adapts
   /// \p Penalty as well as \p State. If \p DryRun is false, also directly
@@ -514,7 +514,9 @@ private:
     const FormatToken &LBrace = *State.NextToken->Previous;
     if (LBrace.isNot(tok::l_brace) || LBrace.BlockKind != BK_Block ||
         LBrace.Children.size() == 0)
-      return true; // The previous token does not open a block. Nothing to do.
+      // The previous token does not open a block. Nothing to do. We don't
+      // assert so that we can simply call this function for all tokens.
+      return true; 
 
     if (NewLine) {
       unsigned ParentIndent = State.Stack.back().Indent;
@@ -734,7 +736,6 @@ public:
     for (unsigned i = 0, e = AnnotatedLines.size(); i != e; ++i) {
       delete AnnotatedLines[i];
     }
-    AnnotatedLines.clear();
   }
 
   tooling::Replacements format() {
index 8e8d076819edaa68b77ee8245f7dd44951f1cc50..5546cdc49d5dac730ac856cea7f5171fafab57fe 100644 (file)
@@ -66,7 +66,6 @@ public:
     for (unsigned i = 0, e = Children.size(); i != e; ++i) {
       delete Children[i];
     }
-    Children.clear();
   }
 
   FormatToken *First;