diff options
author | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2019-09-11 10:56:35 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2019-09-13 16:22:59 +0200 |
commit | e0bcef5451fe993b2149b525b62b885a6cd31363 (patch) | |
tree | 230f5fe6e31812fffad74ff94337466638847327 /src | |
parent | f23173b01197c1ab9639c378c9684babb72e9c31 (diff) |
Add '-list-checks' command line option
Summary: This is in line with the same option of clang-tidy.
Differential Revision: https://phabricator.kde.org/D23872
Diffstat (limited to 'src')
-rw-r--r-- | src/Clazy.cpp | 6 | ||||
-rw-r--r-- | src/ClazyStandaloneMain.cpp | 20 | ||||
-rw-r--r-- | src/checkmanager.cpp | 4 | ||||
-rw-r--r-- | src/checkmanager.h | 2 |
4 files changed, 27 insertions, 5 deletions
diff --git a/src/Clazy.cpp b/src/Clazy.cpp index fd3343e1..3e21377e 100644 --- a/src/Clazy.cpp +++ b/src/Clazy.cpp @@ -271,7 +271,8 @@ bool ClazyASTAction::ParseArgs(const CompilerInstance &ci, const std::vector<std { std::lock_guard<std::mutex> lock(CheckManager::lock()); - m_checks = m_checkManager->requestedChecks(m_context, args); + m_checks = m_checkManager->requestedChecks(args, + m_options & ClazyContext::ClazyOption_Qt4Compat); } if (args.size() > 1) { @@ -390,7 +391,8 @@ unique_ptr<ASTConsumer> ClazyStandaloneASTAction::CreateASTConsumer(CompilerInst auto cm = CheckManager::instance(); vector<string> checks; checks.push_back(m_checkList); - const RegisteredCheck::List requestedChecks = cm->requestedChecks(context, checks); + const bool qt4Compat = m_options & ClazyContext::ClazyOption_Qt4Compat; + const RegisteredCheck::List requestedChecks = cm->requestedChecks(checks, qt4Compat); if (requestedChecks.size() == 0) { llvm::errs() << "No checks were requested!\n" << "\n"; diff --git a/src/ClazyStandaloneMain.cpp b/src/ClazyStandaloneMain.cpp index 39af763b..cd471a7b 100644 --- a/src/ClazyStandaloneMain.cpp +++ b/src/ClazyStandaloneMain.cpp @@ -78,6 +78,9 @@ directories for which diagnostics should never be emitted. Useful for ignoring 3 static cl::opt<bool> s_supportedChecks("supported-checks-json", cl::desc("Dump meta information about supported checks in JSON format."), cl::init(false), cl::cat(s_clazyCategory)); +static cl::opt<bool> s_listEnabledChecks("list-checks", cl::desc("List all enabled checks and exit."), + cl::init(false), cl::cat(s_clazyCategory)); + static cl::extrahelp s_commonHelp(CommonOptionsParser::HelpMessage); class ClazyToolActionFactory @@ -129,6 +132,23 @@ int main(int argc, const char **argv) return 0; } + if (s_listEnabledChecks.getValue()) { + std::string checksFromArgs = s_checks.getValue(); + std::vector<std::string> checks = { checksFromArgs.empty() ? "level1" : checksFromArgs }; + const RegisteredCheck::List enabledChecks + = CheckManager::instance()->requestedChecks(checks, s_qt4Compat.getValue()); + + if (!enabledChecks.empty()) { + llvm::outs() << "Enabled checks:"; + for (const auto &check : enabledChecks) { + llvm::outs() << "\n " << check.name; + } + llvm::outs() << "\n"; + } + + return 0; + } + ClangTool tool(optionsParser.getCompilations(), optionsParser.getSourcePathList()); return tool.run(new ClazyToolActionFactory(optionsParser.getSourcePathList())); diff --git a/src/checkmanager.cpp b/src/checkmanager.cpp index bb5c2676..838e452f 100644 --- a/src/checkmanager.cpp +++ b/src/checkmanager.cpp @@ -171,7 +171,7 @@ static bool takeArgument(const string &arg, vector<string> &args) return false; } -RegisteredCheck::List CheckManager::requestedChecks(const ClazyContext *context, std::vector<std::string> &args) +RegisteredCheck::List CheckManager::requestedChecks(std::vector<std::string> &args, bool qt4Compat) { RegisteredCheck::List result; @@ -213,7 +213,7 @@ RegisteredCheck::List CheckManager::requestedChecks(const ClazyContext *context, clazy::sort_and_remove_dups(result, checkLessThan); CheckManager::removeChecksFromList(result, userDisabledChecks); - if (context->options & ClazyContext::ClazyOption_Qt4Compat) { + if (qt4Compat) { // #5 Remove Qt4 incompatible checks result.erase(remove_if(result.begin(), result.end(), [](const RegisteredCheck &c){ return c.options & RegisteredCheck::Option_Qt4Incompatible; diff --git a/src/checkmanager.h b/src/checkmanager.h index ffa54930..21061d06 100644 --- a/src/checkmanager.h +++ b/src/checkmanager.h @@ -105,7 +105,7 @@ public: * Returns all the requested checks. * This is a union of the requested checks via env variable and via arguments passed to compiler */ - RegisteredCheck::List requestedChecks(const ClazyContext *context, std::vector<std::string> &args); + RegisteredCheck::List requestedChecks(std::vector<std::string> &args, bool qt4Compat); std::vector<std::pair<CheckBase*, RegisteredCheck>> createChecks(const RegisteredCheck::List &requestedChecks, ClazyContext *context); static void removeChecksFromList(RegisteredCheck::List &list, std::vector<std::string> &checkNames); |