From b5ca17f817c066766424a91c2eed97ba4d52eba2 Mon Sep 17 00:00:00 2001 From: Alexander Kornienko Date: Wed, 21 Dec 2016 23:44:23 +0000 Subject: [PATCH] [clang-tidy] Ignore `size() == 0` in the container implementation. llvm-svn: 290289 --- .../clang-tidy/readability/ContainerSizeEmptyCheck.cpp | 4 +++- .../test/clang-tidy/readability-container-size-empty.cpp | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/clang-tools-extra/clang-tidy/readability/ContainerSizeEmptyCheck.cpp b/clang-tools-extra/clang-tidy/readability/ContainerSizeEmptyCheck.cpp index 79e4061..665d1db 100644 --- a/clang-tools-extra/clang-tidy/readability/ContainerSizeEmptyCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/ContainerSizeEmptyCheck.cpp @@ -58,7 +58,9 @@ void ContainerSizeEmptyCheck::registerMatchers(MatchFinder *Finder) { hasType(pointsTo(ValidContainer)), hasType(references(ValidContainer)))) .bind("STLObject")), - callee(cxxMethodDecl(hasName("size"))), WrongUse) + callee(cxxMethodDecl(hasName("size"))), WrongUse, + unless(hasAncestor(cxxMethodDecl( + ofClass(equalsBoundNode("container")))))) .bind("SizeCallExpr"), this); } diff --git a/clang-tools-extra/test/clang-tidy/readability-container-size-empty.cpp b/clang-tools-extra/test/clang-tidy/readability-container-size-empty.cpp index 8cf332b..6e6c90f 100644 --- a/clang-tools-extra/test/clang-tidy/readability-container-size-empty.cpp +++ b/clang-tools-extra/test/clang-tidy/readability-container-size-empty.cpp @@ -61,6 +61,20 @@ public: class Derived : public Container { }; +class Container2 { +public: + int size() const; + bool empty() const { return size() == 0; } +}; + +class Container3 { +public: + int size() const; + bool empty() const; +}; + +bool Container3::empty() const { return this->size() == 0; } + int main() { std::set intSet; std::string str; -- 2.7.4