Skip to content

Commit 43e13fd

Browse files
authored
[NFC][clang-tidy]refactor isAssignmentToMemberOf in PreferMemberInitializerCheck (#71006)
1 parent d61ab5e commit 43e13fd

File tree

1 file changed

+22
-16
lines changed

1 file changed

+22
-16
lines changed

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

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -118,45 +118,50 @@ static void updateAssignmentLevel(
118118
}
119119
}
120120

121-
static std::pair<const FieldDecl *, const Expr *>
121+
struct AssignmentPair {
122+
const FieldDecl *Field;
123+
const Expr *Init;
124+
};
125+
126+
static std::optional<AssignmentPair>
122127
isAssignmentToMemberOf(const CXXRecordDecl *Rec, const Stmt *S,
123128
const CXXConstructorDecl *Ctor) {
124129
if (const auto *BO = dyn_cast<BinaryOperator>(S)) {
125130
if (BO->getOpcode() != BO_Assign)
126-
return std::make_pair(nullptr, nullptr);
131+
return {};
127132

128133
const auto *ME = dyn_cast<MemberExpr>(BO->getLHS()->IgnoreParenImpCasts());
129134
if (!ME)
130-
return std::make_pair(nullptr, nullptr);
135+
return {};
131136

132137
const auto *Field = dyn_cast<FieldDecl>(ME->getMemberDecl());
133138
if (!Field)
134-
return std::make_pair(nullptr, nullptr);
139+
return {};
135140

136141
if (!isa<CXXThisExpr>(ME->getBase()))
137-
return std::make_pair(nullptr, nullptr);
142+
return {};
138143
const Expr *Init = BO->getRHS()->IgnoreParenImpCasts();
139-
return std::make_pair(Field, Init);
144+
return AssignmentPair{Field, Init};
140145
}
141146
if (const auto *COCE = dyn_cast<CXXOperatorCallExpr>(S)) {
142147
if (COCE->getOperator() != OO_Equal)
143-
return std::make_pair(nullptr, nullptr);
148+
return {};
144149

145150
const auto *ME =
146151
dyn_cast<MemberExpr>(COCE->getArg(0)->IgnoreParenImpCasts());
147152
if (!ME)
148-
return std::make_pair(nullptr, nullptr);
153+
return {};
149154

150155
const auto *Field = dyn_cast<FieldDecl>(ME->getMemberDecl());
151156
if (!Field)
152-
return std::make_pair(nullptr, nullptr);
157+
return {};
153158

154159
if (!isa<CXXThisExpr>(ME->getBase()))
155-
return std::make_pair(nullptr, nullptr);
160+
return {};
156161
const Expr *Init = COCE->getArg(1)->IgnoreParenImpCasts();
157-
return std::make_pair(Field, Init);
162+
return AssignmentPair{Field, Init};
158163
}
159-
return std::make_pair(nullptr, nullptr);
164+
return {};
160165
}
161166

162167
PreferMemberInitializerCheck::PreferMemberInitializerCheck(
@@ -216,11 +221,12 @@ void PreferMemberInitializerCheck::check(
216221
return;
217222
}
218223

219-
const FieldDecl *Field = nullptr;
220-
const Expr *InitValue = nullptr;
221-
std::tie(Field, InitValue) = isAssignmentToMemberOf(Class, S, Ctor);
222-
if (!Field)
224+
std::optional<AssignmentPair> AssignmentToMember =
225+
isAssignmentToMemberOf(Class, S, Ctor);
226+
if (!AssignmentToMember)
223227
continue;
228+
const FieldDecl *Field = AssignmentToMember->Field;
229+
const Expr *InitValue = AssignmentToMember->Init;
224230
updateAssignmentLevel(Field, InitValue, Ctor, AssignedFields);
225231
if (!canAdvanceAssignment(AssignedFields[Field]))
226232
continue;

0 commit comments

Comments
 (0)