@@ -43,18 +43,20 @@ OptionalValueConversionCheck::getCheckTraversalKind() const {
4343}
4444
4545void OptionalValueConversionCheck::registerMatchers (MatchFinder *Finder) {
46- auto ConstructTypeMatcher =
47- qualType (hasCleanType (qualType ().bind (" optional-type" )));
46+ auto BindOptionalType = qualType (
47+ hasCleanType (qualType (hasDeclaration (namedDecl (
48+ matchers::matchesAnyListedName (OptionalTypes))))
49+ .bind (" optional-type" )));
4850
49- auto CallTypeMatcher =
51+ auto EqualsBoundOptionalType =
5052 qualType (hasCleanType (equalsBoundNode (" optional-type" )));
5153
5254 auto OptionalDereferenceMatcher = callExpr (
5355 anyOf (
5456 cxxOperatorCallExpr (hasOverloadedOperatorName (" *" ),
55- hasUnaryOperand (hasType (CallTypeMatcher )))
57+ hasUnaryOperand (hasType (EqualsBoundOptionalType )))
5658 .bind (" op-call" ),
57- cxxMemberCallExpr (thisPointerType (CallTypeMatcher ),
59+ cxxMemberCallExpr (thisPointerType (EqualsBoundOptionalType ),
5860 callee (cxxMethodDecl (anyOf (
5961 hasOverloadedOperatorName (" *" ),
6062 matchers::matchesAnyListedName (ValueMethods)))))
@@ -66,10 +68,7 @@ void OptionalValueConversionCheck::registerMatchers(MatchFinder *Finder) {
6668 hasArgument (0 , ignoringImpCasts (OptionalDereferenceMatcher)));
6769 Finder->addMatcher (
6870 cxxConstructExpr (
69- argumentCountIs (1U ),
70- hasDeclaration (cxxConstructorDecl (
71- ofClass (matchers::matchesAnyListedName (OptionalTypes)))),
72- hasType (ConstructTypeMatcher),
71+ argumentCountIs (1U ), hasType (BindOptionalType),
7372 hasArgument (0U , ignoringImpCasts (anyOf (OptionalDereferenceMatcher,
7473 StdMoveCallMatcher))),
7574 unless (anyOf (hasAncestor (typeLoc ()),
0 commit comments