summaryrefslogtreecommitdiffstats
path: root/clang-tidy/abseil/DurationComparisonCheck.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tidy/abseil/DurationComparisonCheck.cpp')
-rw-r--r--clang-tidy/abseil/DurationComparisonCheck.cpp44
1 files changed, 9 insertions, 35 deletions
diff --git a/clang-tidy/abseil/DurationComparisonCheck.cpp b/clang-tidy/abseil/DurationComparisonCheck.cpp
index 963da3f3..a6e12dd8 100644
--- a/clang-tidy/abseil/DurationComparisonCheck.cpp
+++ b/clang-tidy/abseil/DurationComparisonCheck.cpp
@@ -1,9 +1,8 @@
//===--- DurationComparisonCheck.cpp - clang-tidy -------------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
@@ -19,35 +18,11 @@ namespace clang {
namespace tidy {
namespace abseil {
-/// Return `true` if `E` is a either: not a macro at all; or an argument to
-/// one. In the latter case, we should still transform it.
-static bool IsValidMacro(const MatchFinder::MatchResult &Result,
- const Expr *E) {
- if (!E->getBeginLoc().isMacroID())
- return true;
-
- SourceLocation Loc = E->getBeginLoc();
- // We want to get closer towards the initial macro typed into the source only
- // if the location is being expanded as a macro argument.
- while (Result.SourceManager->isMacroArgExpansion(Loc)) {
- // We are calling getImmediateMacroCallerLoc, but note it is essentially
- // equivalent to calling getImmediateSpellingLoc in this context according
- // to Clang implementation. We are not calling getImmediateSpellingLoc
- // because Clang comment says it "should not generally be used by clients."
- Loc = Result.SourceManager->getImmediateMacroCallerLoc(Loc);
- }
- return !Loc.isMacroID();
-}
-
void DurationComparisonCheck::registerMatchers(MatchFinder *Finder) {
- auto Matcher =
- binaryOperator(anyOf(hasOperatorName(">"), hasOperatorName(">="),
- hasOperatorName("=="), hasOperatorName("<="),
- hasOperatorName("<")),
- hasEitherOperand(ignoringImpCasts(callExpr(
- callee(functionDecl(DurationConversionFunction())
- .bind("function_decl"))))))
- .bind("binop");
+ auto Matcher = expr(comparisonOperatorWithCallee(functionDecl(
+ functionDecl(DurationConversionFunction())
+ .bind("function_decl"))))
+ .bind("binop");
Finder->addMatcher(Matcher, this);
}
@@ -55,7 +30,7 @@ void DurationComparisonCheck::registerMatchers(MatchFinder *Finder) {
void DurationComparisonCheck::check(const MatchFinder::MatchResult &Result) {
const auto *Binop = Result.Nodes.getNodeAs<BinaryOperator>("binop");
- llvm::Optional<DurationScale> Scale = getScaleForInverse(
+ llvm::Optional<DurationScale> Scale = getScaleForDurationInverse(
Result.Nodes.getNodeAs<FunctionDecl>("function_decl")->getName());
if (!Scale)
return;
@@ -64,8 +39,7 @@ void DurationComparisonCheck::check(const MatchFinder::MatchResult &Result) {
// want to handle the case of rewriting both sides. This is much simpler if
// we unconditionally try and rewrite both, and let the rewriter determine
// if nothing needs to be done.
- if (!IsValidMacro(Result, Binop->getLHS()) ||
- !IsValidMacro(Result, Binop->getRHS()))
+ if (isInMacro(Result, Binop->getLHS()) || isInMacro(Result, Binop->getRHS()))
return;
std::string LhsReplacement =
rewriteExprFromNumberToDuration(Result, *Scale, Binop->getLHS());