-
Notifications
You must be signed in to change notification settings - Fork 13.5k
[clang-tidy] Check number of arguments to size/length in readability-container-size-empty #93724
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[clang-tidy] Check number of arguments to size/length in readability-container-size-empty #93724
Conversation
…container-size-empty Verify that size/length methods are called with no arguments. Closes llvm#88203
@llvm/pr-subscribers-clang-tools-extra @llvm/pr-subscribers-clang-tidy Author: Piotr Zegar (PiotrZSL) ChangesVerify that size/length methods are called with no arguments. Closes #88203 Full diff: https://github.com/llvm/llvm-project/pull/93724.diff 3 Files Affected:
diff --git a/clang-tools-extra/clang-tidy/readability/ContainerSizeEmptyCheck.cpp b/clang-tools-extra/clang-tidy/readability/ContainerSizeEmptyCheck.cpp
index 19307b4cdcbe3..bbc1b47b97ae6 100644
--- a/clang-tools-extra/clang-tidy/readability/ContainerSizeEmptyCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/ContainerSizeEmptyCheck.cpp
@@ -150,6 +150,7 @@ void ContainerSizeEmptyCheck::registerMatchers(MatchFinder *Finder) {
Finder->addMatcher(
cxxMemberCallExpr(
+ argumentCountIs(0),
on(expr(anyOf(hasType(ValidContainer),
hasType(pointsTo(ValidContainer)),
hasType(references(ValidContainer))))
@@ -163,7 +164,8 @@ void ContainerSizeEmptyCheck::registerMatchers(MatchFinder *Finder) {
this);
Finder->addMatcher(
- callExpr(has(cxxDependentScopeMemberExpr(
+ callExpr(argumentCountIs(0),
+ has(cxxDependentScopeMemberExpr(
hasObjectExpression(
expr(anyOf(hasType(ValidContainer),
hasType(pointsTo(ValidContainer)),
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 3e3195f6f6813..a5d037d7fa036 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -363,6 +363,10 @@ Changes in existing checks
<clang-tidy/checks/readability/const-return-type>` check to eliminate false
positives when returning types with const not at the top level.
+- Improved :doc:`readability-container-size-empty
+ <clang-tidy/checks/readability/container-size-empty>` check to prevent false
+ positives when utilizing ``size`` or ``length`` methods that accept parameter.
+
- Improved :doc:`readability-duplicate-include
<clang-tidy/checks/readability/duplicate-include>` check by excluding include
directives that form the filename using macro.
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/container-size-empty.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/container-size-empty.cpp
index 84bdbd58b85e9..ecaf97fa348cc 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability/container-size-empty.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/container-size-empty.cpp
@@ -861,3 +861,31 @@ namespace PR72619 {
if (0 >= s.size()) {}
}
}
+
+namespace PR88203 {
+ struct SS {
+ bool empty() const;
+ int size() const;
+ int length(int) const;
+ };
+
+ struct SU {
+ bool empty() const;
+ int size(int) const;
+ int length() const;
+ };
+
+ void f(const SS& s) {
+ if (0 == s.length(1)) {}
+ if (0 == s.size()) {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: the 'empty' method should be used to check for emptiness instead of 'size' [readability-container-size-empty]
+ // CHECK-FIXES: {{^ }}if (s.empty()) {}{{$}}
+ }
+
+ void f(const SU& s) {
+ if (0 == s.size(1)) {}
+ if (0 == s.length()) {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: the 'empty' method should be used to check for emptiness instead of 'length' [readability-container-size-empty]
+ // CHECK-FIXES: {{^ }}if (s.empty()) {}{{$}}
+ }
+}
|
I'm not 100% sure about release-notes entry. If it shouldn't say that check is restricted now to zero-argument size/length. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not 100% sure about release-notes entry. If it shouldn't say that check is restricted now to zero-argument size/length.
I'd use the release note as it is. Or what is your concern with it?
Verify that size/length methods are called with no arguments.
Closes #88203