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

Reply via email to