25 for (
const auto &[CurrName, _] :
NameMap) {
27 binaryOperator(anyOf(hasOperatorName(
"!="), hasOperatorName(
"==")),
28 isExpandedFromMacro(std::string(CurrName)),
29 anyOf(hasLHS(hasType(qualType(
30 hasCanonicalType(asString(
"NSString *"))))),
31 hasRHS(hasType(qualType(
32 hasCanonicalType(asString(
"NSString *")))))))
39 const ast_matchers::MatchFinder::MatchResult &Result) {
40 for (
const auto &[CurrName, TargetName] :
NameMap) {
41 if (
const auto *Root = Result.Nodes.getNodeAs<BinaryOperator>(CurrName)) {
42 const SourceManager *Sm = Result.SourceManager;
44 auto MacroCallsite = Sm->getImmediateMacroCallerLoc(
45 Sm->getImmediateMacroCallerLoc(Root->getBeginLoc()));
47 (Twine(
"use ") + TargetName +
" for comparing objects").str())
48 << FixItHint::CreateReplacement(
49 clang::CharSourceRange::getCharRange(
51 MacroCallsite.getLocWithOffset(CurrName.size())),