================ @@ -0,0 +1,374 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#include "BoolBitwiseOperationCheck.h" +#include "clang/AST/ASTTypeTraits.h" +#include "clang/AST/DynamicRecursiveASTVisitor.h" +#include "clang/AST/Expr.h" +#include "clang/ASTMatchers/ASTMatchFinder.h" +#include "clang/ASTMatchers/ASTMatchers.h" +#include "clang/Basic/Diagnostic.h" +#include "clang/Lex/Lexer.h" +#include <array> +#include <utility> + +using namespace clang::ast_matchers; + +namespace clang::tidy::misc { + +static constexpr std::array<std::pair<StringRef, StringRef>, 8U> + OperatorsTransformation{{{"|", "||"}, + {"|=", "||"}, + {"&", "&&"}, + {"&=", "&&"}, + {"bitand", "and"}, + {"and_eq", "and"}, + {"bitor", "or"}, + {"or_eq", "or"}}}; + +static StringRef translate(StringRef Value) { + for (const auto &[Bitwise, Logical] : OperatorsTransformation) + if (Value == Bitwise) + return Logical; + + return {}; +} + +static bool isBitwiseOperation(StringRef Value) { + return llvm::is_contained(llvm::make_first_range(OperatorsTransformation), + Value); +} + +static std::optional<CharSourceRange> +getOperatorTokenRangeForFixIt(const BinaryOperator *BinOp, + const SourceManager &SM, + const LangOptions &LangOpts) { + SourceLocation Loc = BinOp->getOperatorLoc(); + if (Loc.isInvalid() || Loc.isMacroID()) ---------------- zwuis wrote:
`Loc.isInvalid()` seems redundant. https://github.com/llvm/llvm-project/blob/a2b7f1fcad77b506d469c1ed171e3c93cf1bc2b1/clang/include/clang/Basic/SourceLocation.h#L114-L120 https://github.com/llvm/llvm-project/pull/167552 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
