Hiralo updated this revision to Diff 300911. Hiralo marked an inline comment as done. Hiralo added a comment.
Incorporated review comments and updated patch. (a) renamed var 'ClangTidyConfig' with 'ConfigFile' (b) renamed function 'tryReadConfigFile(AbsoluteFilePath, true);' to 'readConfigFile(ConfigPath)' (c) renamed command-line option to '--config-file' (d) made --config-file and --checks mutually exclusive (e) make --config-file and --config mutually exclusive (f) removed extra checks -- making absolute-path, isFile and isLink checks CHANGES SINCE LAST ACTION https://reviews.llvm.org/D89936/new/ https://reviews.llvm.org/D89936 Files: clang-tools-extra/clang-tidy/ClangTidyOptions.cpp clang-tools-extra/clang-tidy/ClangTidyOptions.h clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
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,12 +73,13 @@ )"), cl::init(""), cl::cat(ClangTidyCategory)); -static cl::opt<std::string> ClangTidyConfig("clang-tidy-config", cl::desc(R"( -Specify full path of .clang-tidy config file. -For example, --clang-tidy-config=/some/path/myTidyConfig +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)); + cl::init(""), + cl::cat(ClangTidyCategory)); static cl::opt<std::string> WarningsAsErrors("warnings-as-errors", cl::desc(R"( Upgrades warnings to errors. Same format as @@ -286,7 +287,7 @@ ClangTidyOptions DefaultOptions; DefaultOptions.Checks = DefaultChecks; - DefaultOptions.ClangTidyConfig = ""; + DefaultOptions.ConfigFile = ""; DefaultOptions.WarningsAsErrors = ""; DefaultOptions.HeaderFilterRegex = HeaderFilter; DefaultOptions.SystemHeaders = SystemHeaders; @@ -299,8 +300,8 @@ ClangTidyOptions OverrideOptions; if (Checks.getNumOccurrences() > 0) OverrideOptions.Checks = Checks; - if (ClangTidyConfig.getNumOccurrences() > 0) - OverrideOptions.ClangTidyConfig = ClangTidyConfig; + if (ConfigFile.getNumOccurrences() > 0) + OverrideOptions.ConfigFile = ConfigFile; if (WarningsAsErrors.getNumOccurrences() > 0) OverrideOptions.WarningsAsErrors = WarningsAsErrors; if (HeaderFilter.getNumOccurrences() > 0) @@ -312,6 +313,19 @@ 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; + } + } + if (!Config.empty()) { if (llvm::ErrorOr<ClangTidyOptions> ParsedConfig = parseConfiguration(Config)) { Index: clang-tools-extra/clang-tidy/ClangTidyOptions.h =================================================================== --- clang-tools-extra/clang-tidy/ClangTidyOptions.h +++ clang-tools-extra/clang-tidy/ClangTidyOptions.h @@ -65,7 +65,7 @@ llvm::Optional<std::string> Checks; /// Clang-tidy-config - llvm::Optional<std::string> ClangTidyConfig; + llvm::Optional<std::string> ConfigFile; /// WarningsAsErrors filter. llvm::Optional<std::string> WarningsAsErrors; @@ -230,8 +230,10 @@ /// Try to read configuration files from \p Directory using registered /// \c ConfigHandlers. llvm::Optional<OptionsSource> tryReadConfigFile(llvm::StringRef Directory); - llvm::Optional<OptionsSource> tryReadConfigFile(llvm::StringRef Path, - bool IsFile); + + /// Try to read configuration files using registered + /// \c ConfigHandlers. + llvm::Optional<OptionsSource> readConfigFile(llvm::StringRef Path); llvm::StringMap<OptionsSource> CachedOptions; ClangTidyOptions OverrideOptions; Index: clang-tools-extra/clang-tidy/ClangTidyOptions.cpp =================================================================== --- clang-tools-extra/clang-tidy/ClangTidyOptions.cpp +++ clang-tools-extra/clang-tidy/ClangTidyOptions.cpp @@ -109,7 +109,7 @@ ClangTidyOptions ClangTidyOptions::getDefaults() { ClangTidyOptions Options; Options.Checks = ""; - Options.ClangTidyConfig = ""; + Options.ConfigFile = ""; Options.WarningsAsErrors = ""; Options.HeaderFilterRegex = ""; Options.SystemHeaders = false; @@ -307,42 +307,19 @@ << "...\n"); assert(FS && "FS must be set."); - llvm::SmallString<1024> AbsoluteFilePath(FileName); - if (!OverrideOptions.ClangTidyConfig.getValue().empty()) { - AbsoluteFilePath.assign(OverrideOptions.ClangTidyConfig.getValue()); - if (FS->makeAbsolute(AbsoluteFilePath)) { - std::string Msg; - llvm::raw_string_ostream ErrStream(Msg); - ErrStream << " reading configuration from <" << AbsoluteFilePath - << "> can't make absolute path.\n"; - llvm::report_fatal_error(ErrStream.str()); - } - bool IsFile = false; - bool IsLink = false; - llvm::sys::fs::is_regular_file(Twine(AbsoluteFilePath), IsFile); - llvm::sys::fs::is_symlink_file(Twine(AbsoluteFilePath), IsLink); - if (!(IsFile || IsLink)) { - std::string Msg; - llvm::raw_string_ostream ErrStream(Msg); - ErrStream << " reading configuration from <" << AbsoluteFilePath - << "> file doesn't exist or not regular/symlink file.\n"; - llvm::report_fatal_error(ErrStream.str()); - } - - std::vector<OptionsSource> RawOptions = - DefaultOptionsProvider::getRawOptions(AbsoluteFilePath.str()); - OptionsSource CommandLineOptions(OverrideOptions, - OptionsSourceTypeCheckCommandLineOption); - + if (!OverrideOptions.ConfigFile.getValue().empty()) { + llvm::SmallString<1024> ConfigPath(OverrideOptions.ConfigFile.getValue()); + std::vector<OptionsSource> RawOptions; llvm::Optional<OptionsSource> Result; - Result = tryReadConfigFile(AbsoluteFilePath, true); + Result = readConfigFile(ConfigPath); if (Result) { RawOptions.push_back(*Result); } - RawOptions.push_back(CommandLineOptions); return RawOptions; } + llvm::SmallString<128> AbsoluteFilePath(FileName); + if (FS->makeAbsolute(AbsoluteFilePath)) return {}; @@ -404,15 +381,9 @@ } llvm::Optional<OptionsSource> -FileOptionsProvider::tryReadConfigFile(StringRef Path, bool IsFile) { - // llvm::outs() << "tryReadConfigFile IsFile<" << - // OverrideOptions.ClangTidyConfig << ">\n"; +FileOptionsProvider::readConfigFile(StringRef Path) { assert(!Path.empty()); - if (!IsFile) { - tryReadConfigFile(Path); - } - llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> Text = llvm::MemoryBuffer::getFile(Path); if (std::error_code EC = Text.getError()) {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits