This revision was automatically updated to reflect the committed changes. Closed by commit rGd6a468d622b2: [clang-tidy] adding "--config-file=<file-path>" to specify custom config file. (authored by Hiralo, committed by DmitryPolukhin).
Repository: rG LLVM Github Monorepo 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/Inputs/config-file/config-file 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,2 @@ +// RUN: clang-tidy -config-file=%S/Inputs/config-file/config-file -dump-config -- | FileCheck %s -check-prefix=CHECK-BASE +// CHECK-BASE: Checks: {{.*}}hicpp-uppercase-literal-suffix Index: clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-file/config-file =================================================================== --- /dev/null +++ clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-file/config-file @@ -0,0 +1 @@ +Checks: "-*,hicpp-uppercase-literal-suffix" 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 @@ -168,6 +168,16 @@ )"), cl::init(""), cl::cat(ClangTidyCategory)); +static cl::opt<std::string> ConfigFile("config-file", cl::desc(R"( +Specify the path of .clang-tidy or custom config file: + e.g. --config-file=/some/path/myTidyConfigFile +This option internally works exactly the same way as + --config option after reading specified config file. +Use either --config-file or --config, not both. +)"), + cl::init(""), + cl::cat(ClangTidyCategory)); + static cl::opt<bool> DumpConfig("dump-config", cl::desc(R"( Dumps configuration in the YAML format to stdout. This option can be used along with a @@ -302,19 +312,41 @@ if (UseColor.getNumOccurrences() > 0) OverrideOptions.UseColor = UseColor; - if (!Config.empty()) { - if (llvm::ErrorOr<ClangTidyOptions> ParsedConfig = - parseConfiguration(Config)) { + auto LoadConfig = [&](StringRef Configuration) + -> std::unique_ptr<ClangTidyOptionsProvider> { + llvm::ErrorOr<ClangTidyOptions> ParsedConfig = + parseConfiguration(Configuration); + if (ParsedConfig) return std::make_unique<ConfigOptionsProvider>( GlobalOptions, ClangTidyOptions::getDefaults().mergeWith(DefaultOptions, 0), *ParsedConfig, OverrideOptions, std::move(FS)); - } else { - llvm::errs() << "Error: invalid configuration specified.\n" - << ParsedConfig.getError().message() << "\n"; + llvm::errs() << "Error: invalid configuration specified.\n" + << ParsedConfig.getError().message() << "\n"; + return nullptr; + }; + + if (ConfigFile.getNumOccurrences() > 0) { + if (Config.getNumOccurrences() > 0) { + llvm::errs() << "Error: --config-file and --config 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() << "Error: can't read config-file '" << ConfigFile + << "': " << EC.message() << "\n"; + return nullptr; + } + + return LoadConfig((*Text)->getBuffer()); } + + if (Config.getNumOccurrences() > 0) + return LoadConfig(Config); + return std::make_unique<FileOptionsProvider>(GlobalOptions, DefaultOptions, OverrideOptions, std::move(FS)); }
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,2 @@ +// RUN: clang-tidy -config-file=%S/Inputs/config-file/config-file -dump-config -- | FileCheck %s -check-prefix=CHECK-BASE +// CHECK-BASE: Checks: {{.*}}hicpp-uppercase-literal-suffix Index: clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-file/config-file =================================================================== --- /dev/null +++ clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-file/config-file @@ -0,0 +1 @@ +Checks: "-*,hicpp-uppercase-literal-suffix" 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 @@ -168,6 +168,16 @@ )"), cl::init(""), cl::cat(ClangTidyCategory)); +static cl::opt<std::string> ConfigFile("config-file", cl::desc(R"( +Specify the path of .clang-tidy or custom config file: + e.g. --config-file=/some/path/myTidyConfigFile +This option internally works exactly the same way as + --config option after reading specified config file. +Use either --config-file or --config, not both. +)"), + cl::init(""), + cl::cat(ClangTidyCategory)); + static cl::opt<bool> DumpConfig("dump-config", cl::desc(R"( Dumps configuration in the YAML format to stdout. This option can be used along with a @@ -302,19 +312,41 @@ if (UseColor.getNumOccurrences() > 0) OverrideOptions.UseColor = UseColor; - if (!Config.empty()) { - if (llvm::ErrorOr<ClangTidyOptions> ParsedConfig = - parseConfiguration(Config)) { + auto LoadConfig = [&](StringRef Configuration) + -> std::unique_ptr<ClangTidyOptionsProvider> { + llvm::ErrorOr<ClangTidyOptions> ParsedConfig = + parseConfiguration(Configuration); + if (ParsedConfig) return std::make_unique<ConfigOptionsProvider>( GlobalOptions, ClangTidyOptions::getDefaults().mergeWith(DefaultOptions, 0), *ParsedConfig, OverrideOptions, std::move(FS)); - } else { - llvm::errs() << "Error: invalid configuration specified.\n" - << ParsedConfig.getError().message() << "\n"; + llvm::errs() << "Error: invalid configuration specified.\n" + << ParsedConfig.getError().message() << "\n"; + return nullptr; + }; + + if (ConfigFile.getNumOccurrences() > 0) { + if (Config.getNumOccurrences() > 0) { + llvm::errs() << "Error: --config-file and --config 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() << "Error: can't read config-file '" << ConfigFile + << "': " << EC.message() << "\n"; + return nullptr; + } + + return LoadConfig((*Text)->getBuffer()); } + + if (Config.getNumOccurrences() > 0) + return LoadConfig(Config); + return std::make_unique<FileOptionsProvider>(GlobalOptions, DefaultOptions, OverrideOptions, std::move(FS)); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits