Hi, I noticed the clang-rename unit test has failed compilation and been excluded. I've made a fix to make it compile, and all the tests are running okay on my laptop. This patch separated the clangRename.a and clang-rename application, allowing the unit test to link to clangRename.a. Please help review the patch. Thanks!
Regards Xin Huang
From 4d5b89321ecbdf8f833f8d11edbe71fa697293c3 Mon Sep 17 00:00:00 2001 From: xinhuang <[email protected]> Date: Tue, 7 Oct 2014 16:14:19 +0800 Subject: [PATCH] [clang-rename] fix unit test --- clang-rename/CMakeLists.txt | 9 +-- clang-rename/ClangRename.cpp | 151 -------------------------------------- clang-rename/Makefile | 10 +-- clang-rename/tool/CMakeLists.txt | 11 +++ clang-rename/tool/ClangRename.cpp | 151 ++++++++++++++++++++++++++++++++++++++ clang-rename/tool/Makefile | 12 +++ unittests/Makefile | 2 +- unittests/clang-rename/Makefile | 13 ++-- 8 files changed, 189 insertions(+), 170 deletions(-) delete mode 100644 clang-rename/ClangRename.cpp create mode 100644 clang-rename/tool/CMakeLists.txt create mode 100644 clang-rename/tool/ClangRename.cpp create mode 100644 clang-rename/tool/Makefile diff --git a/clang-rename/CMakeLists.txt b/clang-rename/CMakeLists.txt index 69962a7..edc479e 100644 --- a/clang-rename/CMakeLists.txt +++ b/clang-rename/CMakeLists.txt @@ -1,14 +1,12 @@ set(LLVM_LINK_COMPONENTS support) -add_clang_executable(clang-rename - ClangRename.cpp +add_clang_library(clangRename USRFinder.cpp USRFindingAction.cpp USRLocFinder.cpp RenamingAction.cpp - ) -target_link_libraries(clang-rename + LINK_LIBS clangAST clangBasic clangFrontend @@ -17,4 +15,5 @@ target_link_libraries(clang-rename clangTooling ) -install(TARGETS clang-rename RUNTIME DESTINATION bin) +add_subdirectory(tool) + diff --git a/clang-rename/ClangRename.cpp b/clang-rename/ClangRename.cpp deleted file mode 100644 index 077c591..0000000 --- a/clang-rename/ClangRename.cpp +++ /dev/null @@ -1,151 +0,0 @@ -//===--- tools/extra/clang-rename/ClangRename.cpp - Clang rename tool -----===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -/// -/// \file -/// \brief This file implements a clang-rename tool that automatically finds and -/// renames symbols in C++ code. -/// -//===----------------------------------------------------------------------===// - -#include "USRFindingAction.h" -#include "RenamingAction.h" -#include "clang/AST/ASTConsumer.h" -#include "clang/AST/ASTContext.h" -#include "clang/Basic/FileManager.h" -#include "clang/Basic/LangOptions.h" -#include "clang/Basic/TargetInfo.h" -#include "clang/Basic/TargetOptions.h" -#include "clang/Frontend/CommandLineSourceLoc.h" -#include "clang/Frontend/CompilerInstance.h" -#include "clang/Frontend/FrontendAction.h" -#include "clang/Frontend/TextDiagnosticPrinter.h" -#include "clang/Lex/Preprocessor.h" -#include "clang/Lex/Lexer.h" -#include "clang/Parse/Parser.h" -#include "clang/Parse/ParseAST.h" -#include "clang/Rewrite/Core/Rewriter.h" -#include "clang/Tooling/CommonOptionsParser.h" -#include "clang/Tooling/Refactoring.h" -#include "clang/Tooling/Tooling.h" -#include "llvm/ADT/IntrusiveRefCntPtr.h" -#include "llvm/Support/Host.h" -#include <stdio.h> -#include <stdlib.h> -#include <time.h> -#include <ctype.h> -#include <string> -#include <vector> - -using namespace llvm; - -cl::OptionCategory ClangRenameCategory("Clang-rename options"); - -static cl::opt<std::string> -NewName( - "new-name", - cl::desc("The new name to change the symbol to."), - cl::cat(ClangRenameCategory)); -static cl::opt<unsigned> -SymbolOffset( - "offset", - cl::desc("Locates the symbol by offset as opposed to <line>:<column>."), - cl::cat(ClangRenameCategory)); -static cl::opt<bool> -Inplace( - "i", - cl::desc("Overwrite edited <file>s."), - cl::cat(ClangRenameCategory)); -static cl::opt<bool> -PrintName( - "pn", - cl::desc("Print the found symbol's name prior to renaming to stderr."), - cl::cat(ClangRenameCategory)); -static cl::opt<bool> -PrintLocations( - "pl", - cl::desc("Print the locations affected by renaming to stderr."), - cl::cat(ClangRenameCategory)); - -#define CLANG_RENAME_VERSION "0.0.1" - -static void PrintVersion() { - outs() << "clang-rename version " << CLANG_RENAME_VERSION << "\n"; -} - -using namespace clang; - -const char RenameUsage[] = "A tool to rename symbols in C/C++ code.\n\ -clang-rename renames every occurrence of a symbol found at <offset> in\n\ -<source0>. If -i is specified, the edited files are overwritten to disk.\n\ -Otherwise, the results are written to stdout.\n"; - -int main(int argc, const char **argv) { - cl::SetVersionPrinter(PrintVersion); - tooling::CommonOptionsParser OP(argc, argv, ClangRenameCategory, RenameUsage); - - // Check the arguments for correctness. - - if (NewName.empty()) { - errs() << "clang-rename: no new name provided.\n\n"; - cl::PrintHelpMessage(); - exit(1); - } - - // Get the USRs. - auto Files = OP.getSourcePathList(); - tooling::RefactoringTool Tool(OP.getCompilations(), Files); - rename::USRFindingAction USRAction(SymbolOffset); - - // Find the USRs. - Tool.run(tooling::newFrontendActionFactory(&USRAction).get()); - const auto &USRs = USRAction.getUSRs(); - const auto &PrevName = USRAction.getUSRSpelling(); - - if (PrevName.empty()) - // An error should have already been printed. - exit(1); - - if (PrintName) - errs() << "clang-rename: found name: " << PrevName; - - // Perform the renaming. - rename::RenamingAction RenameAction(NewName, PrevName, USRs, - Tool.getReplacements(), PrintLocations); - auto Factory = tooling::newFrontendActionFactory(&RenameAction); - int res; - - if (Inplace) { - res = Tool.runAndSave(Factory.get()); - } else { - res = Tool.run(Factory.get()); - - // Write every file to stdout. Right now we just barf the files without any - // indication of which files start where, other than that we print the files - // in the same order we see them. - LangOptions DefaultLangOptions; - IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = - new DiagnosticOptions(); - TextDiagnosticPrinter DiagnosticPrinter(errs(), &*DiagOpts); - DiagnosticsEngine Diagnostics( - IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs()), - &*DiagOpts, &DiagnosticPrinter, false); - auto &FileMgr = Tool.getFiles(); - SourceManager Sources(Diagnostics, FileMgr); - Rewriter Rewrite(Sources, DefaultLangOptions); - - Tool.applyAllReplacements(Rewrite); - for (const auto &File : Files) { - const auto *Entry = FileMgr.getFile(File); - auto ID = Sources.translateFile(Entry); - Rewrite.getEditBuffer(ID).write(outs()); - } - } - - exit(res); -} diff --git a/clang-rename/Makefile b/clang-rename/Makefile index 8efcc45..d534a78 100644 --- a/clang-rename/Makefile +++ b/clang-rename/Makefile @@ -8,13 +8,9 @@ ##===----------------------------------------------------------------------===## CLANG_LEVEL := ../../.. -TOOLNAME = clang-rename +LIBRARYNAME = clangRename include $(CLANG_LEVEL)/../../Makefile.config -LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option -USEDLIBS = clangFrontend.a clangSerialization.a clangDriver.a \ - clangTooling.a clangParse.a clangSema.a clangIndex.a \ - clangStaticAnalyzerFrontend.a clangStaticAnalyzerCheckers.a \ - clangStaticAnalyzerCore.a clangAnalysis.a clangRewriteFrontend.a \ - clangRewrite.a clangEdit.a clangAST.a clangLex.a clangBasic.a + +DIRS = tool include $(CLANG_LEVEL)/Makefile diff --git a/clang-rename/tool/CMakeLists.txt b/clang-rename/tool/CMakeLists.txt new file mode 100644 index 0000000..1dcd237 --- /dev/null +++ b/clang-rename/tool/CMakeLists.txt @@ -0,0 +1,11 @@ +add_clang_executable(clang-rename ClangRename.cpp) + +target_link_libraries(clang-rename + clangAST + clangBasic + clangFrontend + clangIndex + clangRewrite + clangTooling) + +install(TARGETS clang-rename RUNTIME DESTINATION bin) diff --git a/clang-rename/tool/ClangRename.cpp b/clang-rename/tool/ClangRename.cpp new file mode 100644 index 0000000..4e971f3 --- /dev/null +++ b/clang-rename/tool/ClangRename.cpp @@ -0,0 +1,151 @@ +//===--- tools/extra/clang-rename/ClangRename.cpp - Clang rename tool -----===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// \brief This file implements a clang-rename tool that automatically finds and +/// renames symbols in C++ code. +/// +//===----------------------------------------------------------------------===// + +#include "../USRFindingAction.h" +#include "../RenamingAction.h" +#include "clang/AST/ASTConsumer.h" +#include "clang/AST/ASTContext.h" +#include "clang/Basic/FileManager.h" +#include "clang/Basic/LangOptions.h" +#include "clang/Basic/TargetInfo.h" +#include "clang/Basic/TargetOptions.h" +#include "clang/Frontend/CommandLineSourceLoc.h" +#include "clang/Frontend/CompilerInstance.h" +#include "clang/Frontend/FrontendAction.h" +#include "clang/Frontend/TextDiagnosticPrinter.h" +#include "clang/Lex/Preprocessor.h" +#include "clang/Lex/Lexer.h" +#include "clang/Parse/Parser.h" +#include "clang/Parse/ParseAST.h" +#include "clang/Rewrite/Core/Rewriter.h" +#include "clang/Tooling/CommonOptionsParser.h" +#include "clang/Tooling/Refactoring.h" +#include "clang/Tooling/Tooling.h" +#include "llvm/ADT/IntrusiveRefCntPtr.h" +#include "llvm/Support/Host.h" +#include <stdio.h> +#include <stdlib.h> +#include <time.h> +#include <ctype.h> +#include <string> +#include <vector> + +using namespace llvm; + +cl::OptionCategory ClangRenameCategory("Clang-rename options"); + +static cl::opt<std::string> +NewName( + "new-name", + cl::desc("The new name to change the symbol to."), + cl::cat(ClangRenameCategory)); +static cl::opt<unsigned> +SymbolOffset( + "offset", + cl::desc("Locates the symbol by offset as opposed to <line>:<column>."), + cl::cat(ClangRenameCategory)); +static cl::opt<bool> +Inplace( + "i", + cl::desc("Overwrite edited <file>s."), + cl::cat(ClangRenameCategory)); +static cl::opt<bool> +PrintName( + "pn", + cl::desc("Print the found symbol's name prior to renaming to stderr."), + cl::cat(ClangRenameCategory)); +static cl::opt<bool> +PrintLocations( + "pl", + cl::desc("Print the locations affected by renaming to stderr."), + cl::cat(ClangRenameCategory)); + +#define CLANG_RENAME_VERSION "0.0.1" + +static void PrintVersion() { + outs() << "clang-rename version " << CLANG_RENAME_VERSION << "\n"; +} + +using namespace clang; + +const char RenameUsage[] = "A tool to rename symbols in C/C++ code.\n\ +clang-rename renames every occurrence of a symbol found at <offset> in\n\ +<source0>. If -i is specified, the edited files are overwritten to disk.\n\ +Otherwise, the results are written to stdout.\n"; + +int main(int argc, const char **argv) { + cl::SetVersionPrinter(PrintVersion); + tooling::CommonOptionsParser OP(argc, argv, ClangRenameCategory, RenameUsage); + + // Check the arguments for correctness. + + if (NewName.empty()) { + errs() << "clang-rename: no new name provided.\n\n"; + cl::PrintHelpMessage(); + exit(1); + } + + // Get the USRs. + auto Files = OP.getSourcePathList(); + tooling::RefactoringTool Tool(OP.getCompilations(), Files); + rename::USRFindingAction USRAction(SymbolOffset); + + // Find the USRs. + Tool.run(tooling::newFrontendActionFactory(&USRAction).get()); + const auto &USRs = USRAction.getUSRs(); + const auto &PrevName = USRAction.getUSRSpelling(); + + if (PrevName.empty()) + // An error should have already been printed. + exit(1); + + if (PrintName) + errs() << "clang-rename: found name: " << PrevName; + + // Perform the renaming. + rename::RenamingAction RenameAction(NewName, PrevName, USRs, + Tool.getReplacements(), PrintLocations); + auto Factory = tooling::newFrontendActionFactory(&RenameAction); + int res; + + if (Inplace) { + res = Tool.runAndSave(Factory.get()); + } else { + res = Tool.run(Factory.get()); + + // Write every file to stdout. Right now we just barf the files without any + // indication of which files start where, other than that we print the files + // in the same order we see them. + LangOptions DefaultLangOptions; + IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = + new DiagnosticOptions(); + TextDiagnosticPrinter DiagnosticPrinter(errs(), &*DiagOpts); + DiagnosticsEngine Diagnostics( + IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs()), + &*DiagOpts, &DiagnosticPrinter, false); + auto &FileMgr = Tool.getFiles(); + SourceManager Sources(Diagnostics, FileMgr); + Rewriter Rewrite(Sources, DefaultLangOptions); + + Tool.applyAllReplacements(Rewrite); + for (const auto &File : Files) { + const auto *Entry = FileMgr.getFile(File); + auto ID = Sources.translateFile(Entry); + Rewrite.getEditBuffer(ID).write(outs()); + } + } + + exit(res); +} diff --git a/clang-rename/tool/Makefile b/clang-rename/tool/Makefile new file mode 100644 index 0000000..0f3b962 --- /dev/null +++ b/clang-rename/tool/Makefile @@ -0,0 +1,12 @@ +CLANG_LEVEL := ../../../.. +TOOLNAME = clang-rename +include $(CLANG_LEVEL)/../../Makefile.config +LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option +USEDLIBS = clangRename.a clangFrontend.a clangSerialization.a clangDriver.a \ + clangTooling.a clangParse.a clangSema.a clangIndex.a \ + clangStaticAnalyzerFrontend.a clangStaticAnalyzerCheckers.a \ + clangStaticAnalyzerCore.a clangAnalysis.a clangRewriteFrontend.a \ + clangRewrite.a clangEdit.a clangAST.a clangLex.a clangBasic.a + +include $(CLANG_LEVEL)/Makefile + diff --git a/unittests/Makefile b/unittests/Makefile index fc781b6..ae5f64a 100644 --- a/unittests/Makefile +++ b/unittests/Makefile @@ -10,6 +10,6 @@ CLANG_LEVEL := ../../.. include $(CLANG_LEVEL)/../../Makefile.config -PARALLEL_DIRS := clang-apply-replacements clang-modernize clang-query clang-tidy +PARALLEL_DIRS := clang-apply-replacements clang-modernize clang-query clang-tidy clang-rename include $(CLANG_LEVEL)/Makefile diff --git a/unittests/clang-rename/Makefile b/unittests/clang-rename/Makefile index c86d132..f21ec90 100644 --- a/unittests/clang-rename/Makefile +++ b/unittests/clang-rename/Makefile @@ -13,12 +13,13 @@ include $(CLANG_LEVEL)/../../Makefile.config TESTNAME = ClangRenameTests LINK_COMPONENTS := asmparser bitreader support MC MCParser option \ TransformUtils -USEDLIBS = clangAnalysis.a clangAST.a clangBasic.a clangDriver.a clangEdit.a \ - clangFrontend.a clangFrontendTool.a clangIndex.a clangLex.a \ - clangParse.a clangRewrite.a clangRewriteFrontend.a \ - clangSerialization.a clangSema.a clangTooling.a - +USEDLIBS = clangRename.a clangFrontend.a clangSerialization.a clangDriver.a \ + clangTooling.a clangParse.a clangSema.a clangIndex.a \ + clangStaticAnalyzerFrontend.a clangStaticAnalyzerCheckers.a \ + clangStaticAnalyzerCore.a clangAnalysis.a clangRewriteFrontend.a \ + clangRewrite.a clangEdit.a clangAST.a clangLex.a clangBasic.a + include $(CLANG_LEVEL)/Makefile MAKEFILE_UNITTEST_NO_INCLUDE_COMMON := 1 -CPP.Flags += -I(PROJ_SRC_DIR)/../../clang-rename +CPP.Flags += -I$(PROJ_SRC_DIR)/../../clang-rename include $(LLVM_SRC_ROOT)/unittests/Makefile.unittest -- 1.9.1
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
