[clang-tools-extra] f5063bf - [clang-tidy][NFC]refactor PreferMemberInitializerCheck for readability

Congcong Cai via cfe-commits cfe-commits at lists.llvm.org
Wed Oct 25 22:38:15 PDT 2023


Author: Congcong Cai
Date: 2023-10-26T13:37:50+08:00
New Revision: f5063bf7edbb6368deb7354b4340eb62b8329d2e

URL: https://github.com/llvm/llvm-project/commit/f5063bf7edbb6368deb7354b4340eb62b8329d2e
DIFF: https://github.com/llvm/llvm-project/commit/f5063bf7edbb6368deb7354b4340eb62b8329d2e.diff

LOG: [clang-tidy][NFC]refactor PreferMemberInitializerCheck for readability

Added: 
    

Modified: 
    clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp

Removed: 
    


################################################################################
diff  --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp
index aac824f15fa5707..0ef13ae29803325 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp
@@ -178,140 +178,140 @@ void PreferMemberInitializerCheck::check(
     const FieldDecl *Field = nullptr;
     const Expr *InitValue = nullptr;
     std::tie(Field, InitValue) = isAssignmentToMemberOf(Class, S, Ctor);
-    if (Field) {
-      if (IsUseDefaultMemberInitEnabled && getLangOpts().CPlusPlus11 &&
-          Ctor->isDefaultConstructor() &&
-          (getLangOpts().CPlusPlus20 || !Field->isBitField()) &&
-          !Field->hasInClassInitializer() &&
-          (!isa<RecordDecl>(Class->getDeclContext()) ||
-           !cast<RecordDecl>(Class->getDeclContext())->isUnion()) &&
-          shouldBeDefaultMemberInitializer(InitValue)) {
-
-        bool InvalidFix = false;
-        SourceLocation FieldEnd =
-            Lexer::getLocForEndOfToken(Field->getSourceRange().getEnd(), 0,
-                                       *Result.SourceManager, getLangOpts());
-        InvalidFix |= FieldEnd.isInvalid() || FieldEnd.isMacroID();
-        SourceLocation SemiColonEnd;
-        if (auto NextToken = Lexer::findNextToken(
-                S->getEndLoc(), *Result.SourceManager, getLangOpts()))
-          SemiColonEnd = NextToken->getEndLoc();
-        else
-          InvalidFix = true;
-        auto Diag =
-            diag(S->getBeginLoc(), "%0 should be initialized in an in-class"
-                                   " default member initializer")
-            << Field;
-        if (InvalidFix)
+    if (!Field)
+      continue;
+    const bool IsInDefaultMemberInitializer =
+        IsUseDefaultMemberInitEnabled && getLangOpts().CPlusPlus11 &&
+        Ctor->isDefaultConstructor() &&
+        (getLangOpts().CPlusPlus20 || !Field->isBitField()) &&
+        !Field->hasInClassInitializer() &&
+        (!isa<RecordDecl>(Class->getDeclContext()) ||
+         !cast<RecordDecl>(Class->getDeclContext())->isUnion()) &&
+        shouldBeDefaultMemberInitializer(InitValue);
+    if (IsInDefaultMemberInitializer) {
+      bool InvalidFix = false;
+      SourceLocation FieldEnd =
+          Lexer::getLocForEndOfToken(Field->getSourceRange().getEnd(), 0,
+                                     *Result.SourceManager, getLangOpts());
+      InvalidFix |= FieldEnd.isInvalid() || FieldEnd.isMacroID();
+      SourceLocation SemiColonEnd;
+      if (auto NextToken = Lexer::findNextToken(
+              S->getEndLoc(), *Result.SourceManager, getLangOpts()))
+        SemiColonEnd = NextToken->getEndLoc();
+      else
+        InvalidFix = true;
+      auto Diag =
+          diag(S->getBeginLoc(), "%0 should be initialized in an in-class"
+                                 " default member initializer")
+          << Field;
+      if (InvalidFix)
+        continue;
+      CharSourceRange StmtRange =
+          CharSourceRange::getCharRange(S->getBeginLoc(), SemiColonEnd);
+
+      SmallString<128> Insertion(
+          {UseAssignment ? " = " : "{",
+           Lexer::getSourceText(
+               CharSourceRange(InitValue->getSourceRange(), true),
+               *Result.SourceManager, getLangOpts()),
+           UseAssignment ? "" : "}"});
+
+      Diag << FixItHint::CreateInsertion(FieldEnd, Insertion)
+           << FixItHint::CreateRemoval(StmtRange);
+
+    } else {
+      StringRef InsertPrefix = "";
+      bool HasInitAlready = false;
+      SourceLocation InsertPos;
+      SourceRange ReplaceRange;
+      bool AddComma = false;
+      bool InvalidFix = false;
+      unsigned Index = Field->getFieldIndex();
+      const CXXCtorInitializer *LastInListInit = nullptr;
+      for (const CXXCtorInitializer *Init : Ctor->inits()) {
+        if (!Init->isWritten() || Init->isInClassMemberInitializer())
           continue;
-        CharSourceRange StmtRange =
-            CharSourceRange::getCharRange(S->getBeginLoc(), SemiColonEnd);
-
-        SmallString<128> Insertion(
-            {UseAssignment ? " = " : "{",
-             Lexer::getSourceText(
-                 CharSourceRange(InitValue->getSourceRange(), true),
-                 *Result.SourceManager, getLangOpts()),
-             UseAssignment ? "" : "}"});
-
-        Diag << FixItHint::CreateInsertion(FieldEnd, Insertion)
-             << FixItHint::CreateRemoval(StmtRange);
-
-      } else {
-        StringRef InsertPrefix = "";
-        bool HasInitAlready = false;
-        SourceLocation InsertPos;
-        SourceRange ReplaceRange;
-        bool AddComma = false;
-        bool InvalidFix = false;
-        unsigned Index = Field->getFieldIndex();
-        const CXXCtorInitializer *LastInListInit = nullptr;
-        for (const CXXCtorInitializer *Init : Ctor->inits()) {
-          if (!Init->isWritten() || Init->isInClassMemberInitializer())
-            continue;
-          if (Init->getMember() == Field) {
-            HasInitAlready = true;
-            if (isa<ImplicitValueInitExpr>(Init->getInit()))
-              InsertPos = Init->getRParenLoc();
-            else {
-              ReplaceRange = Init->getInit()->getSourceRange();
-            }
-            break;
-          }
-          if (Init->isMemberInitializer() &&
-              Index < Init->getMember()->getFieldIndex()) {
-            InsertPos = Init->getSourceLocation();
-            // There are initializers after the one we are inserting, so add a
-            // comma after this insertion in order to not break anything.
-            AddComma = true;
-            break;
+        if (Init->getMember() == Field) {
+          HasInitAlready = true;
+          if (isa<ImplicitValueInitExpr>(Init->getInit()))
+            InsertPos = Init->getRParenLoc();
+          else {
+            ReplaceRange = Init->getInit()->getSourceRange();
           }
-          LastInListInit = Init;
+          break;
         }
-        if (HasInitAlready) {
-          if (InsertPos.isValid())
-            InvalidFix |= InsertPos.isMacroID();
-          else
-            InvalidFix |= ReplaceRange.getBegin().isMacroID() ||
-                          ReplaceRange.getEnd().isMacroID();
-        } else {
-          if (InsertPos.isInvalid()) {
-            if (LastInListInit) {
-              InsertPos = Lexer::getLocForEndOfToken(
-                  LastInListInit->getRParenLoc(), 0, *Result.SourceManager,
-                  getLangOpts());
-              // Inserting after the last constructor initializer, so we need a
-              // comma.
-              InsertPrefix = ", ";
-            } else {
-              InsertPos = Lexer::getLocForEndOfToken(
-                  Ctor->getTypeSourceInfo()
-                      ->getTypeLoc()
-                      .getAs<clang::FunctionTypeLoc>()
-                      .getLocalRangeEnd(),
-                  0, *Result.SourceManager, getLangOpts());
-
-              // If this is first time in the loop, there are no initializers so
-              // `:` declares member initialization list. If this is a
-              // subsequent pass then we have already inserted a `:` so continue
-              // with a comma.
-              InsertPrefix = FirstToCtorInits ? " : " : ", ";
-            }
-          }
+        if (Init->isMemberInitializer() &&
+            Index < Init->getMember()->getFieldIndex()) {
+          InsertPos = Init->getSourceLocation();
+          // There are initializers after the one we are inserting, so add a
+          // comma after this insertion in order to not break anything.
+          AddComma = true;
+          break;
+        }
+        LastInListInit = Init;
+      }
+      if (HasInitAlready) {
+        if (InsertPos.isValid())
           InvalidFix |= InsertPos.isMacroID();
+        else
+          InvalidFix |= ReplaceRange.getBegin().isMacroID() ||
+                        ReplaceRange.getEnd().isMacroID();
+      } else {
+        if (InsertPos.isInvalid()) {
+          if (LastInListInit) {
+            InsertPos = Lexer::getLocForEndOfToken(
+                LastInListInit->getRParenLoc(), 0, *Result.SourceManager,
+                getLangOpts());
+            // Inserting after the last constructor initializer, so we need a
+            // comma.
+            InsertPrefix = ", ";
+          } else {
+            InsertPos = Lexer::getLocForEndOfToken(
+                Ctor->getTypeSourceInfo()
+                    ->getTypeLoc()
+                    .getAs<clang::FunctionTypeLoc>()
+                    .getLocalRangeEnd(),
+                0, *Result.SourceManager, getLangOpts());
+
+            // If this is first time in the loop, there are no initializers so
+            // `:` declares member initialization list. If this is a
+            // subsequent pass then we have already inserted a `:` so continue
+            // with a comma.
+            InsertPrefix = FirstToCtorInits ? " : " : ", ";
+          }
         }
+        InvalidFix |= InsertPos.isMacroID();
+      }
 
-        SourceLocation SemiColonEnd;
-        if (auto NextToken = Lexer::findNextToken(
-                S->getEndLoc(), *Result.SourceManager, getLangOpts()))
-          SemiColonEnd = NextToken->getEndLoc();
+      SourceLocation SemiColonEnd;
+      if (auto NextToken = Lexer::findNextToken(
+              S->getEndLoc(), *Result.SourceManager, getLangOpts()))
+        SemiColonEnd = NextToken->getEndLoc();
+      else
+        InvalidFix = true;
+
+      auto Diag = diag(S->getBeginLoc(), "%0 should be initialized in a member"
+                                         " initializer of the constructor")
+                  << Field;
+      if (InvalidFix)
+        continue;
+      StringRef NewInit = Lexer::getSourceText(
+          CharSourceRange(InitValue->getSourceRange(), true),
+          *Result.SourceManager, getLangOpts());
+      if (HasInitAlready) {
+        if (InsertPos.isValid())
+          Diag << FixItHint::CreateInsertion(InsertPos, NewInit);
         else
-          InvalidFix = true;
-
-        auto Diag =
-            diag(S->getBeginLoc(), "%0 should be initialized in a member"
-                                   " initializer of the constructor")
-            << Field;
-        if (InvalidFix)
-          continue;
-        StringRef NewInit = Lexer::getSourceText(
-            CharSourceRange(InitValue->getSourceRange(), true),
-            *Result.SourceManager, getLangOpts());
-        if (HasInitAlready) {
-          if (InsertPos.isValid())
-            Diag << FixItHint::CreateInsertion(InsertPos, NewInit);
-          else
-            Diag << FixItHint::CreateReplacement(ReplaceRange, NewInit);
-        } else {
-          SmallString<128> Insertion({InsertPrefix, Field->getName(), "(",
-                                      NewInit, AddComma ? "), " : ")"});
-          Diag << FixItHint::CreateInsertion(InsertPos, Insertion,
-                                             FirstToCtorInits);
-          FirstToCtorInits = areDiagsSelfContained();
-        }
-        Diag << FixItHint::CreateRemoval(
-            CharSourceRange::getCharRange(S->getBeginLoc(), SemiColonEnd));
+          Diag << FixItHint::CreateReplacement(ReplaceRange, NewInit);
+      } else {
+        SmallString<128> Insertion({InsertPrefix, Field->getName(), "(",
+                                    NewInit, AddComma ? "), " : ")"});
+        Diag << FixItHint::CreateInsertion(InsertPos, Insertion,
+                                           FirstToCtorInits);
+        FirstToCtorInits = areDiagsSelfContained();
       }
+      Diag << FixItHint::CreateRemoval(
+          CharSourceRange::getCharRange(S->getBeginLoc(), SemiColonEnd));
     }
   }
 }


        


More information about the cfe-commits mailing list