[clang-tools-extra] [clang-tidy] Add new modernize-use-starts-ends-with check (PR #72385)
https://github.com/PiotrZSL closed https://github.com/llvm/llvm-project/pull/72385 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] Add new modernize-use-starts-ends-with check (PR #72385)
nicovank wrote: Changed author to `@meta` in latest push, hopefully this fixes it... Didn't realise `@fb` was still default on my server. https://github.com/llvm/llvm-project/pull/72385 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] Add new modernize-use-starts-ends-with check (PR #72385)
https://github.com/nicovank updated https://github.com/llvm/llvm-project/pull/72385 >From 2b7748352281eb1dfa85cc8e4672488dfadee277 Mon Sep 17 00:00:00 2001 From: Nicolas van Kempen Date: Wed, 15 Nov 2023 01:13:10 -0800 Subject: [PATCH] [clang-tidy] Add new modernize-use-starts-ends-with check Match .find() and .rfind() calls compared to 0, and suggests replacing them with starts_with. --- .../abseil/StringFindStartswithCheck.h| 5 +- .../clang-tidy/modernize/CMakeLists.txt | 1 + .../modernize/ModernizeTidyModule.cpp | 3 + .../modernize/UseStartsEndsWithCheck.cpp | 109 .../modernize/UseStartsEndsWithCheck.h| 37 clang-tools-extra/docs/ReleaseNotes.rst | 7 + .../checks/abseil/string-find-startswith.rst | 4 + .../docs/clang-tidy/checks/list.rst | 1 + .../checks/modernize/use-starts-ends-with.rst | 22 +++ .../checkers/Inputs/Headers/stddef.h | 2 +- .../clang-tidy/checkers/Inputs/Headers/string | 16 +- .../abseil/string-find-startswith.cpp | 2 +- .../modernize/use-starts-ends-with.cpp| 167 ++ .../readability/container-size-empty.cpp | 4 +- 14 files changed, 374 insertions(+), 6 deletions(-) create mode 100644 clang-tools-extra/clang-tidy/modernize/UseStartsEndsWithCheck.cpp create mode 100644 clang-tools-extra/clang-tidy/modernize/UseStartsEndsWithCheck.h create mode 100644 clang-tools-extra/docs/clang-tidy/checks/modernize/use-starts-ends-with.rst create mode 100644 clang-tools-extra/test/clang-tidy/checkers/modernize/use-starts-ends-with.cpp diff --git a/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h b/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h index 923b5caece543..de3bd4d422200 100644 --- a/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h +++ b/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h @@ -21,7 +21,6 @@ namespace clang::tidy::abseil { // Find string.find(...) == 0 comparisons and suggest replacing with StartsWith. // FIXME(niko): Add similar check for EndsWith -// FIXME(niko): Add equivalent modernize checks for C++20's std::starts_With class StringFindStartswithCheck : public ClangTidyCheck { public: using ClangTidyCheck::ClangTidyCheck; @@ -31,6 +30,10 @@ class StringFindStartswithCheck : public ClangTidyCheck { void registerMatchers(ast_matchers::MatchFinder *Finder) override; void check(const ast_matchers::MatchFinder::MatchResult ) override; void storeOptions(ClangTidyOptions::OptionMap ) override; + bool isLanguageVersionSupported(const LangOptions ) const override { +// Prefer modernize-use-starts-ends-with when C++20 is available. +return LangOpts.CPlusPlus && !LangOpts.CPlusPlus20; + } private: const std::vector StringLikeClasses; diff --git a/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt b/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt index 717c400c47903..c40065358d2dc 100644 --- a/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt +++ b/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt @@ -38,6 +38,7 @@ add_clang_library(clangTidyModernizeModule UseNoexceptCheck.cpp UseNullptrCheck.cpp UseOverrideCheck.cpp + UseStartsEndsWithCheck.cpp UseStdPrintCheck.cpp UseTrailingReturnTypeCheck.cpp UseTransparentFunctorsCheck.cpp diff --git a/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp b/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp index 73751cf270506..e994ffd2a75c8 100644 --- a/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp +++ b/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp @@ -39,6 +39,7 @@ #include "UseNoexceptCheck.h" #include "UseNullptrCheck.h" #include "UseOverrideCheck.h" +#include "UseStartsEndsWithCheck.h" #include "UseStdPrintCheck.h" #include "UseTrailingReturnTypeCheck.h" #include "UseTransparentFunctorsCheck.h" @@ -66,6 +67,8 @@ class ModernizeModule : public ClangTidyModule { CheckFactories.registerCheck("modernize-make-shared"); CheckFactories.registerCheck("modernize-make-unique"); CheckFactories.registerCheck("modernize-pass-by-value"); +CheckFactories.registerCheck( +"modernize-use-starts-ends-with"); CheckFactories.registerCheck("modernize-use-std-print"); CheckFactories.registerCheck( "modernize-raw-string-literal"); diff --git a/clang-tools-extra/clang-tidy/modernize/UseStartsEndsWithCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseStartsEndsWithCheck.cpp new file mode 100644 index 0..062f6e9911dbe --- /dev/null +++ b/clang-tools-extra/clang-tidy/modernize/UseStartsEndsWithCheck.cpp @@ -0,0 +1,109 @@ +//===--- UseStartsEndsWithCheck.cpp - clang-tidy --===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +//
[clang-tools-extra] [clang-tidy] Add new modernize-use-starts-ends-with check (PR #72385)
PiotrZSL wrote: @nicovank Interesting, still shows fb as main email, most probably because commit were done from that one, you could try to change commit email and do force push, could help. Sad thing is that if you would have ability to click squash and merge, then it would show you option to select email, I do not have such option. https://github.com/llvm/llvm-project/pull/72385 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] Add new modernize-use-starts-ends-with check (PR #72385)
nicovank wrote: I've made it my primary email, if it's not an option, `@fb`, `@gmail`, or the GitHub indirection is fine. https://github.com/llvm/llvm-project/assets/7906725/6ae684b4-429b-4f09-bb97-f4525422da39;> https://github.com/llvm/llvm-project/pull/72385 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] Add new modernize-use-starts-ends-with check (PR #72385)
PiotrZSL wrote: @nicovank "nvankem...@fb.com" is fine ? To enable "meta.com" you may need to add this email in github and confirm it. Then it will allow you to select it as "default". https://github.com/llvm/llvm-project/pull/72385 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] Add new modernize-use-starts-ends-with check (PR #72385)
https://github.com/nicovank updated https://github.com/llvm/llvm-project/pull/72385 >From c6b5aac2b5a3d90d11a8fc0d092c2e794cff5856 Mon Sep 17 00:00:00 2001 From: Nicolas van Kempen Date: Wed, 15 Nov 2023 01:13:10 -0800 Subject: [PATCH] [clang-tidy] Add new modernize-use-starts-ends-with check Match .find() and .rfind() calls compared to 0, and suggests replacing them with starts_with. --- .../abseil/StringFindStartswithCheck.h| 5 +- .../clang-tidy/modernize/CMakeLists.txt | 1 + .../modernize/ModernizeTidyModule.cpp | 3 + .../modernize/UseStartsEndsWithCheck.cpp | 109 .../modernize/UseStartsEndsWithCheck.h| 37 clang-tools-extra/docs/ReleaseNotes.rst | 7 + .../checks/abseil/string-find-startswith.rst | 4 + .../docs/clang-tidy/checks/list.rst | 1 + .../checks/modernize/use-starts-ends-with.rst | 22 +++ .../checkers/Inputs/Headers/stddef.h | 2 +- .../clang-tidy/checkers/Inputs/Headers/string | 16 +- .../abseil/string-find-startswith.cpp | 2 +- .../modernize/use-starts-ends-with.cpp| 167 ++ .../readability/container-size-empty.cpp | 4 +- 14 files changed, 374 insertions(+), 6 deletions(-) create mode 100644 clang-tools-extra/clang-tidy/modernize/UseStartsEndsWithCheck.cpp create mode 100644 clang-tools-extra/clang-tidy/modernize/UseStartsEndsWithCheck.h create mode 100644 clang-tools-extra/docs/clang-tidy/checks/modernize/use-starts-ends-with.rst create mode 100644 clang-tools-extra/test/clang-tidy/checkers/modernize/use-starts-ends-with.cpp diff --git a/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h b/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h index 923b5caece543..de3bd4d422200 100644 --- a/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h +++ b/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h @@ -21,7 +21,6 @@ namespace clang::tidy::abseil { // Find string.find(...) == 0 comparisons and suggest replacing with StartsWith. // FIXME(niko): Add similar check for EndsWith -// FIXME(niko): Add equivalent modernize checks for C++20's std::starts_With class StringFindStartswithCheck : public ClangTidyCheck { public: using ClangTidyCheck::ClangTidyCheck; @@ -31,6 +30,10 @@ class StringFindStartswithCheck : public ClangTidyCheck { void registerMatchers(ast_matchers::MatchFinder *Finder) override; void check(const ast_matchers::MatchFinder::MatchResult ) override; void storeOptions(ClangTidyOptions::OptionMap ) override; + bool isLanguageVersionSupported(const LangOptions ) const override { +// Prefer modernize-use-starts-ends-with when C++20 is available. +return LangOpts.CPlusPlus && !LangOpts.CPlusPlus20; + } private: const std::vector StringLikeClasses; diff --git a/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt b/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt index 717c400c47903..c40065358d2dc 100644 --- a/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt +++ b/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt @@ -38,6 +38,7 @@ add_clang_library(clangTidyModernizeModule UseNoexceptCheck.cpp UseNullptrCheck.cpp UseOverrideCheck.cpp + UseStartsEndsWithCheck.cpp UseStdPrintCheck.cpp UseTrailingReturnTypeCheck.cpp UseTransparentFunctorsCheck.cpp diff --git a/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp b/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp index 73751cf270506..e994ffd2a75c8 100644 --- a/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp +++ b/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp @@ -39,6 +39,7 @@ #include "UseNoexceptCheck.h" #include "UseNullptrCheck.h" #include "UseOverrideCheck.h" +#include "UseStartsEndsWithCheck.h" #include "UseStdPrintCheck.h" #include "UseTrailingReturnTypeCheck.h" #include "UseTransparentFunctorsCheck.h" @@ -66,6 +67,8 @@ class ModernizeModule : public ClangTidyModule { CheckFactories.registerCheck("modernize-make-shared"); CheckFactories.registerCheck("modernize-make-unique"); CheckFactories.registerCheck("modernize-pass-by-value"); +CheckFactories.registerCheck( +"modernize-use-starts-ends-with"); CheckFactories.registerCheck("modernize-use-std-print"); CheckFactories.registerCheck( "modernize-raw-string-literal"); diff --git a/clang-tools-extra/clang-tidy/modernize/UseStartsEndsWithCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseStartsEndsWithCheck.cpp new file mode 100644 index 0..062f6e9911dbe --- /dev/null +++ b/clang-tools-extra/clang-tidy/modernize/UseStartsEndsWithCheck.cpp @@ -0,0 +1,109 @@ +//===--- UseStartsEndsWithCheck.cpp - clang-tidy --===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +//
[clang-tools-extra] [clang-tidy] Add new modernize-use-starts-ends-with check (PR #72385)
nicovank wrote: Thanks! There should be no more warning. I tried to edit my GitHub settings, great if it worked, otherwise GitHub or personal email is fine. https://github.com/llvm/llvm-project/pull/72385 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] Add new modernize-use-starts-ends-with check (PR #72385)
PiotrZSL wrote: @nicovank I run check on llvm, reported 3 issues, no false-positives. There is warning reported for FindFun variable because is used only in assert, check if you could do something with it, maybe add if for checking agains null, to silent warning or removing this variable and assert. Check your github config (email privacy) otherwise this PR will be merged as nicov...@users.noreply.github.com https://github.com/llvm/llvm-project/pull/72385 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] Add new modernize-use-starts-ends-with check (PR #72385)
nicovank wrote: > Support for `ends_with`. Planning to look into it and other `starts_with` patterns. I do not have commit access, please merge for me (`Nicolas van Kempen `). https://github.com/llvm/llvm-project/pull/72385 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] Add new modernize-use-starts-ends-with check (PR #72385)
https://github.com/nicovank updated https://github.com/llvm/llvm-project/pull/72385 >From 86292b1489a6e3998afb52e0625f0c38ff7657a5 Mon Sep 17 00:00:00 2001 From: Nicolas van Kempen Date: Wed, 15 Nov 2023 01:13:10 -0800 Subject: [PATCH] [clang-tidy] Add new modernize-use-starts-ends-with check Match .find() and .rfind() calls compared to 0, and suggests replacing them with starts_with. --- .../abseil/StringFindStartswithCheck.h| 5 +- .../clang-tidy/modernize/CMakeLists.txt | 1 + .../modernize/ModernizeTidyModule.cpp | 3 + .../modernize/UseStartsEndsWithCheck.cpp | 113 .../modernize/UseStartsEndsWithCheck.h| 37 clang-tools-extra/docs/ReleaseNotes.rst | 7 + .../checks/abseil/string-find-startswith.rst | 4 + .../docs/clang-tidy/checks/list.rst | 1 + .../checks/modernize/use-starts-ends-with.rst | 22 +++ .../checkers/Inputs/Headers/stddef.h | 2 +- .../clang-tidy/checkers/Inputs/Headers/string | 16 +- .../abseil/string-find-startswith.cpp | 2 +- .../modernize/use-starts-ends-with.cpp| 167 ++ .../readability/container-size-empty.cpp | 4 +- 14 files changed, 378 insertions(+), 6 deletions(-) create mode 100644 clang-tools-extra/clang-tidy/modernize/UseStartsEndsWithCheck.cpp create mode 100644 clang-tools-extra/clang-tidy/modernize/UseStartsEndsWithCheck.h create mode 100644 clang-tools-extra/docs/clang-tidy/checks/modernize/use-starts-ends-with.rst create mode 100644 clang-tools-extra/test/clang-tidy/checkers/modernize/use-starts-ends-with.cpp diff --git a/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h b/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h index 923b5caece5439b..de3bd4d42220009 100644 --- a/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h +++ b/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h @@ -21,7 +21,6 @@ namespace clang::tidy::abseil { // Find string.find(...) == 0 comparisons and suggest replacing with StartsWith. // FIXME(niko): Add similar check for EndsWith -// FIXME(niko): Add equivalent modernize checks for C++20's std::starts_With class StringFindStartswithCheck : public ClangTidyCheck { public: using ClangTidyCheck::ClangTidyCheck; @@ -31,6 +30,10 @@ class StringFindStartswithCheck : public ClangTidyCheck { void registerMatchers(ast_matchers::MatchFinder *Finder) override; void check(const ast_matchers::MatchFinder::MatchResult ) override; void storeOptions(ClangTidyOptions::OptionMap ) override; + bool isLanguageVersionSupported(const LangOptions ) const override { +// Prefer modernize-use-starts-ends-with when C++20 is available. +return LangOpts.CPlusPlus && !LangOpts.CPlusPlus20; + } private: const std::vector StringLikeClasses; diff --git a/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt b/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt index 717c400c4790330..c40065358d2dc3d 100644 --- a/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt +++ b/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt @@ -38,6 +38,7 @@ add_clang_library(clangTidyModernizeModule UseNoexceptCheck.cpp UseNullptrCheck.cpp UseOverrideCheck.cpp + UseStartsEndsWithCheck.cpp UseStdPrintCheck.cpp UseTrailingReturnTypeCheck.cpp UseTransparentFunctorsCheck.cpp diff --git a/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp b/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp index 73751cf2705068d..e994ffd2a75c857 100644 --- a/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp +++ b/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp @@ -39,6 +39,7 @@ #include "UseNoexceptCheck.h" #include "UseNullptrCheck.h" #include "UseOverrideCheck.h" +#include "UseStartsEndsWithCheck.h" #include "UseStdPrintCheck.h" #include "UseTrailingReturnTypeCheck.h" #include "UseTransparentFunctorsCheck.h" @@ -66,6 +67,8 @@ class ModernizeModule : public ClangTidyModule { CheckFactories.registerCheck("modernize-make-shared"); CheckFactories.registerCheck("modernize-make-unique"); CheckFactories.registerCheck("modernize-pass-by-value"); +CheckFactories.registerCheck( +"modernize-use-starts-ends-with"); CheckFactories.registerCheck("modernize-use-std-print"); CheckFactories.registerCheck( "modernize-raw-string-literal"); diff --git a/clang-tools-extra/clang-tidy/modernize/UseStartsEndsWithCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseStartsEndsWithCheck.cpp new file mode 100644 index 000..83451e09e26eaa8 --- /dev/null +++ b/clang-tools-extra/clang-tidy/modernize/UseStartsEndsWithCheck.cpp @@ -0,0 +1,113 @@ +//===--- UseStartsEndsWithCheck.cpp - clang-tidy --===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license
[clang-tools-extra] [clang-tidy] Add new modernize-use-starts-ends-with check (PR #72385)
https://github.com/PiotrZSL approved this pull request. For a starts_with looks fine, consider now adding support for ends_with, maybe in separate push request once this will be merged. https://github.com/llvm/llvm-project/pull/72385 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] Add new modernize-use-starts-ends-with check (PR #72385)
@@ -0,0 +1,22 @@ +.. title:: clang-tidy - modernize-use-starts-ends-with + +modernize-use-starts-ends-with + PiotrZSL wrote: make it shorter to match name https://github.com/llvm/llvm-project/pull/72385 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] Add new modernize-use-starts-ends-with check (PR #72385)
nicovank wrote: Thank you!! Modernize wins the vote, I've renamed the check. https://github.com/llvm/llvm-project/pull/72385 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] Add new modernize-use-starts-ends-with check (PR #72385)
https://github.com/nicovank edited https://github.com/llvm/llvm-project/pull/72385 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] Add new modernize-use-starts-ends-with check (PR #72385)
https://github.com/nicovank edited https://github.com/llvm/llvm-project/pull/72385 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits