[clang-tools-extra] 47bd7c5 - Revert "[clang-tidy] Give readability-redundant-string-init a customizable list of string types to fix"

Mitchell Balan via cfe-commits cfe-commits at lists.llvm.org
Fri Nov 15 13:48:30 PST 2019


Author: Mitchell Balan
Date: 2019-11-15T16:46:58-05:00
New Revision: 47bd7c57e556e3a4db51566d59c2d796ce898c8f

URL: https://github.com/llvm/llvm-project/commit/47bd7c57e556e3a4db51566d59c2d796ce898c8f
DIFF: https://github.com/llvm/llvm-project/commit/47bd7c57e556e3a4db51566d59c2d796ce898c8f.diff

LOG: Revert "[clang-tidy] Give readability-redundant-string-init a customizable list of string types to fix"

This reverts commit 96fbc32cb9ea23b1e7e3ff6906ec3ccda9500982.

Added: 
    

Modified: 
    clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.cpp
    clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.h
    clang-tools-extra/docs/ReleaseNotes.rst
    clang-tools-extra/docs/clang-tidy/checks/readability-redundant-string-init.rst
    clang-tools-extra/test/clang-tidy/checkers/readability-redundant-string-init.cpp

Removed: 
    


################################################################################
diff  --git a/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.cpp b/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.cpp
index 6bf0edb7231f..a140e17fabfd 100644
--- a/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.cpp
@@ -8,7 +8,6 @@
 
 #include "RedundantStringInitCheck.h"
 #include "../utils/Matchers.h"
-#include "../utils/OptionsUtils.h"
 #include "clang/ASTMatchers/ASTMatchers.h"
 
 using namespace clang::ast_matchers;
@@ -18,43 +17,19 @@ namespace clang {
 namespace tidy {
 namespace readability {
 
-const char DefaultStringNames[] = "::std::basic_string";
-
-RedundantStringInitCheck::RedundantStringInitCheck(StringRef Name,
-                                                   ClangTidyContext *Context)
-    : ClangTidyCheck(Name, Context),
-      StringNames(utils::options::parseStringList(
-          Options.get("StringNames", DefaultStringNames))) {}
-
-void RedundantStringInitCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
-  Options.store(Opts, "StringNames", DefaultStringNames);
-}
-
 void RedundantStringInitCheck::registerMatchers(MatchFinder *Finder) {
   if (!getLangOpts().CPlusPlus)
     return;
-  const auto hasStringTypeName = hasAnyName(
-      SmallVector<StringRef, 3>(StringNames.begin(), StringNames.end()));
-
-  // Version of StringNames with namespaces removed
-  std::vector<std::string> stringNamesNoNamespace;
-  for (const std::string &name : StringNames) {
-    std::string::size_type colonPos = name.rfind(':');
-    stringNamesNoNamespace.push_back(
-        name.substr(colonPos == std::string::npos ? 0 : colonPos + 1));
-  }
-  const auto hasStringCtorName = hasAnyName(SmallVector<StringRef, 3>(
-      stringNamesNoNamespace.begin(), stringNamesNoNamespace.end()));
 
   // Match string constructor.
-  const auto StringConstructorExpr = expr(
-      anyOf(cxxConstructExpr(argumentCountIs(1),
-                             hasDeclaration(cxxMethodDecl(hasStringCtorName))),
-            // If present, the second argument is the alloc object which must
-            // not be present explicitly.
-            cxxConstructExpr(argumentCountIs(2),
-                             hasDeclaration(cxxMethodDecl(hasStringCtorName)),
-                             hasArgument(1, cxxDefaultArgExpr()))));
+  const auto StringConstructorExpr = expr(anyOf(
+      cxxConstructExpr(argumentCountIs(1),
+                       hasDeclaration(cxxMethodDecl(hasName("basic_string")))),
+      // If present, the second argument is the alloc object which must not
+      // be present explicitly.
+      cxxConstructExpr(argumentCountIs(2),
+                       hasDeclaration(cxxMethodDecl(hasName("basic_string"))),
+                       hasArgument(1, cxxDefaultArgExpr()))));
 
   // Match a string constructor expression with an empty string literal.
   const auto EmptyStringCtorExpr = cxxConstructExpr(
@@ -73,7 +48,7 @@ void RedundantStringInitCheck::registerMatchers(MatchFinder *Finder) {
       namedDecl(
           varDecl(
               hasType(hasUnqualifiedDesugaredType(recordType(
-                  hasDeclaration(cxxRecordDecl(hasStringTypeName))))),
+                  hasDeclaration(cxxRecordDecl(hasName("basic_string")))))),
               hasInitializer(expr(ignoringImplicit(anyOf(
                   EmptyStringCtorExpr, EmptyStringCtorExprWithTemporaries)))))
               .bind("vardecl"),

diff  --git a/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.h b/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.h
index 9ab009aea84d..b1f551ed5607 100644
--- a/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.h
+++ b/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.h
@@ -10,8 +10,6 @@
 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_REDUNDANT_STRING_INIT_H
 
 #include "../ClangTidyCheck.h"
-#include <string>
-#include <vector>
 
 namespace clang {
 namespace tidy {
@@ -20,13 +18,10 @@ namespace readability {
 /// Finds unnecessary string initializations.
 class RedundantStringInitCheck : public ClangTidyCheck {
 public:
-  RedundantStringInitCheck(StringRef Name, ClangTidyContext *Context);
-  void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
+  RedundantStringInitCheck(StringRef Name, ClangTidyContext *Context)
+      : ClangTidyCheck(Name, Context) {}
   void registerMatchers(ast_matchers::MatchFinder *Finder) override;
   void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
-
-private:
-  std::vector<std::string> StringNames;
 };
 
 } // namespace readability

diff  --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index e6cc354003bc..5737dc3d288d 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -164,10 +164,6 @@ Improvements to clang-tidy
   Finds non-static member functions that can be made ``const``
   because the functions don't use ``this`` in a non-const way.
 
-- The :doc:`readability-redundant-string-init
-  <clang-tidy/checks/readability-redundant-string-init>` check now supports a
-  `StringNames` option enabling its application to custom string classes.
-
 Improvements to include-fixer
 -----------------------------
 

diff  --git a/clang-tools-extra/docs/clang-tidy/checks/readability-redundant-string-init.rst b/clang-tools-extra/docs/clang-tidy/checks/readability-redundant-string-init.rst
index c4556887f89a..e4136ea42340 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/readability-redundant-string-init.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/readability-redundant-string-init.rst
@@ -5,8 +5,7 @@ readability-redundant-string-init
 
 Finds unnecessary string initializations.
 
-Examples
---------
+Examples:
 
 .. code-block:: c++
 
@@ -18,15 +17,3 @@ Examples
 
   std::string a;
   std::string b;
-
-Options
--------
-
-.. option:: StringNames
-
-    Default is `::std::basic_string`.
-
-    Semicolon-delimited list of class names to apply this check to.
-    By default `::std::basic_string` applies to ``std::string`` and
-    ``std::wstring``. Set to e.g. `::std::basic_string;llvm::StringRef;QString`
-    to perform this check on custom classes.

diff  --git a/clang-tools-extra/test/clang-tidy/checkers/readability-redundant-string-init.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability-redundant-string-init.cpp
index eb77d9f195b3..76d1fe97e1b9 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability-redundant-string-init.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability-redundant-string-init.cpp
@@ -1,9 +1,4 @@
-// RUN: %check_clang_tidy -std=c++11,c++14 %s readability-redundant-string-init %t \
-// RUN:   -config="{CheckOptions: \
-// RUN:             [{key: readability-redundant-string-init.StringNames, \
-// RUN:               value: "::std::basic_string;our::TestString"}] \
-// RUN:             }"
-// FIXME: Fix the checker to work in C++17 mode.
+// RUN: %check_clang_tidy %s readability-redundant-string-init %t
 
 namespace std {
 template <typename T>
@@ -148,82 +143,3 @@ extern void Param2(const std::string& param = "");
 void Param3(std::string param = "") {}
 void Param4(STRING param = "") {}
 
-namespace our {
-struct TestString {
-  TestString();
-  TestString(const TestString &);
-  TestString(const char *);
-  ~TestString();
-};
-}
-
-void ourTestStringTests() {
-  our::TestString a = "";
-  // CHECK-MESSAGES: [[@LINE-1]]:19: warning: redundant string initialization
-  // CHECK-FIXES: our::TestString a;
-  our::TestString b("");
-  // CHECK-MESSAGES: [[@LINE-1]]:19: warning: redundant string initialization
-  // CHECK-FIXES: our::TestString b;
-  our::TestString c = R"()";
-  // CHECK-MESSAGES: [[@LINE-1]]:19: warning: redundant string initialization
-  // CHECK-FIXES: our::TestString c;
-  our::TestString d(R"()");
-  // CHECK-MESSAGES: [[@LINE-1]]:19: warning: redundant string initialization
-  // CHECK-FIXES: our::TestString d;
-
-  our::TestString u = "u";
-  our::TestString w("w");
-  our::TestString x = R"(x)";
-  our::TestString y(R"(y)");
-  our::TestString z;
-}
-
-namespace their {
-using TestString = our::TestString;
-}
-
-// their::TestString is the same type so should warn / fix
-void theirTestStringTests() {
-  their::TestString a = "";
-  // CHECK-MESSAGES: [[@LINE-1]]:21: warning: redundant string initialization
-  // CHECK-FIXES: their::TestString a;
-  their::TestString b("");
-  // CHECK-MESSAGES: [[@LINE-1]]:21: warning: redundant string initialization
-  // CHECK-FIXES: their::TestString b;
-}
-
-namespace other {
-// Identical declarations to above but 
diff erent type
-struct TestString {
-  TestString();
-  TestString(const TestString &);
-  TestString(const char *);
-  ~TestString();
-};
-
-// Identical declarations to above but 
diff erent type
-template <typename T>
-class allocator {};
-template <typename T>
-class char_traits {};
-template <typename C, typename T = std::char_traits<C>, typename A = std::allocator<C>>
-struct basic_string {
-  basic_string();
-  basic_string(const basic_string &);
-  basic_string(const C *, const A &a = A());
-  ~basic_string();
-};
-typedef basic_string<char> string;
-typedef basic_string<wchar_t> wstring;
-}
-
-// other::TestString, other::string, other::wstring are unrelated to the types
-// being checked. No warnings / fixes should be produced for these types.
-void otherTestStringTests() {
-  other::TestString a = "";
-  other::TestString b("");
-  other::string c = "";
-  other::string d("");
-  other::wstring e = L"";
-  other::wstring f(L"");
-}


        


More information about the cfe-commits mailing list