Author: xazax Date: Tue Feb 9 04:20:48 2016 New Revision: 260217 URL: http://llvm.org/viewvc/llvm-project?rev=260217&view=rev Log: [clang-tidy] Make readability-container-size-empty work with inline namespaces. Fix PR25812.
Modified: clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.cpp clang-tools-extra/trunk/test/clang-tidy/readability-container-size-empty.cpp Modified: clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.cpp?rev=260217&r1=260216&r2=260217&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.cpp Tue Feb 9 04:20:48 2016 @@ -14,23 +14,23 @@ using namespace clang::ast_matchers; -static bool isContainer(llvm::StringRef ClassName) { - static const char *const ContainerNames[] = {"std::array", - "std::deque", - "std::forward_list", - "std::list", - "std::map", - "std::multimap", - "std::multiset", - "std::priority_queue", - "std::queue", - "std::set", - "std::stack", - "std::unordered_map", - "std::unordered_multimap", - "std::unordered_multiset", - "std::unordered_set", - "std::vector"}; +static bool isContainerName(llvm::StringRef ClassName) { + static const char *const ContainerNames[] = {"array", + "deque", + "forward_list", + "list", + "map", + "multimap", + "multiset", + "priority_queue", + "queue", + "set", + "stack", + "unordered_map", + "unordered_multimap", + "unordered_multiset", + "unordered_set", + "vector"}; return std::binary_search(std::begin(ContainerNames), std::end(ContainerNames), ClassName); } @@ -38,7 +38,10 @@ static bool isContainer(llvm::StringRef namespace clang { namespace { AST_MATCHER(NamedDecl, stlContainer) { - return isContainer(Node.getQualifiedNameAsString()); + if (!isContainerName(Node.getName())) + return false; + + return StringRef(Node.getQualifiedNameAsString()).startswith("std::"); } } // namespace Modified: clang-tools-extra/trunk/test/clang-tidy/readability-container-size-empty.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/readability-container-size-empty.cpp?rev=260217&r1=260216&r2=260217&view=diff ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/readability-container-size-empty.cpp (original) +++ clang-tools-extra/trunk/test/clang-tidy/readability-container-size-empty.cpp Tue Feb 9 04:20:48 2016 @@ -2,17 +2,32 @@ namespace std { template <typename T> struct vector { - vector() {} + vector(); unsigned long size() const; bool empty() const; }; + +inline namespace __v2 { +template <typename T> struct set { + set(); + unsigned long size() const; + bool empty() const; +}; +} + + } int main() { + std::set<int> intSet; + if (intSet.size() == 0) + ; + // CHECK-MESSAGES: :[[@LINE-2]]:7: warning: the 'empty' method should be used to check for emptiness instead of 'size' [readability-container-size-empty] + // CHECK-FIXES: {{^ }}if (intSet.empty()){{$}} std::vector<int> vect; if (vect.size() == 0) ; - // CHECK-MESSAGES: :[[@LINE-2]]:7: warning: the 'empty' method should be used to check for emptiness instead of 'size' [readability-container-size-empty] + // CHECK-MESSAGES: :[[@LINE-2]]:7: warning: the 'empty' method should be used // CHECK-FIXES: {{^ }}if (vect.empty()){{$}} if (vect.size() != 0) ; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits