11 #include "clang/AST/ASTContext.h" 12 #include "clang/ASTMatchers/ASTMatchFinder.h" 21 if (!getLangOpts().CPlusPlus)
24 const auto DurationExpr =
25 expr(hasType(cxxRecordDecl(hasName(
"::absl::Duration"))));
28 hasSourceExpression(ignoringParenCasts(
29 cxxOperatorCallExpr(hasOverloadedOperatorName(
"/"),
30 hasArgument(0, DurationExpr),
31 hasArgument(1, DurationExpr))
33 hasImplicitDestinationType(qualType(unless(isInteger()))),
34 unless(hasParent(cxxStaticCastExpr())),
35 unless(hasParent(cStyleCastExpr())),
36 unless(isInTemplateInstantiation())),
41 const auto *OpCall = result.Nodes.getNodeAs<CXXOperatorCallExpr>(
"OpCall");
42 diag(OpCall->getOperatorLoc(),
43 "operator/ on absl::Duration objects performs integer division; " 44 "did you mean to use FDivDuration()?")
45 << FixItHint::CreateInsertion(OpCall->getBeginLoc(),
46 "absl::FDivDuration(")
47 << FixItHint::CreateReplacement(
48 SourceRange(OpCall->getOperatorLoc(), OpCall->getOperatorLoc()),
50 << FixItHint::CreateInsertion(
51 Lexer::getLocForEndOfToken(
52 result.SourceManager->getSpellingLoc(OpCall->getEndLoc()), 0,
53 *result.SourceManager, result.Context->getLangOpts()),
void check(const ast_matchers::MatchFinder::MatchResult &result) override
ClangTidyChecks that register ASTMatchers should do the actual work in here.
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//
void registerMatchers(ast_matchers::MatchFinder *finder) override
Override this to register AST matchers with Finder.