diff --git a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.cpp b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.cpp index 1b77e128406d..aed90c006678 100644 --- a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.cpp +++ b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.cpp @@ -21,16 +21,16 @@ #include "clang/Rewrite/Core/Rewriter.h" #include "clang/Tooling/Refactoring.h" #include "clang/Tooling/Tooling.h" -#include "llvm/Support/CommandLine.h" using clang::ast_matchers::MatchFinder; using namespace clang::tooling; using namespace clang; +namespace cl = llvm::cl; -static llvm::cl::opt DetectMacros( +static cl::opt DetectMacros( "override-macros", - llvm::cl::desc( - "Detect and use macros that expand to the 'override' keyword.")); + cl::desc("Detect and use macros that expand to the 'override' keyword."), + cl::cat(TransformsOptionsCategory)); int AddOverrideTransform::apply(FileOverrides &InputStates, const CompilationDatabase &Database, diff --git a/clang-tools-extra/cpp11-migrate/Core/Transform.cpp b/clang-tools-extra/cpp11-migrate/Core/Transform.cpp index 7be91993bb88..92ccad74e7fc 100644 --- a/clang-tools-extra/cpp11-migrate/Core/Transform.cpp +++ b/clang-tools-extra/cpp11-migrate/Core/Transform.cpp @@ -11,6 +11,8 @@ using namespace clang; +llvm::cl::OptionCategory TransformsOptionsCategory("Transforms' options"); + namespace { using namespace tooling; diff --git a/clang-tools-extra/cpp11-migrate/Core/Transform.h b/clang-tools-extra/cpp11-migrate/Core/Transform.h index 997a95e1646e..e273cf68c64e 100644 --- a/clang-tools-extra/cpp11-migrate/Core/Transform.h +++ b/clang-tools-extra/cpp11-migrate/Core/Transform.h @@ -20,8 +20,9 @@ #include "Core/IncludeExcludeInfo.h" #include "Core/FileOverrides.h" #include "clang/Tooling/Refactoring.h" -#include "llvm/Support/Timer.h" #include "llvm/ADT/OwningPtr.h" +#include "llvm/Support/CommandLine.h" +#include "llvm/Support/Timer.h" /// \brief Description of the riskiness of actions that can be taken by @@ -51,6 +52,9 @@ class MatchFinder; class RewriterManager; +/// \brief To group transforms' options together when printing the help. +extern llvm::cl::OptionCategory TransformsOptionsCategory; + /// \brief Container for global options affecting all transforms. struct TransformOptions { /// \brief Enable the use of performance timers. diff --git a/clang-tools-extra/cpp11-migrate/Core/Transforms.cpp b/clang-tools-extra/cpp11-migrate/Core/Transforms.cpp index 4347e4e46df4..a9d8015f29fc 100644 --- a/clang-tools-extra/cpp11-migrate/Core/Transforms.cpp +++ b/clang-tools-extra/cpp11-migrate/Core/Transforms.cpp @@ -17,6 +17,8 @@ namespace cl = llvm::cl; +static cl::OptionCategory TransformCategory("Transforms"); + Transforms::~Transforms() { for (std::vector::iterator I = ChosenTransforms.begin(), E = ChosenTransforms.end(); I != E; ++I) { @@ -32,7 +34,8 @@ void Transforms::registerTransform(llvm::StringRef OptName, llvm::StringRef Description, TransformCreator Creator) { Options.push_back(OptionVec::value_type( - new cl::opt(OptName.data(), cl::desc(Description.data())), + new cl::opt(OptName.data(), cl::desc(Description.data()), + cl::cat(TransformCategory)), Creator)); } diff --git a/clang-tools-extra/cpp11-migrate/UseNullptr/NullptrActions.cpp b/clang-tools-extra/cpp11-migrate/UseNullptr/NullptrActions.cpp index 6f4761133678..309ba713756a 100644 --- a/clang-tools-extra/cpp11-migrate/UseNullptr/NullptrActions.cpp +++ b/clang-tools-extra/cpp11-migrate/UseNullptr/NullptrActions.cpp @@ -26,15 +26,17 @@ using namespace clang::ast_matchers; using namespace clang::tooling; using namespace clang; +namespace cl = llvm::cl; namespace { const char *NullMacroName = "NULL"; -static llvm::cl::opt UserNullMacroNames( - "user-null-macros", llvm::cl::desc("Comma-separated list of user-defined " - "macro names that behave like NULL"), - llvm::cl::init("")); +static cl::opt +UserNullMacroNames("user-null-macros", + cl::desc("Comma-separated list of user-defined " + "macro names that behave like NULL"), + cl::cat(TransformsOptionsCategory), cl::init("")); bool isReplaceableRange(SourceLocation StartLoc, SourceLocation EndLoc, const SourceManager &SM, const Transform &Owner) { diff --git a/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp b/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp index 1722de9fe68d..46351fd62373 100644 --- a/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp +++ b/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp @@ -34,6 +34,22 @@ using namespace clang::tooling; TransformOptions GlobalOptions; +static cl::extrahelp CommonHelp(CommonOptionsParser::HelpMessage); +static cl::extrahelp MoreHelp( + "EXAMPLES:\n\n" + "Use 'auto' type specifier, no compilation database:\n\n" + " cpp11-migrate -use-auto path/to/file.cpp -- -Ipath/to/include/\n" + "\n" + "Convert for loops to the new ranged-based for loops on all files in a " + "subtree:\n\n" + " find path/in/subtree -name '*.cpp' -exec \\\n" + " cpp11-migrate -p build/path -loop-convert {} ';'\n" + "\n" + "Make use of both nullptr and the override specifier, using git ls-files:\n" + "\n" + " git ls-files '*.cpp' | xargs -I{} cpp11-migrate -p build/path \\\n" + " -use-nullptr -add-override -override-macros {}\n"); + static cl::opt MaxRiskLevel( "risk", cl::desc("Select a maximum risk level:"), cl::values(clEnumValN(RL_Safe, "safe", "Only safe transformations"), @@ -131,7 +147,7 @@ int main(int argc, const char **argv) { TransformManager.createSelectedTransforms(GlobalOptions); if (TransformManager.begin() == TransformManager.end()) { - llvm::errs() << "No selected transforms\n"; + llvm::errs() << argv[0] << ": No selected transforms\n"; return 1; }