[clang-tidy] Default options in modules.
Summary: This patch allows modules to specify default options for the checks defined in them. This way a sufficiently configurable check can be registered in multiple modules with different default options. E.g. the SpacesBeforeComments option may be set to 1 for the "llvm-namespace-comments" check and to 2 for the "google-readability-namespace-comment" check without modifying or extending the check code. This patch also registers the google-readability-braces-around-statements check with suitable defaults. Reviewers: djasper Reviewed By: djasper Subscribers: curdeius, cfe-commits Differential Revision: http://reviews.llvm.org/D5798 git-svn-id: https://llvm.org/svn/llvm-project/clang-tools-extra/trunk@219923 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
48e17803cf
Коммит
91fddd15a2
|
@ -31,5 +31,9 @@ void ClangTidyCheckFactories::createChecks(
|
|||
}
|
||||
}
|
||||
|
||||
ClangTidyOptions ClangTidyModule::getModuleOptions() {
|
||||
return ClangTidyOptions();
|
||||
}
|
||||
|
||||
} // namespace tidy
|
||||
} // namespace clang
|
||||
|
|
|
@ -87,6 +87,9 @@ public:
|
|||
/// \brief Implement this function in order to register all \c CheckFactories
|
||||
/// belonging to this module.
|
||||
virtual void addCheckFactories(ClangTidyCheckFactories &CheckFactories) = 0;
|
||||
|
||||
/// \brief Gets default options for checks defined in this module.
|
||||
virtual ClangTidyOptions getModuleOptions();
|
||||
};
|
||||
|
||||
} // end namespace tidy
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "ClangTidyOptions.h"
|
||||
#include "ClangTidyModuleRegistry.h"
|
||||
#include "clang/Basic/LLVM.h"
|
||||
#include "llvm/ADT/SmallString.h"
|
||||
#include "llvm/Support/Errc.h"
|
||||
|
@ -96,6 +97,19 @@ template <> struct MappingTraits<ClangTidyOptions> {
|
|||
namespace clang {
|
||||
namespace tidy {
|
||||
|
||||
ClangTidyOptions ClangTidyOptions::getDefaults() {
|
||||
ClangTidyOptions Options;
|
||||
Options.Checks = "";
|
||||
Options.HeaderFilterRegex = "";
|
||||
Options.AnalyzeTemporaryDtors = false;
|
||||
Options.User = llvm::None;
|
||||
for (ClangTidyModuleRegistry::iterator I = ClangTidyModuleRegistry::begin(),
|
||||
E = ClangTidyModuleRegistry::end();
|
||||
I != E; ++I)
|
||||
Options = Options.mergeWith(I->instantiate()->getModuleOptions());
|
||||
return Options;
|
||||
}
|
||||
|
||||
ClangTidyOptions
|
||||
ClangTidyOptions::mergeWith(const ClangTidyOptions &Other) const {
|
||||
ClangTidyOptions Result = *this;
|
||||
|
|
|
@ -49,15 +49,10 @@ struct ClangTidyOptions {
|
|||
/// \brief These options are used for all settings that haven't been
|
||||
/// overridden by the \c OptionsProvider.
|
||||
///
|
||||
/// Allow no checks and no headers by default.
|
||||
static ClangTidyOptions getDefaults() {
|
||||
ClangTidyOptions Options;
|
||||
Options.Checks = "";
|
||||
Options.HeaderFilterRegex = "";
|
||||
Options.AnalyzeTemporaryDtors = false;
|
||||
Options.User = llvm::None;
|
||||
return Options;
|
||||
}
|
||||
/// Allow no checks and no headers by default. This method initializes
|
||||
/// check-specific options by calling \c ClangTidyModule::getModuleOptions()
|
||||
/// of each registered \c ClangTidyModule.
|
||||
static ClangTidyOptions getDefaults();
|
||||
|
||||
/// \brief Creates a new \c ClangTidyOptions instance combined from all fields
|
||||
/// of this instance overridden by the fields of \p Other that have a value.
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include "TodoCommentCheck.h"
|
||||
#include "UnnamedNamespaceInHeaderCheck.h"
|
||||
#include "UsingNamespaceDirectiveCheck.h"
|
||||
#include "../readability/BracesAroundStatementsCheck.h"
|
||||
#include "../readability/NamespaceCommentCheck.h"
|
||||
|
||||
using namespace clang::ast_matchers;
|
||||
|
@ -55,6 +56,18 @@ public:
|
|||
"google-readability-todo");
|
||||
CheckFactories.registerCheck<readability::NamespaceCommentCheck>(
|
||||
"google-readability-namespace-comments");
|
||||
CheckFactories.registerCheck<readability::BracesAroundStatementsCheck>(
|
||||
"google-readability-braces-around-statements");
|
||||
}
|
||||
|
||||
ClangTidyOptions getModuleOptions() override {
|
||||
ClangTidyOptions Options;
|
||||
auto &Opts = Options.CheckOptions;
|
||||
Opts["google-readability-braces-around-statements.ShortStatementLines"] =
|
||||
"1";
|
||||
Opts["google-readability-namespace-comments.ShortNamespaceLines"] = "1";
|
||||
Opts["google-readability-namespace-comments.SpacesBeforeComments"] = "2";
|
||||
return Options;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -26,8 +26,7 @@ NamespaceCommentCheck::NamespaceCommentCheck(StringRef Name,
|
|||
"namespace( +([a-zA-Z0-9_]+))? *(\\*/)?$",
|
||||
llvm::Regex::IgnoreCase),
|
||||
ShortNamespaceLines(Options.get("ShortNamespaceLines", 1u)),
|
||||
SpacesBeforeComments(Options.get("SpacesBeforeComments",
|
||||
Name.startswith("google") ? 2u : 1u)) {}
|
||||
SpacesBeforeComments(Options.get("SpacesBeforeComments", 1u)) {}
|
||||
|
||||
void NamespaceCommentCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
|
||||
Options.store(Opts, "ShortNamespaceLines", ShortNamespaceLines);
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
// RUN: clang-tidy -checks='-*,google*' -config='{}' -dump-config - -- | FileCheck %s
|
||||
// CHECK: CheckOptions:
|
||||
// CHECK: {{- key: *google-readability-braces-around-statements.ShortStatementLines}}
|
||||
// CHECK-NEXT: {{value: *'1'}}
|
||||
// CHECK: {{- key: *google-readability-namespace-comments.ShortNamespaceLines}}
|
||||
// CHECK-NEXT: {{value: *'1'}}
|
||||
// CHECK: {{- key: *google-readability-namespace-comments.SpacesBeforeComments}}
|
||||
// CHECK-NEXT: {{value: *'2'}}
|
Загрузка…
Ссылка в новой задаче