aaron.ballman added inline comments.

================
Comment at: clang-tidy/fuchsia/AddVisibilityCheck.cpp:36-39
+  StringRef(Options.get("Names", "")).split(NamesRefs, ",");
+  for (const auto &Name : NamesRefs) {
+    if (!Name.empty()) Names.push_back(Name);
+  }
----------------
Rather than do this, you should use `parseStringList()` from `OptionsUtils.h`. 
This will also ensure you don't use the wrong separator (we use semi-colons for 
this, not commas).


================
Comment at: clang-tidy/fuchsia/AddVisibilityCheck.cpp:48
+               Stream << Names[0];
+       for (unsigned i = 1; i < Names.size(); ++i)
+               Stream << "," << Names[i];
----------------
You should use `serializeStringList()` for this.

See `InefficientVectorOperationCheck` for an example of parsing and serializing 
the string lists.


================
Comment at: clang-tidy/fuchsia/AddVisibilityCheck.cpp:56
+  for (const auto &Name : Names)
+    Finder->addMatcher(functionDecl(allOf(hasName(Name), isDefinition(),
+                                          unless(hasVisibilityAttr())))
----------------
Rather than a for loop, you can pass the list to `hasAnyName()`.


================
Comment at: clang-tidy/fuchsia/AddVisibilityCheck.cpp:63
+void AddVisibilityCheck::check(const MatchFinder::MatchResult &Result) {
+  for (const auto &Name : Names) {
+    if (const auto *MatchedDecl = Result.Nodes.getNodeAs<FunctionDecl>(Name)) {
----------------
Once you drop the for loop, you can pick a single name to bind to -- the 
`check()` function will be called once for each match anyway, so you don't need 
an explicit loop checking all of the name.


================
Comment at: clang-tidy/fuchsia/AddVisibilityCheck.cpp:65-66
+    if (const auto *MatchedDecl = Result.Nodes.getNodeAs<FunctionDecl>(Name)) {
+      std::string VisAttr =
+          ("__attribute__((visibility(\"" + Visibility + "\")))\n");
+      diag(MatchedDecl->getLocStart(),
----------------
You should use a `Twine` to construct this in place.


================
Comment at: clang-tidy/fuchsia/AddVisibilityCheck.cpp:68
+      diag(MatchedDecl->getLocStart(),
+           "visibility attribute not set for specified function")
+          << MatchedDecl
----------------
How about: "function expected to be annotated with '%0' visibility"

I'm mostly worried about the case where the function has a visibility 
attribute, but it has the *wrong* visibility specified. The current wording 
would be confusing in that circumstance. Or is that not a scenario you care 
about, just that *any* visibility is specified on the function?


================
Comment at: clang-tidy/fuchsia/AddVisibilityCheck.h:21
+/// Finds functions given a list of names and suggests a fix to add
+/// an _`_attribute__((visibility("VISIBILITY")))` to their definitions,
+/// if they do not already have a visibility attribute.
----------------
The backtick is in the wrong place.


https://reviews.llvm.org/D43392



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to