diff options
Diffstat (limited to 'clang-tools-extra/clang-tidy')
43 files changed, 218 insertions, 73 deletions
diff --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp index d36cc3e..6e0c252 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp @@ -90,12 +90,10 @@ ClangTidyCheck::OptionsView::getLocalOrGlobal(StringRef LocalName) const { return std::nullopt; } -static std::optional<bool> getAsBool(StringRef Value, - const llvm::Twine &LookupName) { - +static std::optional<bool> getAsBool(StringRef Value) { if (std::optional<bool> Parsed = llvm::yaml::parseBool(Value)) return Parsed; - // To maintain backwards compatability, we support parsing numbers as + // To maintain backwards compatibility, we support parsing numbers as // booleans, even though its not supported in YAML. long long Number = 0; if (!Value.getAsInteger(10, Number)) @@ -107,7 +105,7 @@ template <> std::optional<bool> ClangTidyCheck::OptionsView::get<bool>(StringRef LocalName) const { if (std::optional<StringRef> ValueOr = get(LocalName)) { - if (auto Result = getAsBool(*ValueOr, NamePrefix + LocalName)) + if (auto Result = getAsBool(*ValueOr)) return Result; diagnoseBadBooleanOption(NamePrefix + LocalName, *ValueOr); } @@ -119,7 +117,7 @@ std::optional<bool> ClangTidyCheck::OptionsView::getLocalOrGlobal<bool>(StringRef LocalName) const { auto Iter = findPriorityOption(CheckOptions, NamePrefix, LocalName, Context); if (Iter != CheckOptions.end()) { - if (auto Result = getAsBool(Iter->getValue().Value, Iter->getKey())) + if (auto Result = getAsBool(Iter->getValue().Value)) return Result; diagnoseBadBooleanOption(Iter->getKey(), Iter->getValue().Value); } diff --git a/clang-tools-extra/clang-tidy/ClangTidyModule.h b/clang-tools-extra/clang-tidy/ClangTidyModule.h index 8d697c6..53ef3f1 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyModule.h +++ b/clang-tools-extra/clang-tidy/ClangTidyModule.h @@ -85,7 +85,7 @@ private: /// them a prefixed name. class ClangTidyModule { public: - virtual ~ClangTidyModule() {} + virtual ~ClangTidyModule() = default; /// Implement this function in order to register all \c CheckFactories /// belonging to this module. diff --git a/clang-tools-extra/clang-tidy/ClangTidyOptions.h b/clang-tools-extra/clang-tidy/ClangTidyOptions.h index 2aae92f..4c97c5b 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyOptions.h +++ b/clang-tools-extra/clang-tidy/ClangTidyOptions.h @@ -171,7 +171,7 @@ public: static const char OptionsSourceTypeCheckCommandLineOption[]; static const char OptionsSourceTypeConfigCommandLineOption[]; - virtual ~ClangTidyOptionsProvider() {} + virtual ~ClangTidyOptionsProvider() = default; /// Returns global options, which are independent of the file. virtual const ClangTidyGlobalOptions &getGlobalOptions() = 0; diff --git a/clang-tools-extra/clang-tidy/ExpandModularHeadersPPCallbacks.h b/clang-tools-extra/clang-tidy/ExpandModularHeadersPPCallbacks.h index e599bda..aaa0410 100644 --- a/clang-tools-extra/clang-tidy/ExpandModularHeadersPPCallbacks.h +++ b/clang-tools-extra/clang-tidy/ExpandModularHeadersPPCallbacks.h @@ -44,7 +44,7 @@ public: ExpandModularHeadersPPCallbacks( CompilerInstance *CI, IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem> OverlayFS); - ~ExpandModularHeadersPPCallbacks(); + ~ExpandModularHeadersPPCallbacks() override; /// Returns the preprocessor that provides callbacks for the whole /// translation unit, including the main file, textual headers, and modular diff --git a/clang-tools-extra/clang-tidy/abseil/DurationAdditionCheck.cpp b/clang-tools-extra/clang-tidy/abseil/DurationAdditionCheck.cpp index 4e1bd3a..03f78f1 100644 --- a/clang-tools-extra/clang-tidy/abseil/DurationAdditionCheck.cpp +++ b/clang-tools-extra/clang-tidy/abseil/DurationAdditionCheck.cpp @@ -21,7 +21,7 @@ void DurationAdditionCheck::registerMatchers(MatchFinder *Finder) { Finder->addMatcher( binaryOperator(hasOperatorName("+"), hasEitherOperand(expr(ignoringParenImpCasts( - callExpr(callee(functionDecl(TimeConversionFunction()) + callExpr(callee(functionDecl(timeConversionFunction()) .bind("function_decl"))) .bind("call"))))) .bind("binop"), diff --git a/clang-tools-extra/clang-tidy/abseil/DurationComparisonCheck.cpp b/clang-tools-extra/clang-tidy/abseil/DurationComparisonCheck.cpp index cb8a478..16a244b 100644 --- a/clang-tools-extra/clang-tidy/abseil/DurationComparisonCheck.cpp +++ b/clang-tools-extra/clang-tidy/abseil/DurationComparisonCheck.cpp @@ -17,7 +17,7 @@ namespace clang::tidy::abseil { void DurationComparisonCheck::registerMatchers(MatchFinder *Finder) { auto Matcher = expr(comparisonOperatorWithCallee(functionDecl( - functionDecl(DurationConversionFunction()) + functionDecl(durationConversionFunction()) .bind("function_decl")))) .bind("binop"); diff --git a/clang-tools-extra/clang-tidy/abseil/DurationConversionCastCheck.cpp b/clang-tools-extra/clang-tidy/abseil/DurationConversionCastCheck.cpp index cf591d9..11d6017 100644 --- a/clang-tools-extra/clang-tidy/abseil/DurationConversionCastCheck.cpp +++ b/clang-tools-extra/clang-tidy/abseil/DurationConversionCastCheck.cpp @@ -19,7 +19,7 @@ namespace clang::tidy::abseil { void DurationConversionCastCheck::registerMatchers(MatchFinder *Finder) { auto CallMatcher = ignoringImpCasts(callExpr( - callee(functionDecl(DurationConversionFunction()).bind("func_decl")), + callee(functionDecl(durationConversionFunction()).bind("func_decl")), hasArgument(0, expr().bind("arg")))); Finder->addMatcher( diff --git a/clang-tools-extra/clang-tidy/abseil/DurationFactoryFloatCheck.cpp b/clang-tools-extra/clang-tidy/abseil/DurationFactoryFloatCheck.cpp index cccd7cf..83906fe 100644 --- a/clang-tools-extra/clang-tidy/abseil/DurationFactoryFloatCheck.cpp +++ b/clang-tools-extra/clang-tidy/abseil/DurationFactoryFloatCheck.cpp @@ -28,7 +28,7 @@ static bool insideMacroDefinition(const MatchFinder::MatchResult &Result, void DurationFactoryFloatCheck::registerMatchers(MatchFinder *Finder) { Finder->addMatcher( - callExpr(callee(functionDecl(DurationFactoryFunction())), + callExpr(callee(functionDecl(durationFactoryFunction())), hasArgument(0, anyOf(cxxStaticCastExpr(hasDestinationType( realFloatingPointType())), cStyleCastExpr(hasDestinationType( diff --git a/clang-tools-extra/clang-tidy/abseil/DurationFactoryScaleCheck.cpp b/clang-tools-extra/clang-tidy/abseil/DurationFactoryScaleCheck.cpp index 1d6ff1a..3346297 100644 --- a/clang-tools-extra/clang-tidy/abseil/DurationFactoryScaleCheck.cpp +++ b/clang-tools-extra/clang-tidy/abseil/DurationFactoryScaleCheck.cpp @@ -112,7 +112,7 @@ static std::optional<DurationScale> getNewScale(DurationScale OldScale, void DurationFactoryScaleCheck::registerMatchers(MatchFinder *Finder) { Finder->addMatcher( callExpr( - callee(functionDecl(DurationFactoryFunction()).bind("call_decl")), + callee(functionDecl(durationFactoryFunction()).bind("call_decl")), hasArgument( 0, ignoringImpCasts(anyOf( diff --git a/clang-tools-extra/clang-tidy/abseil/DurationRewriter.h b/clang-tools-extra/clang-tidy/abseil/DurationRewriter.h index 27d6ca0..e3b1753 100644 --- a/clang-tools-extra/clang-tidy/abseil/DurationRewriter.h +++ b/clang-tools-extra/clang-tidy/abseil/DurationRewriter.h @@ -96,7 +96,7 @@ bool isInMacro(const ast_matchers::MatchFinder::MatchResult &Result, const Expr *E); AST_MATCHER_FUNCTION(ast_matchers::internal::Matcher<FunctionDecl>, - DurationConversionFunction) { + durationConversionFunction) { using namespace clang::ast_matchers; return functionDecl( hasAnyName("::absl::ToDoubleHours", "::absl::ToDoubleMinutes", @@ -108,7 +108,7 @@ AST_MATCHER_FUNCTION(ast_matchers::internal::Matcher<FunctionDecl>, } AST_MATCHER_FUNCTION(ast_matchers::internal::Matcher<FunctionDecl>, - DurationFactoryFunction) { + durationFactoryFunction) { using namespace clang::ast_matchers; return functionDecl(hasAnyName("::absl::Nanoseconds", "::absl::Microseconds", "::absl::Milliseconds", "::absl::Seconds", @@ -116,7 +116,7 @@ AST_MATCHER_FUNCTION(ast_matchers::internal::Matcher<FunctionDecl>, } AST_MATCHER_FUNCTION(ast_matchers::internal::Matcher<FunctionDecl>, - TimeConversionFunction) { + timeConversionFunction) { using namespace clang::ast_matchers; return functionDecl(hasAnyName( "::absl::ToUnixHours", "::absl::ToUnixMinutes", "::absl::ToUnixSeconds", @@ -125,12 +125,12 @@ AST_MATCHER_FUNCTION(ast_matchers::internal::Matcher<FunctionDecl>, AST_MATCHER_FUNCTION_P(ast_matchers::internal::Matcher<Stmt>, comparisonOperatorWithCallee, - ast_matchers::internal::Matcher<Decl>, funcDecl) { + ast_matchers::internal::Matcher<Decl>, FuncDecl) { using namespace clang::ast_matchers; return binaryOperator( anyOf(hasOperatorName(">"), hasOperatorName(">="), hasOperatorName("=="), hasOperatorName("<="), hasOperatorName("<")), - hasEitherOperand(ignoringImpCasts(callExpr(callee(funcDecl))))); + hasEitherOperand(ignoringImpCasts(callExpr(callee(FuncDecl))))); } } // namespace clang::tidy::abseil diff --git a/clang-tools-extra/clang-tidy/abseil/DurationSubtractionCheck.cpp b/clang-tools-extra/clang-tidy/abseil/DurationSubtractionCheck.cpp index fd5e203..c5d93ad 100644 --- a/clang-tools-extra/clang-tidy/abseil/DurationSubtractionCheck.cpp +++ b/clang-tools-extra/clang-tidy/abseil/DurationSubtractionCheck.cpp @@ -21,7 +21,7 @@ void DurationSubtractionCheck::registerMatchers(MatchFinder *Finder) { Finder->addMatcher( binaryOperator( hasOperatorName("-"), - hasLHS(callExpr(callee(functionDecl(DurationConversionFunction()) + hasLHS(callExpr(callee(functionDecl(durationConversionFunction()) .bind("function_decl")), hasArgument(0, expr().bind("lhs_arg"))))) .bind("binop"), diff --git a/clang-tools-extra/clang-tidy/abseil/TimeComparisonCheck.cpp b/clang-tools-extra/clang-tidy/abseil/TimeComparisonCheck.cpp index 52121a5..7a97a18 100644 --- a/clang-tools-extra/clang-tidy/abseil/TimeComparisonCheck.cpp +++ b/clang-tools-extra/clang-tidy/abseil/TimeComparisonCheck.cpp @@ -18,7 +18,7 @@ namespace clang::tidy::abseil { void TimeComparisonCheck::registerMatchers(MatchFinder *Finder) { auto Matcher = expr(comparisonOperatorWithCallee(functionDecl( - functionDecl(TimeConversionFunction()).bind("function_decl")))) + functionDecl(timeConversionFunction()).bind("function_decl")))) .bind("binop"); Finder->addMatcher(Matcher, this); diff --git a/clang-tools-extra/clang-tidy/abseil/UpgradeDurationConversionsCheck.cpp b/clang-tools-extra/clang-tidy/abseil/UpgradeDurationConversionsCheck.cpp index f7905e0..8b197e5b 100644 --- a/clang-tools-extra/clang-tidy/abseil/UpgradeDurationConversionsCheck.cpp +++ b/clang-tools-extra/clang-tidy/abseil/UpgradeDurationConversionsCheck.cpp @@ -104,7 +104,7 @@ void UpgradeDurationConversionsCheck::registerMatchers(MatchFinder *Finder) { hasCastKind(CK_UserDefinedConversion)))), hasParent(callExpr( callee(functionDecl( - DurationFactoryFunction(), + durationFactoryFunction(), unless(hasParent(functionTemplateDecl())))), hasArgument(0, expr().bind("arg"))))) .bind("OuterExpr")), diff --git a/clang-tools-extra/clang-tidy/android/CloexecCheck.h b/clang-tools-extra/clang-tidy/android/CloexecCheck.h index b2b59f5..858d96a 100644 --- a/clang-tools-extra/clang-tidy/android/CloexecCheck.h +++ b/clang-tools-extra/clang-tidy/android/CloexecCheck.h @@ -82,7 +82,7 @@ protected: /// \param Mode The required mode char. /// \param ArgPos The 0-based position of the flag argument. void insertStringFlag(const ast_matchers::MatchFinder::MatchResult &Result, - const char Mode, const int ArgPos); + char Mode, int ArgPos); /// Helper function to get the spelling of a particular argument. StringRef getSpellingArg(const ast_matchers::MatchFinder::MatchResult &Result, diff --git a/clang-tools-extra/clang-tidy/bugprone/NarrowingConversionsCheck.h b/clang-tools-extra/clang-tidy/bugprone/NarrowingConversionsCheck.h index 9c05827..9631c71 100644 --- a/clang-tools-extra/clang-tidy/bugprone/NarrowingConversionsCheck.h +++ b/clang-tools-extra/clang-tidy/bugprone/NarrowingConversionsCheck.h @@ -41,7 +41,7 @@ private: void diagNarrowIntegerConstantToSignedInt(SourceLocation SourceLoc, const Expr &Lhs, const Expr &Rhs, const llvm::APSInt &Value, - const uint64_t HexBits); + uint64_t HexBits); void diagNarrowConstant(SourceLocation SourceLoc, const Expr &Lhs, const Expr &Rhs); diff --git a/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp index ca85168..08fae7b 100644 --- a/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp +++ b/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp @@ -823,7 +823,7 @@ void NotNullTerminatedResultCheck::check( if (Name.starts_with("mem") || Name.starts_with("wmem")) memoryHandlerFunctionFix(Name, Result); else if (Name == "strerror_s") - strerror_sFix(Result); + strerrorSFix(Result); else if (Name.ends_with("ncmp")) ncmpFix(Name, Result); else if (Name.ends_with("xfrm")) @@ -852,7 +852,7 @@ void NotNullTerminatedResultCheck::memoryHandlerFunctionFix( if (Name.ends_with("cpy")) { memcpyFix(Name, Result, Diag); } else if (Name.ends_with("cpy_s")) { - memcpy_sFix(Name, Result, Diag); + memcpySFix(Name, Result, Diag); } else if (Name.ends_with("move")) { memmoveFix(Name, Result, Diag); } else if (Name.ends_with("move_s")) { @@ -889,7 +889,7 @@ void NotNullTerminatedResultCheck::memcpyFix( insertNullTerminatorExpr(Name, Result, Diag); } -void NotNullTerminatedResultCheck::memcpy_sFix( +void NotNullTerminatedResultCheck::memcpySFix( StringRef Name, const MatchFinder::MatchResult &Result, DiagnosticBuilder &Diag) { bool IsOverflows = isDestCapacityFix(Result, Diag); @@ -950,7 +950,7 @@ void NotNullTerminatedResultCheck::memmoveFix( lengthArgHandle(LengthHandleKind::Increase, Result, Diag); } -void NotNullTerminatedResultCheck::strerror_sFix( +void NotNullTerminatedResultCheck::strerrorSFix( const MatchFinder::MatchResult &Result) { auto Diag = diag(Result.Nodes.getNodeAs<CallExpr>(FunctionExprName)->getBeginLoc(), diff --git a/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.h b/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.h index ca3fbf0..a8f4ca3 100644 --- a/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.h +++ b/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.h @@ -43,15 +43,15 @@ private: void memcpyFix(StringRef Name, const ast_matchers::MatchFinder::MatchResult &Result, DiagnosticBuilder &Diag); - void memcpy_sFix(StringRef Name, - const ast_matchers::MatchFinder::MatchResult &Result, - DiagnosticBuilder &Diag); + void memcpySFix(StringRef Name, + const ast_matchers::MatchFinder::MatchResult &Result, + DiagnosticBuilder &Diag); void memchrFix(StringRef Name, const ast_matchers::MatchFinder::MatchResult &Result); void memmoveFix(StringRef Name, const ast_matchers::MatchFinder::MatchResult &Result, DiagnosticBuilder &Diag) const; - void strerror_sFix(const ast_matchers::MatchFinder::MatchResult &Result); + void strerrorSFix(const ast_matchers::MatchFinder::MatchResult &Result); void ncmpFix(StringRef Name, const ast_matchers::MatchFinder::MatchResult &Result); void xfrmFix(StringRef Name, diff --git a/clang-tools-extra/clang-tidy/bugprone/UnsafeFunctionsCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/UnsafeFunctionsCheck.cpp index 0399af2..61ccd26 100644 --- a/clang-tools-extra/clang-tidy/bugprone/UnsafeFunctionsCheck.cpp +++ b/clang-tools-extra/clang-tidy/bugprone/UnsafeFunctionsCheck.cpp @@ -49,7 +49,7 @@ static StringRef getReplacementFor(StringRef FunctionName, // Try to find a better replacement from Annex K first. StringRef AnnexKReplacementFunction = StringSwitch<StringRef>(FunctionName) - .Cases("asctime", "asctime_r", "asctime_s") + .Cases({"asctime", "asctime_r"}, "asctime_s") .Case("gets", "gets_s") .Default({}); if (!AnnexKReplacementFunction.empty()) @@ -59,7 +59,7 @@ static StringRef getReplacementFor(StringRef FunctionName, // FIXME: Some of these functions are available in C++ under "std::", and // should be matched and suggested. return StringSwitch<StringRef>(FunctionName) - .Cases("asctime", "asctime_r", "strftime") + .Cases({"asctime", "asctime_r"}, "strftime") .Case("gets", "fgets") .Case("rewind", "fseek") .Case("setbuf", "setvbuf"); @@ -90,13 +90,13 @@ static StringRef getReplacementForAdditional(StringRef FunctionName, /// safer alternative. static StringRef getRationaleFor(StringRef FunctionName) { return StringSwitch<StringRef>(FunctionName) - .Cases("asctime", "asctime_r", "ctime", + .Cases({"asctime", "asctime_r", "ctime"}, "is not bounds-checking and non-reentrant") - .Cases("bcmp", "bcopy", "bzero", "is deprecated") - .Cases("fopen", "freopen", "has no exclusive access to the opened file") + .Cases({"bcmp", "bcopy", "bzero"}, "is deprecated") + .Cases({"fopen", "freopen"}, "has no exclusive access to the opened file") .Case("gets", "is insecure, was deprecated and removed in C11 and C++14") .Case("getpw", "is dangerous as it may overflow the provided buffer") - .Cases("rewind", "setbuf", "has no error detection") + .Cases({"rewind", "setbuf"}, "has no error detection") .Case("vfork", "is insecure as it can lead to denial of service " "situations in the parent process") .Default("is not bounds-checking"); diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h b/clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h index 8cdaf31..507aaa1 100644 --- a/clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h +++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h @@ -84,11 +84,11 @@ struct DenseMapInfo< using ClassDefId = clang::tidy::cppcoreguidelines::SpecialMemberFunctionsCheck::ClassDefId; - static inline ClassDefId getEmptyKey() { + static ClassDefId getEmptyKey() { return {DenseMapInfo<clang::SourceLocation>::getEmptyKey(), "EMPTY"}; } - static inline ClassDefId getTombstoneKey() { + static ClassDefId getTombstoneKey() { return {DenseMapInfo<clang::SourceLocation>::getTombstoneKey(), "TOMBSTONE"}; } diff --git a/clang-tools-extra/clang-tidy/google/TodoCommentCheck.h b/clang-tools-extra/clang-tidy/google/TodoCommentCheck.h index 05f9cc6..08cea13 100644 --- a/clang-tools-extra/clang-tidy/google/TodoCommentCheck.h +++ b/clang-tools-extra/clang-tidy/google/TodoCommentCheck.h @@ -22,7 +22,7 @@ namespace clang::tidy::google::readability { class TodoCommentCheck : public ClangTidyCheck { public: TodoCommentCheck(StringRef Name, ClangTidyContext *Context); - ~TodoCommentCheck(); + ~TodoCommentCheck() override; void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) override; diff --git a/clang-tools-extra/clang-tidy/misc/ConfusableIdentifierCheck.h b/clang-tools-extra/clang-tidy/misc/ConfusableIdentifierCheck.h index 37337954..b341d03 100644 --- a/clang-tools-extra/clang-tidy/misc/ConfusableIdentifierCheck.h +++ b/clang-tools-extra/clang-tidy/misc/ConfusableIdentifierCheck.h @@ -21,7 +21,7 @@ namespace clang::tidy::misc { class ConfusableIdentifierCheck : public ClangTidyCheck { public: ConfusableIdentifierCheck(StringRef Name, ClangTidyContext *Context); - ~ConfusableIdentifierCheck(); + ~ConfusableIdentifierCheck() override; void registerMatchers(ast_matchers::MatchFinder *Finder) override; void check(const ast_matchers::MatchFinder::MatchResult &Result) override; diff --git a/clang-tools-extra/clang-tidy/misc/MisleadingBidirectional.h b/clang-tools-extra/clang-tidy/misc/MisleadingBidirectional.h index aa7e043..ba895b9 100644 --- a/clang-tools-extra/clang-tidy/misc/MisleadingBidirectional.h +++ b/clang-tools-extra/clang-tidy/misc/MisleadingBidirectional.h @@ -16,7 +16,7 @@ namespace clang::tidy::misc { class MisleadingBidirectionalCheck : public ClangTidyCheck { public: MisleadingBidirectionalCheck(StringRef Name, ClangTidyContext *Context); - ~MisleadingBidirectionalCheck(); + ~MisleadingBidirectionalCheck() override; void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) override; diff --git a/clang-tools-extra/clang-tidy/misc/MisleadingIdentifier.h b/clang-tools-extra/clang-tidy/misc/MisleadingIdentifier.h index 5e1a56d..06b83d5 100644 --- a/clang-tools-extra/clang-tidy/misc/MisleadingIdentifier.h +++ b/clang-tools-extra/clang-tidy/misc/MisleadingIdentifier.h @@ -16,7 +16,7 @@ namespace clang::tidy::misc { class MisleadingIdentifierCheck : public ClangTidyCheck { public: MisleadingIdentifierCheck(StringRef Name, ClangTidyContext *Context); - ~MisleadingIdentifierCheck(); + ~MisleadingIdentifierCheck() override; void registerMatchers(ast_matchers::MatchFinder *Finder) override; void check(const ast_matchers::MatchFinder::MatchResult &Result) override; diff --git a/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.h b/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.h index 6e09086..877fc4d 100644 --- a/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.h +++ b/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.h @@ -18,7 +18,7 @@ namespace clang::tidy::misc { class UnusedParametersCheck : public ClangTidyCheck { public: UnusedParametersCheck(StringRef Name, ClangTidyContext *Context); - ~UnusedParametersCheck(); + ~UnusedParametersCheck() override; void registerMatchers(ast_matchers::MatchFinder *Finder) override; void check(const ast_matchers::MatchFinder::MatchResult &Result) override; void storeOptions(ClangTidyOptions::OptionMap &Opts) override; diff --git a/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.cpp b/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.cpp index 586deea..6fb7808 100644 --- a/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.cpp +++ b/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.cpp @@ -785,7 +785,7 @@ bool ForLoopIndexUseVisitor::TraverseLambdaCapture(LambdaExpr *LE, C->getLocation())); } if (VDecl->isInitCapture()) - TraverseStmtImpl(cast<VarDecl>(VDecl)->getInit()); + traverseStmtImpl(cast<VarDecl>(VDecl)->getInit()); } return VisitorBase::TraverseLambdaCapture(LE, C, Init); } @@ -815,7 +815,7 @@ bool ForLoopIndexUseVisitor::VisitDeclStmt(DeclStmt *S) { return true; } -bool ForLoopIndexUseVisitor::TraverseStmtImpl(Stmt *S) { +bool ForLoopIndexUseVisitor::traverseStmtImpl(Stmt *S) { // All this pointer swapping is a mechanism for tracking immediate parentage // of Stmts. const Stmt *OldNextParent = NextStmtParent; @@ -838,7 +838,7 @@ bool ForLoopIndexUseVisitor::TraverseStmt(Stmt *S) { return true; } } - return TraverseStmtImpl(S); + return traverseStmtImpl(S); } std::string VariableNamer::createIndexName() { diff --git a/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.h b/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.h index 306eca7..0a0db5e 100644 --- a/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.h +++ b/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.h @@ -354,7 +354,7 @@ private: bool VisitDeclStmt(DeclStmt *S); bool TraverseStmt(Stmt *S); - bool TraverseStmtImpl(Stmt *S); + bool traverseStmtImpl(Stmt *S); /// Add an expression to the list of expressions on which the container /// expression depends. diff --git a/clang-tools-extra/clang-tidy/modernize/UseScopedLockCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseScopedLockCheck.cpp index a004480..9bf3169 100644 --- a/clang-tools-extra/clang-tidy/modernize/UseScopedLockCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/UseScopedLockCheck.cpp @@ -217,7 +217,8 @@ void UseScopedLockCheck::diagOnSingleLock( // Create Fix-its only if we can find the constructor call to properly handle // 'std::lock_guard l(m, std::adopt_lock)' case. - const auto *CtorCall = dyn_cast<CXXConstructExpr>(LockGuard->getInit()); + const auto *CtorCall = + dyn_cast_if_present<CXXConstructExpr>(LockGuard->getInit()); if (!CtorCall) return; diff --git a/clang-tools-extra/clang-tidy/performance/NoexceptDestructorCheck.h b/clang-tools-extra/clang-tidy/performance/NoexceptDestructorCheck.h index ce2b1c9..12e6839 100644 --- a/clang-tools-extra/clang-tidy/performance/NoexceptDestructorCheck.h +++ b/clang-tools-extra/clang-tidy/performance/NoexceptDestructorCheck.h @@ -27,10 +27,9 @@ public: void registerMatchers(ast_matchers::MatchFinder *Finder) override; private: - DiagnosticBuilder - reportMissingNoexcept(const FunctionDecl *FuncDecl) final override; + DiagnosticBuilder reportMissingNoexcept(const FunctionDecl *FuncDecl) final; void reportNoexceptEvaluatedToFalse(const FunctionDecl *FuncDecl, - const Expr *NoexceptExpr) final override; + const Expr *NoexceptExpr) final; }; } // namespace clang::tidy::performance diff --git a/clang-tools-extra/clang-tidy/performance/NoexceptFunctionBaseCheck.h b/clang-tools-extra/clang-tidy/performance/NoexceptFunctionBaseCheck.h index 075b4fe..56a1e4a 100644 --- a/clang-tools-extra/clang-tidy/performance/NoexceptFunctionBaseCheck.h +++ b/clang-tools-extra/clang-tidy/performance/NoexceptFunctionBaseCheck.h @@ -27,8 +27,7 @@ public: bool isLanguageVersionSupported(const LangOptions &LangOpts) const override { return LangOpts.CPlusPlus11 && LangOpts.CXXExceptions; } - void - check(const ast_matchers::MatchFinder::MatchResult &Result) final override; + void check(const ast_matchers::MatchFinder::MatchResult &Result) final; std::optional<TraversalKind> getCheckTraversalKind() const override { return TK_IgnoreUnlessSpelledInSource; } diff --git a/clang-tools-extra/clang-tidy/performance/NoexceptMoveConstructorCheck.h b/clang-tools-extra/clang-tidy/performance/NoexceptMoveConstructorCheck.h index 11a8068..db95ebc8 100644 --- a/clang-tools-extra/clang-tidy/performance/NoexceptMoveConstructorCheck.h +++ b/clang-tools-extra/clang-tidy/performance/NoexceptMoveConstructorCheck.h @@ -31,10 +31,9 @@ public: void registerMatchers(ast_matchers::MatchFinder *Finder) override; private: - DiagnosticBuilder - reportMissingNoexcept(const FunctionDecl *FuncDecl) final override; + DiagnosticBuilder reportMissingNoexcept(const FunctionDecl *FuncDecl) final; void reportNoexceptEvaluatedToFalse(const FunctionDecl *FuncDecl, - const Expr *NoexceptExpr) final override; + const Expr *NoexceptExpr) final; }; } // namespace clang::tidy::performance diff --git a/clang-tools-extra/clang-tidy/performance/NoexceptSwapCheck.h b/clang-tools-extra/clang-tidy/performance/NoexceptSwapCheck.h index 9466b3a..7c5572e 100644 --- a/clang-tools-extra/clang-tidy/performance/NoexceptSwapCheck.h +++ b/clang-tools-extra/clang-tidy/performance/NoexceptSwapCheck.h @@ -27,10 +27,9 @@ public: void registerMatchers(ast_matchers::MatchFinder *Finder) override; private: - DiagnosticBuilder - reportMissingNoexcept(const FunctionDecl *FuncDecl) final override; + DiagnosticBuilder reportMissingNoexcept(const FunctionDecl *FuncDecl) final; void reportNoexceptEvaluatedToFalse(const FunctionDecl *FuncDecl, - const Expr *NoexceptExpr) final override; + const Expr *NoexceptExpr) final; }; } // namespace clang::tidy::performance diff --git a/clang-tools-extra/clang-tidy/readability/AvoidReturnWithVoidValueCheck.h b/clang-tools-extra/clang-tidy/readability/AvoidReturnWithVoidValueCheck.h index 1533b9a..97b522a 100644 --- a/clang-tools-extra/clang-tidy/readability/AvoidReturnWithVoidValueCheck.h +++ b/clang-tools-extra/clang-tidy/readability/AvoidReturnWithVoidValueCheck.h @@ -34,7 +34,6 @@ private: } void storeOptions(ClangTidyOptions::OptionMap &Opts) override; -private: bool IgnoreMacros; bool StrictMode; }; diff --git a/clang-tools-extra/clang-tidy/readability/CMakeLists.txt b/clang-tools-extra/clang-tidy/readability/CMakeLists.txt index 0d0641c..91e9354 100644 --- a/clang-tools-extra/clang-tidy/readability/CMakeLists.txt +++ b/clang-tools-extra/clang-tidy/readability/CMakeLists.txt @@ -49,6 +49,7 @@ add_clang_library(clangTidyReadabilityModule STATIC RedundantSmartptrGetCheck.cpp RedundantStringCStrCheck.cpp RedundantStringInitCheck.cpp + RedundantTypenameCheck.cpp ReferenceToConstructedTemporaryCheck.cpp SimplifyBooleanExprCheck.cpp SimplifySubscriptExprCheck.cpp diff --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp index 5178bee..ef3eac8 100644 --- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp @@ -83,14 +83,18 @@ namespace readability { m(Member) \ m(ClassConstant) \ m(ClassMember) \ + m(ClassConstexpr) \ + m(GlobalConstexprVariable) \ m(GlobalConstant) \ m(GlobalConstantPointer) \ m(GlobalPointer) \ m(GlobalVariable) \ + m(LocalConstexprVariable) \ m(LocalConstant) \ m(LocalConstantPointer) \ m(LocalPointer) \ m(LocalVariable) \ + m(StaticConstexprVariable) \ m(StaticConstant) \ m(StaticVariable) \ m(Constant) \ @@ -1497,8 +1501,22 @@ StyleKind IdentifierNamingCheck::findStyleKindForField( StyleKind IdentifierNamingCheck::findStyleKindForVar( const VarDecl *Var, QualType Type, ArrayRef<std::optional<NamingStyle>> NamingStyles) const { - if (Var->isConstexpr() && NamingStyles[SK_ConstexprVariable]) - return SK_ConstexprVariable; + if (Var->isConstexpr()) { + if (Var->isStaticDataMember() && NamingStyles[SK_ClassConstexpr]) + return SK_ClassConstexpr; + + if (Var->isFileVarDecl() && NamingStyles[SK_GlobalConstexprVariable]) + return SK_GlobalConstexprVariable; + + if (Var->isStaticLocal() && NamingStyles[SK_StaticConstexprVariable]) + return SK_StaticConstexprVariable; + + if (Var->isLocalVarDecl() && NamingStyles[SK_LocalConstexprVariable]) + return SK_LocalConstexprVariable; + + if (NamingStyles[SK_ConstexprVariable]) + return SK_ConstexprVariable; + } if (!Type.isNull() && Type.isConstQualified()) { if (Var->isStaticDataMember() && NamingStyles[SK_ClassConstant]) diff --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h index 3db9d23..0b17af8 100644 --- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h +++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h @@ -33,7 +33,7 @@ enum StyleKind : int; class IdentifierNamingCheck final : public RenamerClangTidyCheck { public: IdentifierNamingCheck(StringRef Name, ClangTidyContext *Context); - ~IdentifierNamingCheck(); + ~IdentifierNamingCheck() override; void storeOptions(ClangTidyOptions::OptionMap &Opts) override; diff --git a/clang-tools-extra/clang-tidy/readability/ReadabilityTidyModule.cpp b/clang-tools-extra/clang-tidy/readability/ReadabilityTidyModule.cpp index fcfac05..569302e 100644 --- a/clang-tools-extra/clang-tidy/readability/ReadabilityTidyModule.cpp +++ b/clang-tools-extra/clang-tidy/readability/ReadabilityTidyModule.cpp @@ -52,6 +52,7 @@ #include "RedundantSmartptrGetCheck.h" #include "RedundantStringCStrCheck.h" #include "RedundantStringInitCheck.h" +#include "RedundantTypenameCheck.h" #include "ReferenceToConstructedTemporaryCheck.h" #include "SimplifyBooleanExprCheck.h" #include "SimplifySubscriptExprCheck.h" @@ -143,6 +144,8 @@ public: "readability-redundant-parentheses"); CheckFactories.registerCheck<RedundantPreprocessorCheck>( "readability-redundant-preprocessor"); + CheckFactories.registerCheck<RedundantTypenameCheck>( + "readability-redundant-typename"); CheckFactories.registerCheck<ReferenceToConstructedTemporaryCheck>( "readability-reference-to-constructed-temporary"); CheckFactories.registerCheck<SimplifySubscriptExprCheck>( diff --git a/clang-tools-extra/clang-tidy/readability/RedundantTypenameCheck.cpp b/clang-tools-extra/clang-tidy/readability/RedundantTypenameCheck.cpp new file mode 100644 index 0000000..a4edd2b --- /dev/null +++ b/clang-tools-extra/clang-tidy/readability/RedundantTypenameCheck.cpp @@ -0,0 +1,94 @@ +//===----------------------------------------------------------------------===// +// +// 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 "RedundantTypenameCheck.h" +#include "clang/AST/TypeLoc.h" +#include "clang/ASTMatchers/ASTMatchFinder.h" +#include "clang/ASTMatchers/ASTMatchers.h" +#include "clang/Basic/Diagnostic.h" +#include "clang/Lex/Lexer.h" + +using namespace clang::ast_matchers; + +namespace clang::tidy::readability { + +void RedundantTypenameCheck::registerMatchers(MatchFinder *Finder) { + Finder->addMatcher(typeLoc(unless(hasAncestor(decl(isInstantiated())))) + .bind("nonDependentTypeLoc"), + this); + + if (!getLangOpts().CPlusPlus20) + return; + + const auto InImplicitTypenameContext = anyOf( + hasParent(decl(anyOf( + typedefNameDecl(), templateTypeParmDecl(), nonTypeTemplateParmDecl(), + friendDecl(), fieldDecl(), + varDecl(hasDeclContext(anyOf(namespaceDecl(), translationUnitDecl())), + unless(parmVarDecl())), + parmVarDecl(hasParent(expr(requiresExpr()))), + parmVarDecl(hasParent(typeLoc(hasParent(decl( + anyOf(cxxMethodDecl(), hasParent(friendDecl()), + functionDecl(has(nestedNameSpecifier())), + cxxDeductionGuideDecl(hasDeclContext(recordDecl())))))))), + // Match return types. + functionDecl(unless(cxxConversionDecl()))))), + hasParent(expr(anyOf(cxxNamedCastExpr(), cxxNewExpr())))); + Finder->addMatcher( + typeLoc(InImplicitTypenameContext).bind("dependentTypeLoc"), this); +} + +void RedundantTypenameCheck::check(const MatchFinder::MatchResult &Result) { + const SourceLocation ElaboratedKeywordLoc = [&] { + if (const auto *NonDependentTypeLoc = + Result.Nodes.getNodeAs<TypeLoc>("nonDependentTypeLoc")) { + if (const auto TL = NonDependentTypeLoc->getAs<TypedefTypeLoc>()) + return TL.getElaboratedKeywordLoc(); + + if (const auto TL = NonDependentTypeLoc->getAs<TagTypeLoc>()) + return TL.getElaboratedKeywordLoc(); + + if (const auto TL = NonDependentTypeLoc + ->getAs<DeducedTemplateSpecializationTypeLoc>()) + return TL.getElaboratedKeywordLoc(); + + if (const auto TL = + NonDependentTypeLoc->getAs<TemplateSpecializationTypeLoc>()) + if (!TL.getType()->isDependentType()) + return TL.getElaboratedKeywordLoc(); + } else { + TypeLoc InnermostTypeLoc = + *Result.Nodes.getNodeAs<TypeLoc>("dependentTypeLoc"); + while (const TypeLoc Next = InnermostTypeLoc.getNextTypeLoc()) + InnermostTypeLoc = Next; + + if (const auto TL = InnermostTypeLoc.getAs<DependentNameTypeLoc>()) + return TL.getElaboratedKeywordLoc(); + + if (const auto TL = + InnermostTypeLoc.getAs<TemplateSpecializationTypeLoc>()) + return TL.getElaboratedKeywordLoc(); + } + + return SourceLocation(); + }(); + + if (ElaboratedKeywordLoc.isInvalid()) + return; + + if (Token ElaboratedKeyword; + Lexer::getRawToken(ElaboratedKeywordLoc, ElaboratedKeyword, + *Result.SourceManager, getLangOpts()) || + ElaboratedKeyword.getRawIdentifier() != "typename") + return; + + diag(ElaboratedKeywordLoc, "redundant 'typename'") + << FixItHint::CreateRemoval(ElaboratedKeywordLoc); +} + +} // namespace clang::tidy::readability diff --git a/clang-tools-extra/clang-tidy/readability/RedundantTypenameCheck.h b/clang-tools-extra/clang-tidy/readability/RedundantTypenameCheck.h new file mode 100644 index 0000000..8e86b0c --- /dev/null +++ b/clang-tools-extra/clang-tidy/readability/RedundantTypenameCheck.h @@ -0,0 +1,36 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_REDUNDANTTYPENAMECHECK_H +#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_REDUNDANTTYPENAMECHECK_H + +#include "../ClangTidyCheck.h" + +namespace clang::tidy::readability { + +/// Finds redundant uses of the `typename` keyword. +/// +/// For the user-facing documentation see: +/// https://clang.llvm.org/extra/clang-tidy/checks/readability/redundant-typename.html +class RedundantTypenameCheck : public ClangTidyCheck { +public: + RedundantTypenameCheck(StringRef Name, ClangTidyContext *Context) + : ClangTidyCheck(Name, Context) {} + bool isLanguageVersionSupported(const LangOptions &LangOpts) const override { + return LangOpts.CPlusPlus; + } + void registerMatchers(ast_matchers::MatchFinder *Finder) override; + void check(const ast_matchers::MatchFinder::MatchResult &Result) override; + std::optional<TraversalKind> getCheckTraversalKind() const override { + return TK_IgnoreUnlessSpelledInSource; + } +}; + +} // namespace clang::tidy::readability + +#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_REDUNDANTTYPENAMECHECK_H diff --git a/clang-tools-extra/clang-tidy/utils/BracesAroundStatement.h b/clang-tools-extra/clang-tidy/utils/BracesAroundStatement.h index 699d754..53ce2e0 100644 --- a/clang-tools-extra/clang-tidy/utils/BracesAroundStatement.h +++ b/clang-tools-extra/clang-tidy/utils/BracesAroundStatement.h @@ -68,7 +68,7 @@ private: /// The algorithm computing them respects comment before and after the statement /// and adds line breaks before the braces accordingly. BraceInsertionHints -getBraceInsertionsHints(const Stmt *const S, const LangOptions &LangOpts, +getBraceInsertionsHints(const Stmt *S, const LangOptions &LangOpts, const SourceManager &SM, SourceLocation StartLoc, SourceLocation EndLocHint = SourceLocation()); diff --git a/clang-tools-extra/clang-tidy/utils/IncludeSorter.cpp b/clang-tools-extra/clang-tidy/utils/IncludeSorter.cpp index 58e3356..7e2aad9 100644 --- a/clang-tools-extra/clang-tidy/utils/IncludeSorter.cpp +++ b/clang-tools-extra/clang-tidy/utils/IncludeSorter.cpp @@ -118,9 +118,8 @@ static int compareHeaders(StringRef LHS, StringRef RHS, return LHS.compare(RHS); } -IncludeSorter::IncludeSorter(const SourceManager *SourceMgr, - const FileID FileID, StringRef FileName, - IncludeStyle Style) +IncludeSorter::IncludeSorter(const SourceManager *SourceMgr, FileID FileID, + StringRef FileName, IncludeStyle Style) : SourceMgr(SourceMgr), Style(Style), CurrentFileID(FileID), CanonicalFile(makeCanonicalName(FileName, Style)) {} diff --git a/clang-tools-extra/clang-tidy/utils/IncludeSorter.h b/clang-tools-extra/clang-tidy/utils/IncludeSorter.h index ce752c4..66830ee 100644 --- a/clang-tools-extra/clang-tidy/utils/IncludeSorter.h +++ b/clang-tools-extra/clang-tidy/utils/IncludeSorter.h @@ -23,7 +23,7 @@ namespace utils { class IncludeSorter { public: /// Supported include styles. - enum IncludeStyle { IS_LLVM = 0, IS_Google = 1, IS_Google_ObjC }; + enum IncludeStyle { IS_LLVM = 0, IS_Google = 1, IS_Google_ObjC = 2 }; /// The classifications of inclusions, in the order they should be sorted. enum IncludeKinds { @@ -37,7 +37,7 @@ public: /// ``IncludeSorter`` constructor; takes the FileID and name of the file to be /// processed by the sorter. - IncludeSorter(const SourceManager *SourceMgr, const FileID FileID, + IncludeSorter(const SourceManager *SourceMgr, FileID FileID, StringRef FileName, IncludeStyle Style); /// Adds the given include directive to the sorter. diff --git a/clang-tools-extra/clang-tidy/utils/Matchers.h b/clang-tools-extra/clang-tidy/utils/Matchers.h index 6caa35d..4eac065 100644 --- a/clang-tools-extra/clang-tidy/utils/Matchers.h +++ b/clang-tools-extra/clang-tidy/utils/Matchers.h @@ -51,7 +51,7 @@ AST_MATCHER_FUNCTION(ast_matchers::TypeMatcher, isPointerToConst) { // Returns QualType matcher for target char type only. AST_MATCHER(QualType, isSimpleChar) { - const auto ActualType = Node.getTypePtr(); + const auto *ActualType = Node.getTypePtr(); return ActualType && (ActualType->isSpecificBuiltinType(BuiltinType::Char_S) || ActualType->isSpecificBuiltinType(BuiltinType::Char_U)); diff --git a/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.h b/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.h index 68b3040..b38bc08 100644 --- a/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.h +++ b/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.h @@ -28,7 +28,7 @@ namespace tidy { class RenamerClangTidyCheck : public ClangTidyCheck { public: RenamerClangTidyCheck(StringRef CheckName, ClangTidyContext *Context); - ~RenamerClangTidyCheck(); + ~RenamerClangTidyCheck() override; /// Derived classes should not implement any matching logic themselves; this /// class will do the matching and call the derived class' |
