diff options
Diffstat (limited to 'clang-tidy/abseil/DurationComparisonCheck.cpp')
-rw-r--r-- | clang-tidy/abseil/DurationComparisonCheck.cpp | 44 |
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()); |