Index: clang-tools-extra/clang-tidy/ClangTidyCheck.h =================================================================== --- clang-tools-extra/clang-tidy/ClangTidyCheck.h +++ clang-tools-extra/clang-tidy/ClangTidyCheck.h @@ -10,7 +10,10 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDYCHECK_H #include "ClangTidyDiagnosticConsumer.h" + #include "ClangTidyOptions.h" +#include "utils/IncludeInserter.h" + #include "clang/ASTMatchers/ASTMatchFinder.h" #include "clang/Basic/Diagnostic.h" #include "llvm/ADT/Optional.h" @@ -25,13 +28,6 @@ namespace tidy { -/// This class should be specialized by any enum type that needs to be converted -/// to and from an \ref llvm::StringRef. -template struct OptionEnumMapping { - // Specializations of this struct must implement this function. - static ArrayRef> getEnumMapping() = delete; -}; - /// Base class for all clang-tidy checks. /// /// To implement a ``ClangTidyCheck``, write a subclass and override some of the @@ -58,7 +54,8 @@ /// Derived classes must implement the constructor with this signature or /// delegate it. If a check needs to read options, it can do this in the /// constructor using the Options.get() methods below. - ClangTidyCheck(StringRef CheckName, ClangTidyContext *Context); + ClangTidyCheck(StringRef CheckName, ClangTidyContext *Context, + CheckFeatures OptionalFeatures = CheckFeatures::None); /// Override this to disable registering matchers and PP callbacks if an /// invalid language version is being used. @@ -88,8 +85,11 @@ /// included modular headers when the analysis runs with modules enabled. /// When modules are not enabled ModuleExpanderPP just points to the real /// preprocessor. + /// + /// Derived classes that override this function should call this method from + /// the overridden method. virtual void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, - Preprocessor *ModuleExpanderPP) {} + Preprocessor *ModuleExpanderPP); /// Override this to register AST matchers with \p Finder. /// @@ -125,12 +125,26 @@ configurationDiag(StringRef Description, DiagnosticIDs::Level Level = DiagnosticIDs::Warning) const; + /// Creates a fixit that inserts an include directive in the given file. + Optional createIncludeInsertion(FileID FileID, StringRef Header); + + /// Creates a fixit that inserts an include directive in the file associated + /// with the given location. + Optional createIncludeInsertion(SourceLocation Loc, + StringRef Header); + + /// Creates a fixit that inserts an include directive in the main file. + Optional createMainFileIncludeInsertion(StringRef Header); + /// Should store all options supported by this check with their /// current values or default values for options that haven't been overridden. /// /// The check should use ``Options.store()`` to store each option it supports /// whether it has the default value or it has been overridden. - virtual void storeOptions(ClangTidyOptions::OptionMap &Options) {} + /// + /// Derived classes that override this function should call this method from + /// the overridden method. + virtual void storeOptions(ClangTidyOptions::OptionMap &Options); /// Provides access to the ``ClangTidyCheck`` options via check-local /// names. @@ -400,24 +414,30 @@ void storeInt(ClangTidyOptions::OptionMap &Options, StringRef LocalName, int64_t Value) const; - std::string NamePrefix; const ClangTidyOptions::OptionMap &CheckOptions; ClangTidyContext *Context; }; -private: - void run(const ast_matchers::MatchFinder::MatchResult &Result) override; - StringRef getID() const override { return CheckName; } - std::string CheckName; - ClangTidyContext *Context; - protected: OptionsView Options; /// Returns the main file name of the current translation unit. StringRef getCurrentMainFile() const { return Context->getCurrentFile(); } /// Returns the language options from the context. const LangOptions &getLangOpts() const { return Context->getLangOpts(); } + +private: + void run(const ast_matchers::MatchFinder::MatchResult &Result) override; + StringRef getID() const override { return CheckName; } + bool useIncludeInserter() const { + return (OptionalFeatures & CheckFeatures::UseIncludeInserter) != 0; + } + + std::string CheckName; + ClangTidyContext *Context; + CheckFeatures OptionalFeatures; + utils::IncludeInserter IncludeInserter; + const SourceManager *SourceMgr = nullptr; }; /// Read a named option from the ``Context`` and parse it as a bool. @@ -451,7 +471,6 @@ ClangTidyOptions::OptionMap &Options, StringRef LocalName, bool Value) const; - } // namespace tidy } // namespace clang Index: clang-tools-extra/clang-tidy/ClangTidyCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/ClangTidyCheck.cpp +++ clang-tools-extra/clang-tidy/ClangTidyCheck.cpp @@ -15,9 +15,13 @@ namespace clang { namespace tidy { -ClangTidyCheck::ClangTidyCheck(StringRef CheckName, ClangTidyContext *Context) +ClangTidyCheck::ClangTidyCheck(StringRef CheckName, ClangTidyContext *Context, + CheckFeatures OptionalFeatures) : CheckName(CheckName), Context(Context), - Options(CheckName, Context->getOptions().CheckOptions, Context) { + Options(CheckName, Context->getOptions().CheckOptions, Context), + OptionalFeatures(OptionalFeatures), + IncludeInserter(Options.getLocalOrGlobal("IncludeStyle", + utils::IncludeSorter::IS_LLVM)) { assert(Context != nullptr); assert(!CheckName.empty()); } @@ -38,6 +42,38 @@ return Context->configurationDiag(Description, Level); } +void ClangTidyCheck::registerPPCallbacks(const SourceManager &SM, + Preprocessor *PP, + Preprocessor *ModuleExpanderPP) { + if (useIncludeInserter()) { + SourceMgr = &SM; + IncludeInserter.registerPreprocessor(PP); + } +} + +void ClangTidyCheck::storeOptions(ClangTidyOptions::OptionMap &Options) { + if (useIncludeInserter()) + this->Options.store(Options, "IncludeStyle", IncludeInserter.getStyle()); +} + +Optional ClangTidyCheck::createIncludeInsertion(FileID FileID, + StringRef Header) { + assert(useIncludeInserter()); + return IncludeInserter.createIncludeInsertion(FileID, Header); +} + +Optional ClangTidyCheck::createIncludeInsertion(SourceLocation Loc, + StringRef Header) { + assert(useIncludeInserter()); + return createIncludeInsertion(SourceMgr->getFileID(Loc), Header); +} + +Optional +ClangTidyCheck::createMainFileIncludeInsertion(StringRef Header) { + assert(useIncludeInserter()); + return IncludeInserter.createMainFileIncludeInsertion(Header); +} + void ClangTidyCheck::run(const ast_matchers::MatchFinder::MatchResult &Result) { // For historical reasons, checks don't implement the MatchFinder run() // callback directly. We keep the run()/check() distinction to avoid interface @@ -60,8 +96,8 @@ } static ClangTidyOptions::OptionMap::const_iterator -findPriorityOption(const ClangTidyOptions::OptionMap &Options, StringRef NamePrefix, - StringRef LocalName) { +findPriorityOption(const ClangTidyOptions::OptionMap &Options, + StringRef NamePrefix, StringRef LocalName) { auto IterLocal = Options.find((NamePrefix + LocalName).str()); auto IterGlobal = Options.find(LocalName.str()); if (IterLocal == Options.end()) Index: clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h =================================================================== --- clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h +++ clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h @@ -60,6 +60,19 @@ } }; +enum class CheckFeatures { + None = 0, + EnableAnalyzerAlphaCheckers = 0x1, + UseIncludeInserter = 0x2 +}; +inline CheckFeatures operator&(CheckFeatures LHS, CheckFeatures RHS) { + return static_cast(static_cast(LHS) & + static_cast(RHS)); +} +inline bool operator!=(CheckFeatures LHS, int RHS) { + return static_cast(LHS) != RHS; +} + /// Every \c ClangTidyCheck reports errors through a \c DiagnosticsEngine /// provided by this context. /// Index: clang-tools-extra/clang-tidy/OptionEnumMapping.h =================================================================== --- /dev/null +++ clang-tools-extra/clang-tidy/OptionEnumMapping.h @@ -0,0 +1,30 @@ +//===--- ClangTidyCheck.h - clang-tidy --------------------------*- C++ -*-===// +// +// 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_OPTIONENUMMAPPING_H +#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_OPTIONENUMMAPPING_H + +#include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/StringRef.h" + +#include + +namespace clang { +namespace tidy { + +/// This class should be specialized by any enum type that needs to be converted +/// to and from an \ref llvm::StringRef. +template struct OptionEnumMapping { + // Specializations of this struct must implement this function. + static ArrayRef> getEnumMapping() = delete; +}; + +} // namespace tidy +} // namespace clang + +#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_OPTIONENUMMAPPING_H Index: clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h =================================================================== --- clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h +++ clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h @@ -10,7 +10,6 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_ABSEIL_STRINGFINDSTARTSWITHCHECK_H #include "../ClangTidyCheck.h" -#include "../utils/IncludeInserter.h" #include "clang/ASTMatchers/ASTMatchFinder.h" #include @@ -26,17 +25,15 @@ // FIXME(niko): Add equivalent modernize checks for C++20's std::starts_With class StringFindStartswithCheck : public ClangTidyCheck { public: - using ClangTidyCheck::ClangTidyCheck; - StringFindStartswithCheck(StringRef Name, ClangTidyContext *Context); - void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, - Preprocessor *ModuleExpanderPP) override; + StringFindStartswithCheck(StringRef CheckName, ClangTidyContext *Context); + ~StringFindStartswithCheck() override = default; + void registerMatchers(ast_matchers::MatchFinder *Finder) override; void check(const ast_matchers::MatchFinder::MatchResult &Result) override; void storeOptions(ClangTidyOptions::OptionMap &Opts) override; private: const std::vector StringLikeClasses; - utils::IncludeInserter IncludeInserter; const std::string AbseilStringsMatchHeader; }; Index: clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.cpp +++ clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.cpp @@ -23,11 +23,9 @@ StringFindStartswithCheck::StringFindStartswithCheck(StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context), + : ClangTidyCheck(Name, Context, CheckFeatures::UseIncludeInserter), StringLikeClasses(utils::options::parseStringList( Options.get("StringLikeClasses", "::std::basic_string"))), - IncludeInserter(Options.getLocalOrGlobal("IncludeStyle", - utils::IncludeSorter::IS_LLVM)), AbseilStringsMatchHeader( Options.get("AbseilStringsMatchHeader", "absl/strings/match.h")) {} @@ -124,21 +122,15 @@ // Create a preprocessor #include FixIt hint (createIncludeInsertion checks // whether this already exists). - Diagnostic << IncludeInserter.createIncludeInsertion( - Source.getFileID(ComparisonExpr->getBeginLoc()), - AbseilStringsMatchHeader); -} - -void StringFindStartswithCheck::registerPPCallbacks( - const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) { - IncludeInserter.registerPreprocessor(PP); + Diagnostic << createIncludeInsertion(ComparisonExpr->getBeginLoc(), + AbseilStringsMatchHeader); } void StringFindStartswithCheck::storeOptions( ClangTidyOptions::OptionMap &Opts) { + ClangTidyCheck::storeOptions(Opts); Options.store(Opts, "StringLikeClasses", utils::options::serializeStringList(StringLikeClasses)); - Options.store(Opts, "IncludeStyle", IncludeInserter.getStyle()); Options.store(Opts, "AbseilStringsMatchHeader", AbseilStringsMatchHeader); } Index: clang-tools-extra/clang-tidy/bugprone/ImplicitWideningOfMultiplicationResultCheck.h =================================================================== --- clang-tools-extra/clang-tidy/bugprone/ImplicitWideningOfMultiplicationResultCheck.h +++ clang-tools-extra/clang-tidy/bugprone/ImplicitWideningOfMultiplicationResultCheck.h @@ -10,7 +10,6 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_IMPLICITWIDENINGOFMULTIPLICATIONRESULTCHECK_H #include "../ClangTidyCheck.h" -#include "../utils/IncludeInserter.h" namespace clang { namespace tidy { @@ -21,6 +20,14 @@ /// For the user-facing documentation see: /// http://clang.llvm.org/extra/clang-tidy/checks/bugprone-implicit-widening-of-multiplication-result.html class ImplicitWideningOfMultiplicationResultCheck : public ClangTidyCheck { +public: + ImplicitWideningOfMultiplicationResultCheck(StringRef Name, + ClangTidyContext *Context); + void registerMatchers(ast_matchers::MatchFinder *Finder) override; + void check(const ast_matchers::MatchFinder::MatchResult &Result) override; + void storeOptions(ClangTidyOptions::OptionMap &Opts) override; + +private: const ast_matchers::MatchFinder::MatchResult *Result; bool ShouldUseCXXStaticCast; bool ShouldUseCXXHeader; @@ -30,19 +37,8 @@ void handleImplicitCastExpr(const ImplicitCastExpr *ICE); void handlePointerOffsetting(const Expr *E); -public: - ImplicitWideningOfMultiplicationResultCheck(StringRef Name, - ClangTidyContext *Context); - void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, - Preprocessor *ModuleExpanderPP) override; - void registerMatchers(ast_matchers::MatchFinder *Finder) override; - void check(const ast_matchers::MatchFinder::MatchResult &Result) override; - void storeOptions(ClangTidyOptions::OptionMap &Opts) override; - -private: const bool UseCXXStaticCastsInCppSources; const bool UseCXXHeadersInCppSources; - utils::IncludeInserter IncludeInserter; }; } // namespace bugprone Index: clang-tools-extra/clang-tidy/bugprone/ImplicitWideningOfMultiplicationResultCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/bugprone/ImplicitWideningOfMultiplicationResultCheck.cpp +++ clang-tools-extra/clang-tidy/bugprone/ImplicitWideningOfMultiplicationResultCheck.cpp @@ -38,33 +38,25 @@ ImplicitWideningOfMultiplicationResultCheck:: ImplicitWideningOfMultiplicationResultCheck(StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context), + : ClangTidyCheck(Name, Context, CheckFeatures::UseIncludeInserter), UseCXXStaticCastsInCppSources( Options.get("UseCXXStaticCastsInCppSources", true)), - UseCXXHeadersInCppSources(Options.get("UseCXXHeadersInCppSources", true)), - IncludeInserter(Options.getLocalOrGlobal("IncludeStyle", - utils::IncludeSorter::IS_LLVM)) { -} - -void ImplicitWideningOfMultiplicationResultCheck::registerPPCallbacks( - const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) { - IncludeInserter.registerPreprocessor(PP); -} + UseCXXHeadersInCppSources( + Options.get("UseCXXHeadersInCppSources", true)) {} void ImplicitWideningOfMultiplicationResultCheck::storeOptions( ClangTidyOptions::OptionMap &Opts) { + ClangTidyCheck::storeOptions(Opts); Options.store(Opts, "UseCXXStaticCastsInCppSources", UseCXXStaticCastsInCppSources); Options.store(Opts, "UseCXXHeadersInCppSources", UseCXXHeadersInCppSources); - Options.store(Opts, "IncludeStyle", IncludeInserter.getStyle()); } llvm::Optional ImplicitWideningOfMultiplicationResultCheck::includeStddefHeader( SourceLocation File) { - return IncludeInserter.createIncludeInsertion( - Result->SourceManager->getFileID(File), - ShouldUseCXXHeader ? "" : ""); + return createIncludeInsertion(File, ShouldUseCXXHeader ? "" + : ""); } void ImplicitWideningOfMultiplicationResultCheck::handleImplicitCastExpr( Index: clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.h =================================================================== --- clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.h +++ clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.h @@ -10,7 +10,6 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CPPCOREGUIDELINES_INITVARIABLESCHECK_H #include "../ClangTidyCheck.h" -#include "../utils/IncludeInserter.h" #include "../utils/OptionsUtils.h" namespace clang { @@ -25,13 +24,10 @@ public: InitVariablesCheck(StringRef Name, ClangTidyContext *Context); void storeOptions(ClangTidyOptions::OptionMap &Opts) override; - void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, - Preprocessor *ModuleExpanderPP) override; void registerMatchers(ast_matchers::MatchFinder *Finder) override; void check(const ast_matchers::MatchFinder::MatchResult &Result) override; private: - utils::IncludeInserter IncludeInserter; const std::string MathHeader; }; Index: clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp +++ clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp @@ -25,13 +25,11 @@ InitVariablesCheck::InitVariablesCheck(StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context), - IncludeInserter(Options.getLocalOrGlobal("IncludeStyle", - utils::IncludeSorter::IS_LLVM)), + : ClangTidyCheck(Name, Context, CheckFeatures::UseIncludeInserter), MathHeader(Options.get("MathHeader", "")) {} void InitVariablesCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) { - Options.store(Opts, "IncludeStyle", IncludeInserter.getStyle()); + ClangTidyCheck::storeOptions(Opts); Options.store(Opts, "MathHeader", MathHeader); } @@ -48,16 +46,8 @@ this); } -void InitVariablesCheck::registerPPCallbacks(const SourceManager &SM, - Preprocessor *PP, - Preprocessor *ModuleExpanderPP) { - IncludeInserter.registerPreprocessor(PP); -} - void InitVariablesCheck::check(const MatchFinder::MatchResult &Result) { const auto *MatchedDecl = Result.Nodes.getNodeAs("vardecl"); - const ASTContext &Context = *Result.Context; - const SourceManager &Source = Context.getSourceManager(); // We want to warn about cases where the type name // comes from a macro like this: @@ -104,10 +94,9 @@ MatchedDecl->getLocation().getLocWithOffset( MatchedDecl->getName().size()), *InitializationString); - if (AddMathInclude) { - Diagnostic << IncludeInserter.createIncludeInsertion( - Source.getFileID(MatchedDecl->getBeginLoc()), MathHeader); - } + if (AddMathInclude) + Diagnostic << createIncludeInsertion(MatchedDecl->getBeginLoc(), + MathHeader); } } } // namespace cppcoreguidelines Index: clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsConstantArrayIndexCheck.h =================================================================== --- clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsConstantArrayIndexCheck.h +++ clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsConstantArrayIndexCheck.h @@ -10,7 +10,6 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CPPCOREGUIDELINES_PRO_BOUNDS_CONSTANT_ARRAY_INDEX_H #include "../ClangTidyCheck.h" -#include "../utils/IncludeInserter.h" namespace clang { namespace tidy { @@ -22,19 +21,17 @@ /// For the user-facing documentation see: /// http://clang.llvm.org/extra/clang-tidy/checks/cppcoreguidelines-pro-bounds-constant-array-index.html class ProBoundsConstantArrayIndexCheck : public ClangTidyCheck { - const std::string GslHeader; - utils::IncludeInserter Inserter; - public: ProBoundsConstantArrayIndexCheck(StringRef Name, ClangTidyContext *Context); bool isLanguageVersionSupported(const LangOptions &LangOpts) const override { return LangOpts.CPlusPlus; } - void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, - Preprocessor *ModuleExpanderPP) override; void registerMatchers(ast_matchers::MatchFinder *Finder) override; void storeOptions(ClangTidyOptions::OptionMap &Opts) override; void check(const ast_matchers::MatchFinder::MatchResult &Result) override; + +private: + const std::string GslHeader; }; } // namespace cppcoreguidelines Index: clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsConstantArrayIndexCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsConstantArrayIndexCheck.cpp +++ clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsConstantArrayIndexCheck.cpp @@ -20,19 +20,13 @@ ProBoundsConstantArrayIndexCheck::ProBoundsConstantArrayIndexCheck( StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context), GslHeader(Options.get("GslHeader", "")), - Inserter(Options.getLocalOrGlobal("IncludeStyle", - utils::IncludeSorter::IS_LLVM)) {} + : ClangTidyCheck(Name, Context, CheckFeatures::UseIncludeInserter), + GslHeader(Options.get("GslHeader", "")) {} void ProBoundsConstantArrayIndexCheck::storeOptions( ClangTidyOptions::OptionMap &Opts) { + ClangTidyCheck::storeOptions(Opts); Options.store(Opts, "GslHeader", GslHeader); - Options.store(Opts, "IncludeStyle", Inserter.getStyle()); -} - -void ProBoundsConstantArrayIndexCheck::registerPPCallbacks( - const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) { - Inserter.registerPreprocessor(PP); } void ProBoundsConstantArrayIndexCheck::registerMatchers(MatchFinder *Finder) { @@ -85,7 +79,7 @@ IndexRange.getBegin().getLocWithOffset(-1)), ", ") << FixItHint::CreateReplacement(Matched->getEndLoc(), ")") - << Inserter.createMainFileIncludeInsertion(GslHeader); + << createMainFileIncludeInsertion(GslHeader); } return; } Index: clang-tools-extra/clang-tidy/misc/UniqueptrResetReleaseCheck.h =================================================================== --- clang-tools-extra/clang-tidy/misc/UniqueptrResetReleaseCheck.h +++ clang-tools-extra/clang-tidy/misc/UniqueptrResetReleaseCheck.h @@ -10,7 +10,6 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_UNIQUEPTRRESETRELEASECHECK_H #include "../ClangTidyCheck.h" -#include "../utils/IncludeInserter.h" namespace clang { namespace tidy { @@ -37,14 +36,8 @@ // provide any benefit to other languages, despite being benign. return LangOpts.CPlusPlus11; } - void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, - Preprocessor *ModuleExpanderPP) override; void registerMatchers(ast_matchers::MatchFinder *Finder) override; void check(const ast_matchers::MatchFinder::MatchResult &Result) override; - void storeOptions(ClangTidyOptions::OptionMap &Opts) override; - -private: - utils::IncludeInserter Inserter; }; } // namespace misc Index: clang-tools-extra/clang-tidy/misc/UniqueptrResetReleaseCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/misc/UniqueptrResetReleaseCheck.cpp +++ clang-tools-extra/clang-tidy/misc/UniqueptrResetReleaseCheck.cpp @@ -18,19 +18,7 @@ UniqueptrResetReleaseCheck::UniqueptrResetReleaseCheck( StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context), - Inserter(Options.getLocalOrGlobal("IncludeStyle", - utils::IncludeSorter::IS_LLVM)) {} - -void UniqueptrResetReleaseCheck::storeOptions( - ClangTidyOptions::OptionMap &Opts) { - Options.store(Opts, "IncludeStyle", Inserter.getStyle()); -} - -void UniqueptrResetReleaseCheck::registerPPCallbacks( - const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) { - Inserter.registerPreprocessor(PP); -} + : ClangTidyCheck(Name, Context, CheckFeatures::UseIncludeInserter) {} void UniqueptrResetReleaseCheck::registerMatchers(MatchFinder *Finder) { Finder->addMatcher( @@ -143,9 +131,7 @@ ResetCall->getEndLoc()), TrailingText); if (NeedsUtilityInclude) - D << Inserter.createIncludeInsertion( - Result.SourceManager->getFileID(ResetMember->getBeginLoc()), - ""); + D << createIncludeInsertion(ResetMember->getBeginLoc(), ""); } } // namespace misc } // namespace tidy Index: clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.h =================================================================== --- clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.h +++ clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.h @@ -10,7 +10,6 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_LOOP_CONVERT_H #include "../ClangTidyCheck.h" -#include "../utils/IncludeInserter.h" #include "LoopConvertUtils.h" namespace clang { @@ -25,8 +24,6 @@ } void storeOptions(ClangTidyOptions::OptionMap &Opts) override; void registerMatchers(ast_matchers::MatchFinder *Finder) override; - void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, - Preprocessor *ModuleExpanderPP) override; void check(const ast_matchers::MatchFinder::MatchResult &Result) override; private: @@ -78,7 +75,6 @@ const unsigned long long MaxCopySize; const Confidence::Level MinConfidence; const VariableNamer::NamingStyle NamingStyle; - utils::IncludeInserter Inserter; bool UseReverseRanges; const bool UseCxx20IfAvailable; std::string ReverseFunction; Index: clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp +++ clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp @@ -458,16 +458,14 @@ DerefByValue(false), NeedsReverseCall(false) {} LoopConvertCheck::LoopConvertCheck(StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context), TUInfo(new TUTrackingInfo), + : ClangTidyCheck(Name, Context, CheckFeatures::UseIncludeInserter), + TUInfo(new TUTrackingInfo), MaxCopySize(Options.get("MaxCopySize", 16ULL)), MinConfidence(Options.get("MinConfidence", Confidence::CL_Reasonable)), NamingStyle(Options.get("NamingStyle", VariableNamer::NS_CamelCase)), - Inserter(Options.getLocalOrGlobal("IncludeStyle", - utils::IncludeSorter::IS_LLVM)), UseCxx20IfAvailable(Options.get("UseCxx20ReverseRanges", true)), ReverseFunction(Options.get("MakeReverseRangeFunction", "")), ReverseHeader(Options.get("MakeReverseRangeHeader", "")) { - if (ReverseFunction.empty() && !ReverseHeader.empty()) { configurationDiag( "modernize-loop-convert: 'MakeReverseRangeHeader' is set but " @@ -482,21 +480,15 @@ } void LoopConvertCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) { + ClangTidyCheck::storeOptions(Opts); Options.store(Opts, "MaxCopySize", MaxCopySize); Options.store(Opts, "MinConfidence", MinConfidence); Options.store(Opts, "NamingStyle", NamingStyle); - Options.store(Opts, "IncludeStyle", Inserter.getStyle()); Options.store(Opts, "UseCxx20ReverseRanges", UseCxx20IfAvailable); Options.store(Opts, "MakeReverseRangeFunction", ReverseFunction); Options.store(Opts, "MakeReverseRangeHeader", ReverseHeader); } -void LoopConvertCheck::registerPPCallbacks(const SourceManager &SM, - Preprocessor *PP, - Preprocessor *ModuleExpanderPP) { - Inserter.registerPreprocessor(PP); -} - void LoopConvertCheck::registerMatchers(MatchFinder *Finder) { Finder->addMatcher(traverse(TK_AsIs, makeArrayLoopMatcher()), this); Finder->addMatcher(traverse(TK_AsIs, makeIteratorLoopMatcher(false)), this); @@ -671,9 +663,8 @@ CharSourceRange::getTokenRange(ParenRange), Range)); if (Descriptor.NeedsReverseCall && !getReverseHeader().empty()) { - if (Optional Insertion = Inserter.createIncludeInsertion( - Context->getSourceManager().getFileID(Loop->getBeginLoc()), - getReverseHeader())) + if (Optional Insertion = + createIncludeInsertion(Loop->getBeginLoc(), getReverseHeader())) FixIts.push_back(*Insertion); } diag(Loop->getForLoc(), "use range-based for loop instead") << FixIts; @@ -691,7 +682,7 @@ } else { // For CXXOperatorCallExpr such as vector_ptr->size() we want the class // object vector_ptr, but for vector[2] we need the whole expression. - if (const auto* E = dyn_cast(ContainerExpr)) + if (const auto *E = dyn_cast(ContainerExpr)) if (E->getOperator() != OO_Subscript) ContainerExpr = E->getArg(0); ContainerString = Index: clang-tools-extra/clang-tidy/modernize/MakeSmartPtrCheck.h =================================================================== --- clang-tools-extra/clang-tidy/modernize/MakeSmartPtrCheck.h +++ clang-tools-extra/clang-tidy/modernize/MakeSmartPtrCheck.h @@ -10,7 +10,6 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_MAKE_SMART_PTR_H #include "../ClangTidyCheck.h" -#include "../utils/IncludeInserter.h" #include "clang/ASTMatchers/ASTMatchFinder.h" #include "clang/ASTMatchers/ASTMatchersInternal.h" #include "llvm/ADT/StringRef.h" @@ -26,8 +25,6 @@ MakeSmartPtrCheck(StringRef Name, ClangTidyContext *Context, StringRef MakeSmartPtrFunctionName); void registerMatchers(ast_matchers::MatchFinder *Finder) final; - void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, - Preprocessor *ModuleExpanderPP) override; void check(const ast_matchers::MatchFinder::MatchResult &Result) final; void storeOptions(ClangTidyOptions::OptionMap &Opts) override; @@ -46,7 +43,6 @@ static const char PointerType[]; private: - utils::IncludeInserter Inserter; const std::string MakeSmartPtrFunctionHeader; const std::string MakeSmartPtrFunctionName; const bool IgnoreMacros; Index: clang-tools-extra/clang-tidy/modernize/MakeSmartPtrCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/modernize/MakeSmartPtrCheck.cpp +++ clang-tools-extra/clang-tidy/modernize/MakeSmartPtrCheck.cpp @@ -42,9 +42,7 @@ MakeSmartPtrCheck::MakeSmartPtrCheck(StringRef Name, ClangTidyContext *Context, StringRef MakeSmartPtrFunctionName) - : ClangTidyCheck(Name, Context), - Inserter(Options.getLocalOrGlobal("IncludeStyle", - utils::IncludeSorter::IS_LLVM)), + : ClangTidyCheck(Name, Context, CheckFeatures::UseIncludeInserter), MakeSmartPtrFunctionHeader( Options.get("MakeSmartPtrFunctionHeader", "")), MakeSmartPtrFunctionName( @@ -54,7 +52,7 @@ Options.get("IgnoreDefaultInitialization", true)) {} void MakeSmartPtrCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) { - Options.store(Opts, "IncludeStyle", Inserter.getStyle()); + ClangTidyCheck::storeOptions(Opts); Options.store(Opts, "MakeSmartPtrFunctionHeader", MakeSmartPtrFunctionHeader); Options.store(Opts, "MakeSmartPtrFunction", MakeSmartPtrFunctionName); Options.store(Opts, "IgnoreMacros", IgnoreMacros); @@ -67,12 +65,6 @@ return LangOpts.CPlusPlus11; } -void MakeSmartPtrCheck::registerPPCallbacks(const SourceManager &SM, - Preprocessor *PP, - Preprocessor *ModuleExpanderPP) { - Inserter.registerPreprocessor(PP); -} - void MakeSmartPtrCheck::registerMatchers(ast_matchers::MatchFinder *Finder) { // Calling make_smart_ptr from within a member function of a type with a // private or protected constructor would be ill-formed. @@ -282,7 +274,7 @@ return false; std::string ArraySizeExpr; - if (const auto* ArraySize = New->getArraySize().getValueOr(nullptr)) { + if (const auto *ArraySize = New->getArraySize().getValueOr(nullptr)) { ArraySizeExpr = Lexer::getSourceText(CharSourceRange::getTokenRange( ArraySize->getSourceRange()), SM, getLangOpts()) @@ -358,8 +350,7 @@ Diag << FixItHint::CreateRemoval( SourceRange(NewStart, InitRange.getBegin())); Diag << FixItHint::CreateRemoval(SourceRange(InitRange.getEnd(), NewEnd)); - } - else { + } else { // New array expression with default/value initialization: // smart_ptr(new int[5]()); // smart_ptr(new Foo[5]()); @@ -435,7 +426,7 @@ if (MakeSmartPtrFunctionHeader.empty()) { return; } - Diag << Inserter.createIncludeInsertion(FD, MakeSmartPtrFunctionHeader); + Diag << createIncludeInsertion(FD, MakeSmartPtrFunctionHeader); } } // namespace modernize Index: clang-tools-extra/clang-tidy/modernize/PassByValueCheck.h =================================================================== --- clang-tools-extra/clang-tidy/modernize/PassByValueCheck.h +++ clang-tools-extra/clang-tidy/modernize/PassByValueCheck.h @@ -10,7 +10,6 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_PASS_BY_VALUE_H #include "../ClangTidyCheck.h" -#include "../utils/IncludeInserter.h" #include @@ -25,13 +24,10 @@ return LangOpts.CPlusPlus; } void storeOptions(ClangTidyOptions::OptionMap &Opts) override; - void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, - Preprocessor *ModuleExpanderPP) override; void registerMatchers(ast_matchers::MatchFinder *Finder) override; void check(const ast_matchers::MatchFinder::MatchResult &Result) override; private: - utils::IncludeInserter Inserter; const bool ValuesOnly; }; Index: clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp +++ clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp @@ -188,13 +188,11 @@ } PassByValueCheck::PassByValueCheck(StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context), - Inserter(Options.getLocalOrGlobal("IncludeStyle", - utils::IncludeSorter::IS_LLVM)), + : ClangTidyCheck(Name, Context, CheckFeatures::UseIncludeInserter), ValuesOnly(Options.get("ValuesOnly", false)) {} void PassByValueCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) { - Options.store(Opts, "IncludeStyle", Inserter.getStyle()); + ClangTidyCheck::storeOptions(Opts); Options.store(Opts, "ValuesOnly", ValuesOnly); } @@ -233,12 +231,6 @@ this); } -void PassByValueCheck::registerPPCallbacks(const SourceManager &SM, - Preprocessor *PP, - Preprocessor *ModuleExpanderPP) { - Inserter.registerPreprocessor(PP); -} - void PassByValueCheck::check(const MatchFinder::MatchResult &Result) { const auto *Ctor = Result.Nodes.getNodeAs("Ctor"); const auto *ParamDecl = Result.Nodes.getNodeAs("Param"); @@ -298,9 +290,7 @@ Diag << FixItHint::CreateInsertion(Initializer->getRParenLoc(), ")") << FixItHint::CreateInsertion( Initializer->getLParenLoc().getLocWithOffset(1), "std::move(") - << Inserter.createIncludeInsertion( - Result.SourceManager->getFileID(Initializer->getSourceLocation()), - ""); + << createIncludeInsertion(Initializer->getSourceLocation(), ""); } } // namespace modernize Index: clang-tools-extra/clang-tidy/modernize/ReplaceAutoPtrCheck.h =================================================================== --- clang-tools-extra/clang-tidy/modernize/ReplaceAutoPtrCheck.h +++ clang-tools-extra/clang-tidy/modernize/ReplaceAutoPtrCheck.h @@ -10,7 +10,6 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_REPLACE_AUTO_PTR_H #include "../ClangTidyCheck.h" -#include "../utils/IncludeInserter.h" namespace clang { namespace tidy { @@ -46,14 +45,8 @@ bool isLanguageVersionSupported(const LangOptions &LangOpts) const override { return LangOpts.CPlusPlus; } - void storeOptions(ClangTidyOptions::OptionMap &Opts) override; void registerMatchers(ast_matchers::MatchFinder *Finder) override; - void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, - Preprocessor *ModuleExpanderPP) override; void check(const ast_matchers::MatchFinder::MatchResult &Result) override; - -private: - utils::IncludeInserter Inserter; }; } // namespace modernize Index: clang-tools-extra/clang-tidy/modernize/ReplaceAutoPtrCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/modernize/ReplaceAutoPtrCheck.cpp +++ clang-tools-extra/clang-tidy/modernize/ReplaceAutoPtrCheck.cpp @@ -39,13 +39,7 @@ ReplaceAutoPtrCheck::ReplaceAutoPtrCheck(StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context), - Inserter(Options.getLocalOrGlobal("IncludeStyle", - utils::IncludeSorter::IS_LLVM)) {} - -void ReplaceAutoPtrCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) { - Options.store(Opts, "IncludeStyle", Inserter.getStyle()); -} + : ClangTidyCheck(Name, Context, CheckFeatures::UseIncludeInserter) {} void ReplaceAutoPtrCheck::registerMatchers(MatchFinder *Finder) { auto AutoPtrDecl = recordDecl(hasName("auto_ptr"), isInStdNamespace()); @@ -94,12 +88,6 @@ this); } -void ReplaceAutoPtrCheck::registerPPCallbacks(const SourceManager &SM, - Preprocessor *PP, - Preprocessor *ModuleExpanderPP) { - Inserter.registerPreprocessor(PP); -} - void ReplaceAutoPtrCheck::check(const MatchFinder::MatchResult &Result) { SourceManager &SM = *Result.SourceManager; if (const auto *E = @@ -113,7 +101,7 @@ auto Diag = diag(Range.getBegin(), "use std::move to transfer ownership") << FixItHint::CreateInsertion(Range.getBegin(), "std::move(") << FixItHint::CreateInsertion(Range.getEnd(), ")") - << Inserter.createMainFileIncludeInsertion(""); + << createMainFileIncludeInsertion(""); return; } @@ -142,8 +130,7 @@ "auto_ptr") return; - SourceLocation EndLoc = - AutoPtrLoc.getLocWithOffset(strlen("auto_ptr") - 1); + SourceLocation EndLoc = AutoPtrLoc.getLocWithOffset(strlen("auto_ptr") - 1); diag(AutoPtrLoc, "auto_ptr is deprecated, use unique_ptr instead") << FixItHint::CreateReplacement(SourceRange(AutoPtrLoc, EndLoc), "unique_ptr"); Index: clang-tools-extra/clang-tidy/modernize/ReplaceRandomShuffleCheck.h =================================================================== --- clang-tools-extra/clang-tidy/modernize/ReplaceRandomShuffleCheck.h +++ clang-tools-extra/clang-tidy/modernize/ReplaceRandomShuffleCheck.h @@ -10,7 +10,6 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_REPLACE_RANDOM_SHUFFLE_H #include "../ClangTidyCheck.h" -#include "../utils/IncludeInserter.h" namespace clang { namespace tidy { @@ -24,17 +23,11 @@ class ReplaceRandomShuffleCheck : public ClangTidyCheck { public: ReplaceRandomShuffleCheck(StringRef Name, ClangTidyContext *Context); - void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, - Preprocessor *ModuleExpanderPP) override; bool isLanguageVersionSupported(const LangOptions &LangOpts) const override { return LangOpts.CPlusPlus11; } - void storeOptions(ClangTidyOptions::OptionMap &Opts) override; void registerMatchers(ast_matchers::MatchFinder *Finder) override; void check(const ast_matchers::MatchFinder::MatchResult &Result) override; - -private: - utils::IncludeInserter IncludeInserter; }; } // namespace modernize Index: clang-tools-extra/clang-tidy/modernize/ReplaceRandomShuffleCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/modernize/ReplaceRandomShuffleCheck.cpp +++ clang-tools-extra/clang-tidy/modernize/ReplaceRandomShuffleCheck.cpp @@ -22,10 +22,7 @@ ReplaceRandomShuffleCheck::ReplaceRandomShuffleCheck(StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context), - IncludeInserter(Options.getLocalOrGlobal("IncludeStyle", - utils::IncludeSorter::IS_LLVM)) { -} + : ClangTidyCheck(Name, Context, CheckFeatures::UseIncludeInserter) {} void ReplaceRandomShuffleCheck::registerMatchers(MatchFinder *Finder) { const auto Begin = hasArgument(0, expr()); @@ -43,16 +40,6 @@ this); } -void ReplaceRandomShuffleCheck::registerPPCallbacks( - const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) { - IncludeInserter.registerPreprocessor(PP); -} - -void ReplaceRandomShuffleCheck::storeOptions( - ClangTidyOptions::OptionMap &Opts) { - Options.store(Opts, "IncludeStyle", IncludeInserter.getStyle()); -} - void ReplaceRandomShuffleCheck::check(const MatchFinder::MatchResult &Result) { const auto *MatchedDecl = Result.Nodes.getNodeAs("name"); const auto *MatchedArgumentThree = Result.Nodes.getNodeAs("randomFunc"); @@ -90,10 +77,7 @@ Diag << FixItHint::CreateRemoval(MatchedDecl->getSourceRange()); Diag << FixItHint::CreateInsertion(MatchedDecl->getBeginLoc(), NewName); - Diag << IncludeInserter.createIncludeInsertion( - Result.Context->getSourceManager().getFileID( - MatchedCallExpr->getBeginLoc()), - ""); + Diag << createIncludeInsertion(MatchedCallExpr->getBeginLoc(), ""); } } // namespace modernize Index: clang-tools-extra/clang-tidy/performance/TypePromotionInMathFnCheck.h =================================================================== --- clang-tools-extra/clang-tidy/performance/TypePromotionInMathFnCheck.h +++ clang-tools-extra/clang-tidy/performance/TypePromotionInMathFnCheck.h @@ -10,7 +10,6 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PERFORMANCE_TYPE_PROMOTION_IN_MATH_FN_H #include "../ClangTidyCheck.h" -#include "../utils/IncludeInserter.h" namespace clang { namespace tidy { @@ -29,14 +28,8 @@ public: TypePromotionInMathFnCheck(StringRef Name, ClangTidyContext *Context); - void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, - Preprocessor *ModuleExpanderPP) override; - void storeOptions(ClangTidyOptions::OptionMap &Opts) override; void registerMatchers(ast_matchers::MatchFinder *Finder) override; void check(const ast_matchers::MatchFinder::MatchResult &Result) override; - -private: - utils::IncludeInserter IncludeInserter; }; } // namespace performance Index: clang-tools-extra/clang-tidy/performance/TypePromotionInMathFnCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/performance/TypePromotionInMathFnCheck.cpp +++ clang-tools-extra/clang-tidy/performance/TypePromotionInMathFnCheck.cpp @@ -30,20 +30,7 @@ TypePromotionInMathFnCheck::TypePromotionInMathFnCheck( StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context), - IncludeInserter(Options.getLocalOrGlobal("IncludeStyle", - utils::IncludeSorter::IS_LLVM)) { -} - -void TypePromotionInMathFnCheck::registerPPCallbacks( - const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) { - IncludeInserter.registerPreprocessor(PP); -} - -void TypePromotionInMathFnCheck::storeOptions( - ClangTidyOptions::OptionMap &Opts) { - Options.store(Opts, "IncludeStyle", IncludeInserter.getStyle()); -} + : ClangTidyCheck(Name, Context, CheckFeatures::UseIncludeInserter) {} void TypePromotionInMathFnCheck::registerMatchers(MatchFinder *Finder) { constexpr BuiltinType::Kind IntTy = BuiltinType::Int; @@ -190,9 +177,7 @@ // , because the functions we're suggesting moving away from are all // declared in . if (FnInCmath) - Diag << IncludeInserter.createIncludeInsertion( - Result.Context->getSourceManager().getFileID(Call->getBeginLoc()), - ""); + Diag << createIncludeInsertion(Call->getBeginLoc(), ""); } } // namespace performance Index: clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.h =================================================================== --- clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.h +++ clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.h @@ -27,7 +27,7 @@ class UnnecessaryCopyInitialization : public ClangTidyCheck { public: UnnecessaryCopyInitialization(StringRef Name, ClangTidyContext *Context); - bool isLanguageVersionSupported(const LangOptions &LangOpts) const override{ + bool isLanguageVersionSupported(const LangOptions &LangOpts) const override { return LangOpts.CPlusPlus; } void registerMatchers(ast_matchers::MatchFinder *Finder) override; Index: clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.h =================================================================== --- clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.h +++ clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.h @@ -10,7 +10,6 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PERFORMANCE_UNNECESSARY_VALUE_PARAM_H #include "../ClangTidyCheck.h" -#include "../utils/IncludeInserter.h" #include "clang/Analysis/Analyses/ExprMutationAnalyzer.h" namespace clang { @@ -30,8 +29,6 @@ } void registerMatchers(ast_matchers::MatchFinder *Finder) override; void check(const ast_matchers::MatchFinder::MatchResult &Result) override; - void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, - Preprocessor *ModuleExpanderPP) override; void storeOptions(ClangTidyOptions::OptionMap &Opts) override; void onEndOfTranslationUnit() override; @@ -41,7 +38,6 @@ llvm::DenseMap MutationAnalyzers; - utils::IncludeInserter Inserter; const std::vector AllowedTypes; }; Index: clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.cpp +++ clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.cpp @@ -67,9 +67,7 @@ UnnecessaryValueParamCheck::UnnecessaryValueParamCheck( StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context), - Inserter(Options.getLocalOrGlobal("IncludeStyle", - utils::IncludeSorter::IS_LLVM)), + : ClangTidyCheck(Name, Context, CheckFeatures::UseIncludeInserter), AllowedTypes( utils::options::parseStringList(Options.get("AllowedTypes", ""))) {} @@ -168,14 +166,9 @@ } } -void UnnecessaryValueParamCheck::registerPPCallbacks( - const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) { - Inserter.registerPreprocessor(PP); -} - void UnnecessaryValueParamCheck::storeOptions( ClangTidyOptions::OptionMap &Opts) { - Options.store(Opts, "IncludeStyle", Inserter.getStyle()); + ClangTidyCheck::storeOptions(Opts); Options.store(Opts, "AllowedTypes", utils::options::serializeStringList(AllowedTypes)); } @@ -199,8 +192,7 @@ Context.getLangOpts()); Diag << FixItHint::CreateInsertion(CopyArgument.getBeginLoc(), "std::move(") << FixItHint::CreateInsertion(EndLoc, ")") - << Inserter.createIncludeInsertion( - SM.getFileID(CopyArgument.getBeginLoc()), ""); + << createIncludeInsertion(CopyArgument.getBeginLoc(), ""); } } // namespace performance Index: clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp =================================================================== --- clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp +++ clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp @@ -150,8 +150,8 @@ This option overrides the 'FormatStyle` option in .clang-tidy file, if any. )"), - cl::init("none"), - cl::cat(ClangTidyCategory)); + cl::init("none"), + cl::cat(ClangTidyCategory)); static cl::opt ListChecks("list-checks", cl::desc(R"( List all enabled checks and exit. Use with @@ -237,8 +237,7 @@ warnings treated as errors if the respective options are specified. )"), - cl::init(false), - cl::cat(ClangTidyCategory)); + cl::init(false), cl::cat(ClangTidyCategory)); static cl::opt VfsOverlay("vfsoverlay", cl::desc(R"( Overlay the virtual filesystem described by file @@ -287,8 +286,8 @@ } } -static std::unique_ptr createOptionsProvider( - llvm::IntrusiveRefCntPtr FS) { +static std::unique_ptr +createOptionsProvider(llvm::IntrusiveRefCntPtr FS) { ClangTidyGlobalOptions GlobalOptions; if (std::error_code Err = parseLineFilter(LineFilter, GlobalOptions)) { llvm::errs() << "Invalid LineFilter: " << Err.message() << "\n\nUsage:\n"; Index: clang-tools-extra/clang-tidy/utils/IncludeSorter.h =================================================================== --- clang-tools-extra/clang-tidy/utils/IncludeSorter.h +++ clang-tools-extra/clang-tidy/utils/IncludeSorter.h @@ -9,7 +9,12 @@ #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_INCLUDESORTER_H #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_INCLUDESORTER_H -#include "../ClangTidyCheck.h" +#include "FileExtensionsUtils.h" +#include "../OptionEnumMapping.h" + +#include "llvm/ADT/Optional.h" +#include "llvm/ADT/SmallVector.h" + #include namespace clang { @@ -37,7 +42,7 @@ /// ``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. @@ -72,4 +77,5 @@ }; } // namespace tidy } // namespace clang + #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_INCLUDESORTER_H Index: clang-tools-extra/clang-tidy/utils/TransformerClangTidyCheck.h =================================================================== --- clang-tools-extra/clang-tidy/utils/TransformerClangTidyCheck.h +++ clang-tools-extra/clang-tidy/utils/TransformerClangTidyCheck.h @@ -10,7 +10,6 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_TRANSFORMER_CLANG_TIDY_CHECK_H #include "../ClangTidyCheck.h" -#include "IncludeInserter.h" #include "IncludeSorter.h" #include "clang/ASTMatchers/ASTMatchFinder.h" #include "clang/Tooling/Transformer/Transformer.h" @@ -58,15 +57,9 @@ TransformerClangTidyCheck(transformer::RewriteRule R, StringRef Name, ClangTidyContext *Context); - void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, - Preprocessor *ModuleExpanderPP) override; void registerMatchers(ast_matchers::MatchFinder *Finder) final; void check(const ast_matchers::MatchFinder::MatchResult &Result) final; - /// Derived classes that override this function should call this method from - /// the overridden method. - void storeOptions(ClangTidyOptions::OptionMap &Opts) override; - /// Set the rule that this check implements. All cases in the rule must have /// a non-null \c Explanation, even though \c Explanation is optional for /// RewriteRule in general. Because the primary purpose of clang-tidy checks @@ -78,7 +71,6 @@ private: transformer::RewriteRule Rule; - IncludeInserter Inserter; }; } // namespace utils Index: clang-tools-extra/clang-tidy/utils/TransformerClangTidyCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/utils/TransformerClangTidyCheck.cpp +++ clang-tools-extra/clang-tidy/utils/TransformerClangTidyCheck.cpp @@ -29,9 +29,7 @@ TransformerClangTidyCheck::TransformerClangTidyCheck(StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context), - Inserter( - Options.getLocalOrGlobal("IncludeStyle", IncludeSorter::IS_LLVM)) {} + : ClangTidyCheck(Name, Context, CheckFeatures::UseIncludeInserter) {} // This constructor cannot dispatch to the simpler one (below), because, in // order to get meaningful results from `getLangOpts` and `Options`, we need the @@ -60,11 +58,6 @@ Rule = std::move(R); } -void TransformerClangTidyCheck::registerPPCallbacks( - const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) { - Inserter.registerPreprocessor(PP); -} - void TransformerClangTidyCheck::registerMatchers( ast_matchers::MatchFinder *Finder) { if (!Rule.Cases.empty()) @@ -104,17 +97,11 @@ Diag << FixItHint::CreateReplacement(T.Range, T.Replacement); break; case transformer::EditKind::AddInclude: - Diag << Inserter.createIncludeInsertion( - Result.SourceManager->getFileID(T.Range.getBegin()), T.Replacement); + Diag << createIncludeInsertion(T.Range.getBegin(), T.Replacement); break; } } -void TransformerClangTidyCheck::storeOptions( - ClangTidyOptions::OptionMap &Opts) { - Options.store(Opts, "IncludeStyle", Inserter.getStyle()); -} - } // namespace utils } // namespace tidy } // namespace clang