[PATCH] D77085: [clang-tidy] Added support for validating configuration options

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Apr 3 09:41:02 PDT 2020


aaron.ballman added a comment.

Thank you for working on this, I think it's going to be a very useful interface!



================
Comment at: clang-tools-extra/clang-tidy/ClangTidyCheck.cpp:25
+  llvm::raw_svector_ostream Output(Buffer);
+  Output << "warning: Option not found '" << OptionName << "'\n";
+  return std::string(Buffer);
----------------
I think the diagnostic text should probably not start with a capital letter. Also, the name of the classes are confusing in that they say error but the diagnostic is a warning. When I hear "error", the class name makes me think this would stop compilation and give a nonzero result code from the program.


================
Comment at: clang-tools-extra/clang-tidy/ClangTidyCheck.cpp:108-113
+  if (CheckGlobal && Iter == CheckOptions.end()) {
+    Iter = CheckOptions.find(LocalName.str());
+  }
+  if (Iter == CheckOptions.end()) {
+    return llvm::make_error<MissingOptionError>((NamePrefix + LocalName).str());
+  }
----------------
Elide braces


================
Comment at: clang-tools-extra/clang-tidy/ClangTidyCheck.cpp:122-124
+    } else if (Value.equals(NameAndEnum.first))
+      return NameAndEnum.second;
+    else if (Value.equals_lower(NameAndEnum.first)) {
----------------
Preference to add the braces to this case because the surrounding ones do as well.


================
Comment at: clang-tools-extra/clang-tidy/ClangTidyCheck.h:41
+public:
+  MissingOptionError(std::string OptionName) : OptionName(OptionName) {}
+
----------------
Make the constructor `explicit`? (May want to consider the same for the other ctors, but this one seems more dangerous.)


================
Comment at: clang-tools-extra/clang-tidy/ClangTidyCheck.h:197
+    std::string get(StringRef LocalName, StringRef Default) const {
+      if (auto Val = get(LocalName))
+        return *Val;
----------------
Don't use `auto` as the type is not spelled out.


================
Comment at: clang-tools-extra/clang-tidy/ClangTidyCheck.h:201
+        llvm::consumeError(Val.takeError());
+      return std::string(Default);
+    }
----------------
`Default.str()` instead?


================
Comment at: clang-tools-extra/clang-tidy/ClangTidyCheck.h:219-223
+      if (auto Val = getLocalOrGlobal(LocalName))
+        return *Val;
+      else
+        llvm::consumeError(Val.takeError());
+      return std::string(Default);
----------------
Same here as above.


================
Comment at: clang-tools-extra/clang-tidy/ClangTidyCheck.h:280
+        ValueOr = getLocalOrGlobal(LocalName);
+        if (!ValueOr) {
+          return std::move(ValueOr.takeError());
----------------
Elide braces


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77085/new/

https://reviews.llvm.org/D77085





More information about the cfe-commits mailing list