alexfh requested changes to this revision. alexfh added a comment. This revision now requires changes to proceed.
Sorry for the delay. Feel free to ping me earlier. ================ Comment at: clang-tidy/modernize/ExplicitOperatorBoolCheck.cpp:38 @@ +37,3 @@ + Finder->addMatcher( + cxxConversionDecl(returns(booleanType()), unless(isExplicit())) + .bind("operator-bool"), ---------------- Please merge these two matchers to avoid repeated work. Something along the lines of: cxxConversionDecl(unless(isExplicit()), anyOf(cxxConversionDecl(returns(booleanType())).bind("operator-bool"), cxxConversionDecl(returns(pointerType(pointee(isConstQualified(), voidType()))).bind("operator-void-pointer")))); ================ Comment at: clang-tidy/modernize/ExplicitOperatorBoolCheck.cpp:55 @@ +54,3 @@ + diag(MatchedDecl->getLocation(), + "operator bool declaration is not explicit") + << FixItHint::CreateInsertion(MatchedDecl->getLocation(), "explicit "); ---------------- The message should say a bit more on why it is bad, e.g.: "implicit operator bool allows erroneous comparisons; consider marking operator bool 'explicit'". Or in a more prescriptive way: "operator bool should be marked 'explicit' to avoid erroneous comparisons". Feel free to suggest a better option. ================ Comment at: clang-tidy/modernize/ExplicitOperatorBoolCheck.cpp:64 @@ +63,3 @@ + + // FIXME: This tries to change the type and add explicit, but + // MatchedDecl->getTypeSpecStartLoc() gets the start of void, not the start ---------------- Looks like you'll need to re-lex the range of the declaration and find the location of tokens `const`, `void`, `*` between `operator` and `(`. See clang-tidy/modernize/UseOverrideCheck.cpp for an example. http://reviews.llvm.org/D20857 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits