[clang-tools-extra] r260217 - [clang-tidy] Make readability-container-size-empty work with inline namespaces. Fix PR25812.

Alexander Kornienko via cfe-commits cfe-commits at lists.llvm.org
Tue Feb 9 03:54:51 PST 2016


I think, we need to add a `hasAnyName()` matcher that would take a list of
names.

On Tue, Feb 9, 2016 at 11:20 AM, Gabor Horvath via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> 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 at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160209/76731ce3/attachment.html>


More information about the cfe-commits mailing list