The check seems to be rather useful. Thank you for working on contributing it 
to ClangTidy!

The code is mostly fine, but there are a bunch of style issues. Please see the 
comments inline.


================
Comment at: clang-tidy/readability/ContainerSizeEmpty.cpp:22
@@ +21,3 @@
+namespace {
+const std::set<std::string> containerNames = {
+    "std::vector", "std::list", "std::array", "std::deque", 
"std::forward_list",
----------------
I'm afraid this won't compile on one of the supported toolchains: MSVS 2013. 
But I can't verify this myself.

Also, you could use llvm::StringSet<> instead, as it's more efficient.

================
Comment at: clang-tidy/readability/ContainerSizeEmpty.cpp:29
@@ +28,3 @@
+
+bool isContainer(const std::string &className) {
+  return containerNames.find(className) != containerNames.end();
----------------
Please use StringRef instead of "const std::string &".

================
Comment at: clang-tidy/readability/ContainerSizeEmpty.cpp:86
@@ +85,3 @@
+void ContainerSizeEmptyCheck::check(const MatchFinder::MatchResult &Result) {
+
+  const CXXMemberCallExpr *MC =
----------------
nit: Please remove the empty line.

================
Comment at: clang-tidy/readability/ContainerSizeEmpty.cpp:87
@@ +86,3 @@
+
+  const CXXMemberCallExpr *MC =
+      Result.Nodes.getNodeAs<CXXMemberCallExpr>("SizeCallExpr");
----------------
Looks like a valid use case for "auto". The type is already spelled in the 
initializer.

================
Comment at: clang-tidy/readability/ContainerSizeEmpty.cpp:87
@@ +86,3 @@
+
+  const CXXMemberCallExpr *MC =
+      Result.Nodes.getNodeAs<CXXMemberCallExpr>("SizeCallExpr");
----------------
alexfh wrote:
> Looks like a valid use case for "auto". The type is already spelled in the 
> initializer.
"MC" is too cryptic. Maybe "Call" or "MemberCall"? The variable is only used 
twice, so this won't increase the code size a lot.

================
Comment at: clang-tidy/readability/ContainerSizeEmpty.cpp:89
@@ +88,3 @@
+      Result.Nodes.getNodeAs<CXXMemberCallExpr>("SizeCallExpr");
+  const BinaryOperator *BOP =
+      Result.Nodes.getNodeAs<BinaryOperator>("SizeBinaryOp");
----------------
Maybe "BinaryOperator" or "BinaryOp"?

================
Comment at: clang-tidy/readability/ContainerSizeEmpty.cpp:92
@@ +91,3 @@
+  const Expr *E = Result.Nodes.getNodeAs<Expr>("STLObject");
+  FixItHint hint;
+  std::string ReplacementText =
----------------
nit: Variable names should be capitalized.

================
Comment at: clang-tidy/readability/ContainerSizeEmpty.cpp:101
@@ +100,3 @@
+
+  if (BOP) { // Determine the correct transformation
+    bool Negation = false;
----------------
nit: Here and in other places: please end sentences with a period.

================
Comment at: clang-tidy/readability/ContainerSizeEmpty.cpp:103
@@ +102,3 @@
+    bool Negation = false;
+    const bool ContIsLHS = !llvm::isa<IntegerLiteral>(BOP->getLHS());
+    const auto OpCode = BOP->getOpcode();
----------------
Did you mean "ConstIsLHS"?

================
Comment at: clang-tidy/readability/ContainerSizeEmpty.cpp:107
@@ +106,3 @@
+    if (ContIsLHS) {
+      if (IntegerLiteral *LIT = llvm::dyn_cast<IntegerLiteral>(BOP->getRHS()))
+        Value = LIT->getValue().getLimitedValue();
----------------
"LIT" doesn't seem to be an acronym here, so I'd better rename it to "Literal" 
or something like that.

================
Comment at: clang-tidy/readability/ContainerSizeEmpty.cpp:141
@@ +140,3 @@
+
+  } else { // If there is a conversion above the size call to bool, it is safe
+           // to just replace size with empty
----------------
nit: I'd move the comment to the next line.

================
Comment at: clang-tidy/readability/ContainerSizeEmpty.h:19
@@ +18,3 @@
+
+/// \brief Checks that whether a size method call can be replaced by empty
+/// 
----------------
nits:
1. Sentences should end with a period.
2. s/that //
3. Please use Doxygen tags for function, class and variable names.

How about:
  Checks whether a call to the \c size() method on a container can be replaced 
with a call to \c empty().

================
Comment at: clang-tidy/readability/ContainerSizeEmpty.h:21
@@ +20,3 @@
+/// 
+/// The emptiness of a container should be checked using the empty method
+/// instead of the size method. It is not guaranteed that size is a
----------------
Please mark method names with the \c Doxygen tag:
  ... using the \c empty() method instead of the \c size() method.

================
Comment at: modularize/ModuleAssistant.cpp:71
@@ -70,3 +70,3 @@
   // Free submodules.
-  while (SubModules.size()) {
+  while (!SubModules.empty()) {
     Module *last = SubModules.back();
----------------
Please send cleanups as a separate patch.

================
Comment at: test/clang-tidy/readibility-container-size-empty.cpp:18
@@ +17,3 @@
+  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: The 'empty' method should be 
used to check for emptiness instead of 'size'. 
[readability-container-size-empty]
+  // CHECK-FIXES: vect.empty()
+       if(vect.size() != 0);
----------------
Please make the CHECK-FIXES lines as specific as possible to avoid incorrect 
matches. E.g.:

  // CHECK-FIXES: {{^  }}if(vect.size() == 0);

================
Comment at: test/clang-tidy/readibility-container-size-empty.cpp:20
@@ +19,3 @@
+       if(vect.size() != 0);
+  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: The 'empty' method should be 
used to check for emptiness instead of 'size'. 
[readability-container-size-empty]
+  // CHECK-FIXES: !vect.empty()
----------------
You can truncate the message in all the CHECK-MESSAGES lines after the first 
one. E.g.:
  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: The 'empty' method should be used

================
Comment at: test/clang-tidy/readibility-container-size-empty.cpp:71
@@ +70,2 @@
+  // CHECK-FIXES: vect4.empty()
+}
----------------
Please a couple of tests with templates and macros. I suspect that they aren't 
yet handled correctly.

E.g.:

  template<typename T>
  void f() {
    std::vector<T> v;
    if (v.size()) {}
  }
  void g() {
    f<int>();
    f<double>();
    f<char*>();
  }

http://reviews.llvm.org/D6925

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to