[PATCH] D89936: [clang-tidy] adding "--clang-tidy-config=<file-path>" to specify custom config file
Hiral via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 27 10:05:50 PDT 2020
Hiralo updated this revision to Diff 301047.
Hiralo added a comment.
Latest patch with lit test.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D89936/new/
https://reviews.llvm.org/D89936
Files:
clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
clang-tools-extra/test/clang-tidy/infrastructure/config-file.cpp
Index: clang-tools-extra/test/clang-tidy/infrastructure/config-file.cpp
===================================================================
--- /dev/null
+++ clang-tools-extra/test/clang-tidy/infrastructure/config-file.cpp
@@ -0,0 +1,12 @@
+// REQUIRES: shell
+// RUN: mkdir -p %T/config-file/
+// RUN: cp %s %T/read-file-config/test.cpp
+// RUN: echo 'Checks: "-*,hicpp-uppercase-literal-suffix"' > %T/read-file-config/.clang-tidy
+// RUN: clang-tidy --config-file=%T/read-file-config/.clang-tidy %T/read-file-config/test.cpp | grep "warning: .*\[hicpp-uppercase-literal-suffix\]$"
+
+void f() {
+ unsigned long c = 100ull;
+ int x;
+ x = 1;
+ x = 2;
+}
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
@@ -73,6 +73,14 @@
)"),
cl::init(""), cl::cat(ClangTidyCategory));
+static cl::opt<std::string> ConfigFile("config-file", cl::desc(R"(
+Specify full path of .clang-tidy or custom config file.
+For example, --config-file=/some/path/myTidyConfig
+Note: this option is mutually exclusive to --config and --checks options.
+)"),
+ cl::init(""),
+ cl::cat(ClangTidyCategory));
+
static cl::opt<std::string> WarningsAsErrors("warnings-as-errors", cl::desc(R"(
Upgrades warnings to errors. Same format as
'-checks'.
@@ -279,6 +287,7 @@
ClangTidyOptions DefaultOptions;
DefaultOptions.Checks = DefaultChecks;
+ DefaultOptions.ConfigFile = "";
DefaultOptions.WarningsAsErrors = "";
DefaultOptions.HeaderFilterRegex = HeaderFilter;
DefaultOptions.SystemHeaders = SystemHeaders;
@@ -291,6 +300,8 @@
ClangTidyOptions OverrideOptions;
if (Checks.getNumOccurrences() > 0)
OverrideOptions.Checks = Checks;
+ if (ConfigFile.getNumOccurrences() > 0)
+ OverrideOptions.ConfigFile = ConfigFile;
if (WarningsAsErrors.getNumOccurrences() > 0)
OverrideOptions.WarningsAsErrors = WarningsAsErrors;
if (HeaderFilter.getNumOccurrences() > 0)
@@ -302,6 +313,30 @@
if (UseColor.getNumOccurrences() > 0)
OverrideOptions.UseColor = UseColor;
+ if (!ConfigFile.empty()) {
+ if (!Config.empty()) {
+ llvm::errs() << "Error: --config-file and --config are mutually "
+ "exclusive. Specify only one.\n";
+ return nullptr;
+ }
+
+ if (!Checks.empty()) {
+ llvm::errs() << "Error: --config-file and --checks are mutually "
+ "exclusive. Specify only one.\n";
+ return nullptr;
+ }
+
+ llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> Text =
+ llvm::MemoryBuffer::getFile(ConfigFile.c_str());
+ if (std::error_code EC = Text.getError()) {
+ llvm::errs() << "Can't read config-file '" << ConfigFile
+ << "': " << EC.message() << "\n";
+ return nullptr;
+ }
+
+ Config.assign((*Text)->getBuffer());
+ }
+
if (!Config.empty()) {
if (llvm::ErrorOr<ClangTidyOptions> ParsedConfig =
parseConfiguration(Config)) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D89936.301047.patch
Type: text/x-patch
Size: 3187 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201027/1d42a210/attachment.bin>
More information about the cfe-commits
mailing list