29 for (
const auto &Pair :
nameMap()) {
31 binaryOperator(anyOf(hasOperatorName(
"!="), hasOperatorName(
"==")),
32 isExpandedFromMacro(Pair.first),
33 anyOf(hasLHS(hasType(qualType(
34 hasCanonicalType(asString(
"NSString *"))))),
35 hasRHS(hasType(qualType(
36 hasCanonicalType(asString(
"NSString *"))))))
45 for (
const auto &Pair :
nameMap()) {
46 if (
const auto *Root = Result.Nodes.getNodeAs<BinaryOperator>(Pair.first)) {
47 SourceManager *Sm = Result.SourceManager;
49 auto MacroCallsite = Sm->getImmediateMacroCallerLoc(
50 Sm->getImmediateMacroCallerLoc(Root->getBeginLoc()));
51 diag(MacroCallsite,
"use " + Pair.second +
" for comparing objects")
52 << FixItHint::CreateReplacement(
53 clang::CharSourceRange::getCharRange(
55 MacroCallsite.getLocWithOffset(Pair.first.length())),