10 #include "clang/AST/ASTContext.h" 11 #include "clang/ASTMatchers/ASTMatchFinder.h" 20 if (!getLangOpts().CPlusPlus)
23 const auto DurationExpr =
24 expr(hasType(cxxRecordDecl(hasName(
"::absl::Duration"))));
27 hasSourceExpression(ignoringParenCasts(
28 cxxOperatorCallExpr(hasOverloadedOperatorName(
"/"),
29 hasArgument(0, DurationExpr),
30 hasArgument(1, DurationExpr))
32 hasImplicitDestinationType(qualType(unless(isInteger()))),
33 unless(hasParent(cxxStaticCastExpr())),
34 unless(hasParent(cStyleCastExpr())),
35 unless(isInTemplateInstantiation())),
40 const auto *OpCall = result.Nodes.getNodeAs<CXXOperatorCallExpr>(
"OpCall");
41 diag(OpCall->getOperatorLoc(),
42 "operator/ on absl::Duration objects performs integer division; " 43 "did you mean to use FDivDuration()?")
44 << FixItHint::CreateInsertion(OpCall->getBeginLoc(),
45 "absl::FDivDuration(")
46 << FixItHint::CreateReplacement(
47 SourceRange(OpCall->getOperatorLoc(), OpCall->getOperatorLoc()),
49 << FixItHint::CreateInsertion(
50 Lexer::getLocForEndOfToken(
51 result.SourceManager->getSpellingLoc(OpCall->getEndLoc()), 0,
52 *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.