[clang-rename] exit code-related bugfix and code cleanup
authorBenjamin Kramer <benny.kra@googlemail.com>
Thu, 14 Jul 2016 09:46:03 +0000 (09:46 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Thu, 14 Jul 2016 09:46:03 +0000 (09:46 +0000)
This patch does the following:

* enforces proper formatting for few files (i.e. deals with 80 linewidth violations and few other things)
* ensures '\n' chars are passed to the output streams instead of "\n" strings
* fixes a bug caused by calling cl::PrintHelpMessage(), which occasionally calls exit(0), so that exit(1) (which is right after cl::PrintHelpMessage line) becomes dead code

Patch by Kirill Bobyrev!

Differential Revision: http://reviews.llvm.org/D22091

llvm-svn: 275387

clang-tools-extra/clang-rename/RenamingAction.cpp
clang-tools-extra/clang-rename/USRLocFinder.cpp
clang-tools-extra/clang-rename/USRLocFinder.h
clang-tools-extra/clang-rename/tool/ClangRename.cpp
clang-tools-extra/test/clang-rename/NoNewName.cpp [new file with mode: 0644]

index ac04ae1..720190f 100644 (file)
@@ -49,7 +49,8 @@ public:
     std::vector<SourceLocation> NewCandidates;
 
     for (const auto &USR : USRs) {
-      NewCandidates = getLocationsOfUSR(USR, PrevName, Context.getTranslationUnitDecl());
+      NewCandidates = getLocationsOfUSR(USR, PrevName,
+                                        Context.getTranslationUnitDecl());
       RenamingCandidates.insert(RenamingCandidates.end(), NewCandidates.begin(),
                                 NewCandidates.end());
       NewCandidates.clear();
index 878c4ba..02982b7 100644 (file)
@@ -34,8 +34,8 @@ namespace {
 class USRLocFindingASTVisitor
     : public clang::RecursiveASTVisitor<USRLocFindingASTVisitor> {
 public:
-  explicit USRLocFindingASTVisitor(StringRef USR, StringRef PrevName) : USR(USR), PrevName(PrevName) {
-  }
+  explicit USRLocFindingASTVisitor(StringRef USR, StringRef PrevName)
+      : USR(USR), PrevName(PrevName) {}
 
   // Declaration visitors:
 
@@ -60,8 +60,7 @@ public:
 
   bool VisitCXXConstructorDecl(clang::CXXConstructorDecl *ConstructorDecl) {
     const ASTContext &Context = ConstructorDecl->getASTContext();
-    for (clang::CXXConstructorDecl::init_const_iterator it = ConstructorDecl->init_begin(); it != ConstructorDecl->init_end(); ++it) {
-      const clang::CXXCtorInitializer* Initializer = *it;
+    for (auto &Initializer : ConstructorDecl->inits()) {
       if (Initializer->getSourceOrder() == -1) {
         // Ignore implicit initializers.
         continue;
@@ -71,9 +70,12 @@ public:
         if (getUSRForDecl(FieldDecl) == USR) {
           // The initializer refers to a field that is to be renamed.
           SourceLocation Location = Initializer->getSourceLocation();
-          StringRef TokenName = Lexer::getSourceText(CharSourceRange::getTokenRange(Location), Context.getSourceManager(), Context.getLangOpts());
+          StringRef TokenName = Lexer::getSourceText(
+              CharSourceRange::getTokenRange(Location),
+              Context.getSourceManager(), Context.getLangOpts());
           if (TokenName == PrevName) {
-            // The token of the source location we find actually has the old name.
+            // The token of the source location we find actually has the old
+            // name.
             LocationsFound.push_back(Initializer->getSourceLocation());
           }
         }
@@ -183,14 +185,15 @@ private:
   bool handleCXXNamedCastExpr(clang::CXXNamedCastExpr *Expr) {
     clang::QualType Type = Expr->getType();
     // See if this a cast of a pointer.
-    const RecordDeclDecl = Type->getPointeeCXXRecordDecl();
+    const RecordDecl *Decl = Type->getPointeeCXXRecordDecl();
     if (!Decl) {
       // See if this is a cast of a reference.
       Decl = Type->getAsCXXRecordDecl();
     }
 
     if (Decl && getUSRForDecl(Decl) == USR) {
-      SourceLocation Location = Expr->getTypeInfoAsWritten()->getTypeLoc().getBeginLoc();
+      SourceLocation Location =
+          Expr->getTypeInfoAsWritten()->getTypeLoc().getBeginLoc();
       LocationsFound.push_back(Location);
     }
 
@@ -205,8 +208,7 @@ private:
 };
 } // namespace
 
-std::vector<SourceLocation> getLocationsOfUSR(StringRef USR,
-                                              StringRef PrevName,
+std::vector<SourceLocation> getLocationsOfUSR(StringRef USR, StringRef PrevName,
                                               Decl *Decl) {
   USRLocFindingASTVisitor visitor(USR, PrevName);
 
index d3782a9..e70af59 100644 (file)
 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_RENAME_USR_LOC_FINDER_H
 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_RENAME_USR_LOC_FINDER_H
 
+#include "clang/AST/AST.h"
+#include "llvm/ADT/StringRef.h"
 #include <string>
 #include <vector>
 
-#include "llvm/ADT/StringRef.h"
-
 namespace clang {
-
-class Decl;
-class SourceLocation;
-
 namespace rename {
 
 // FIXME: make this an AST matcher. Wouldn't that be awesome??? I agree!
-std::vector<SourceLocation> getLocationsOfUSR(llvm::StringRef usr,
-                                              llvm::StringRef PrevName,
-                                              Decl *decl);
-}
-}
+std::vector<SourceLocation>
+getLocationsOfUSR(llvm::StringRef USR, llvm::StringRef PrevName, Decl *Decl);
+
+} // namespace rename
+} // namespace clang
 
 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_RENAME_USR_LOC_FINDER_H
index 06f719a..e3bdfcd 100644 (file)
@@ -36,7 +36,6 @@
 #include "clang/Tooling/Tooling.h"
 #include "llvm/ADT/IntrusiveRefCntPtr.h"
 #include "llvm/Support/Host.h"
-#include <cstdlib>
 #include <string>
 
 using namespace llvm;
@@ -83,7 +82,7 @@ ExportFixes(
 #define CLANG_RENAME_VERSION "0.0.1"
 
 static void PrintVersion() {
-  outs() << "clang-rename version " << CLANG_RENAME_VERSION << "\n";
+  outs() << "clang-rename version " << CLANG_RENAME_VERSION << '\n';
 }
 
 using namespace clang;
@@ -101,7 +100,6 @@ int main(int argc, const char **argv) {
 
   if (NewName.empty()) {
     errs() << "clang-rename: no new name provided.\n\n";
-    cl::PrintHelpMessage();
     exit(1);
   }
 
@@ -115,12 +113,14 @@ int main(int argc, const char **argv) {
   const auto &USRs = USRAction.getUSRs();
   const auto &PrevName = USRAction.getUSRSpelling();
 
-  if (PrevName.empty())
+  if (PrevName.empty()) {
     // An error should have already been printed.
     exit(1);
+  }
 
-  if (PrintName)
-    errs() << "clang-rename: found name: " << PrevName << "\n";
+  if (PrintName) {
+    errs() << "clang-rename: found name: " << PrevName << '\n';
+  }
 
   // Perform the renaming.
   rename::RenamingAction RenameAction(NewName, PrevName, USRs,
diff --git a/clang-tools-extra/test/clang-rename/NoNewName.cpp b/clang-tools-extra/test/clang-rename/NoNewName.cpp
new file mode 100644 (file)
index 0000000..a706f42
--- /dev/null
@@ -0,0 +1,20 @@
+// This test is a copy of ConstCastExpr.cpp with a single change:
+// -new-name hasn't been passed to clang-rename, so this test should give an
+// error.
+// RUN: not clang-rename -offset=133 %s 2>&1 | FileCheck %s
+// CHECK: clang-rename: no new name provided.
+
+class Cla {
+public:
+  int getValue() {
+    return 0;
+  }
+};
+
+int main() {
+  const Cla *C = new Cla();
+  const_cast<Cla *>(C)->getValue();
+}
+
+// Use grep -FUbo 'Cla' <file> to get the correct offset of foo when changing
+// this file.