aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2019-09-11 10:56:35 +0200
committerNikolai Kosjar <nikolai.kosjar@qt.io>2019-09-13 16:22:59 +0200
commite0bcef5451fe993b2149b525b62b885a6cd31363 (patch)
tree230f5fe6e31812fffad74ff94337466638847327 /src
parentf23173b01197c1ab9639c378c9684babb72e9c31 (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.cpp6
-rw-r--r--src/ClazyStandaloneMain.cpp20
-rw-r--r--src/checkmanager.cpp4
-rw-r--r--src/checkmanager.h2
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);