vmiklos updated this revision to Diff 64231.
https://reviews.llvm.org/D21814
Files:
clang-rename/tool/ClangRename.cpp
clang-rename/tool/clang-rename.py
docs/clang-rename.rst
test/clang-rename/ClassFindByName.cpp
test/clang-rename/ClassReplacements.cpp
test/clang-rename/ClassSimpleRenaming.cpp
test/clang-rename/ConstCastExpr.cpp
test/clang-rename/ConstructExpr.cpp
test/clang-rename/CtorFindByDeclaration.cpp
test/clang-rename/CtorFindByDefinition.cpp
test/clang-rename/CtorInitializer.cpp
test/clang-rename/DeclRefExpr.cpp
test/clang-rename/DtorDeclaration.cpp
test/clang-rename/DtorDefinition.cpp
test/clang-rename/DynamicCastExpr.cpp
test/clang-rename/Field.cpp
test/clang-rename/FunctionMacro.cpp
test/clang-rename/MemberExprMacro.cpp
test/clang-rename/Namespace.cpp
test/clang-rename/NoNewName.cpp
test/clang-rename/ReinterpretCastExpr.cpp
test/clang-rename/StaticCastExpr.cpp
test/clang-rename/Variable.cpp
test/clang-rename/VariableMacro.cpp
Index: test/clang-rename/VariableMacro.cpp
===================================================================
--- test/clang-rename/VariableMacro.cpp
+++ test/clang-rename/VariableMacro.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=208 -new-name=Z %t.cpp -i --
+// RUN: clang-rename rename-at -offset=218 -new-name=Z %t.cpp -i --
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
#define Y X // CHECK: #define Y Z
Index: test/clang-rename/Variable.cpp
===================================================================
--- test/clang-rename/Variable.cpp
+++ test/clang-rename/Variable.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=148 -new-name=Bar %t.cpp -i --
+// RUN: clang-rename rename-at -offset=158 -new-name=Bar %t.cpp -i --
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
namespace A {
Index: test/clang-rename/StaticCastExpr.cpp
===================================================================
--- test/clang-rename/StaticCastExpr.cpp
+++ test/clang-rename/StaticCastExpr.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=152 -new-name=Bar %t.cpp -i --
+// RUN: clang-rename rename-at -offset=162 -new-name=Bar %t.cpp -i --
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
class Baz {
Index: test/clang-rename/ReinterpretCastExpr.cpp
===================================================================
--- test/clang-rename/ReinterpretCastExpr.cpp
+++ test/clang-rename/ReinterpretCastExpr.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=133 -new-name=X %t.cpp -i --
+// RUN: clang-rename rename-at -offset=143 -new-name=X %t.cpp -i --
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
class Cla {
public:
Index: test/clang-rename/NoNewName.cpp
===================================================================
--- test/clang-rename/NoNewName.cpp
+++ test/clang-rename/NoNewName.cpp
@@ -1,4 +1,4 @@
// Check for an error while -new-name argument has not been passed to
// clang-rename.
-// RUN: not clang-rename -offset=133 %s 2>&1 | FileCheck %s
+// RUN: not clang-rename rename-at -offset=133 %s 2>&1 | FileCheck %s
// CHECK: clang-rename: no new name provided.
Index: test/clang-rename/Namespace.cpp
===================================================================
--- test/clang-rename/Namespace.cpp
+++ test/clang-rename/Namespace.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=143 -new-name=llvm %t.cpp -i --
+// RUN: clang-rename rename-at -offset=153 -new-name=llvm %t.cpp -i --
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
namespace foo { // CHECK: namespace llvm {
Index: test/clang-rename/MemberExprMacro.cpp
===================================================================
--- test/clang-rename/MemberExprMacro.cpp
+++ test/clang-rename/MemberExprMacro.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=156 -new-name=Bar %t.cpp -i --
+// RUN: clang-rename rename-at -offset=166 -new-name=Bar %t.cpp -i --
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
class Baz {
Index: test/clang-rename/FunctionMacro.cpp
===================================================================
--- test/clang-rename/FunctionMacro.cpp
+++ test/clang-rename/FunctionMacro.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=199 -new-name=macro_function %t.cpp -i --
+// RUN: clang-rename rename-at -offset=209 -new-name=macro_function %t.cpp -i --
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
#define moo foo // CHECK: #define moo macro_function
Index: test/clang-rename/Field.cpp
===================================================================
--- test/clang-rename/Field.cpp
+++ test/clang-rename/Field.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=148 -new-name=Bar %t.cpp -i --
+// RUN: clang-rename rename-at -offset=158 -new-name=Bar %t.cpp -i --
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
class Baz {
Index: test/clang-rename/DynamicCastExpr.cpp
===================================================================
--- test/clang-rename/DynamicCastExpr.cpp
+++ test/clang-rename/DynamicCastExpr.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=195 -new-name=Bar %t.cpp -i -- -frtti
+// RUN: clang-rename rename-at -offset=205 -new-name=Bar %t.cpp -i -- -frtti
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
class Baz {
Index: test/clang-rename/DtorDefinition.cpp
===================================================================
--- test/clang-rename/DtorDefinition.cpp
+++ test/clang-rename/DtorDefinition.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=219 -new-name=Bar %t.cpp -i --
+// RUN: clang-rename rename-at -offset=229 -new-name=Bar %t.cpp -i --
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
class Foo { // CHECK: class Bar {
Index: test/clang-rename/DtorDeclaration.cpp
===================================================================
--- test/clang-rename/DtorDeclaration.cpp
+++ test/clang-rename/DtorDeclaration.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=175 -new-name=Bar %t.cpp -i --
+// RUN: clang-rename rename-at -offset=185 -new-name=Bar %t.cpp -i --
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
class Foo { // CHECK: class Bar {
Index: test/clang-rename/DeclRefExpr.cpp
===================================================================
--- test/clang-rename/DeclRefExpr.cpp
+++ test/clang-rename/DeclRefExpr.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=161 -new-name=Bar %t.cpp -i --
+// RUN: clang-rename rename-at -offset=171 -new-name=Bar %t.cpp -i --
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
class C {
Index: test/clang-rename/CtorInitializer.cpp
===================================================================
--- test/clang-rename/CtorInitializer.cpp
+++ test/clang-rename/CtorInitializer.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=163 -new-name=Bar %t.cpp -i --
+// RUN: clang-rename rename-at -offset=173 -new-name=Bar %t.cpp -i --
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
class Baz {};
Index: test/clang-rename/CtorFindByDefinition.cpp
===================================================================
--- test/clang-rename/CtorFindByDefinition.cpp
+++ test/clang-rename/CtorFindByDefinition.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=212 -new-name=Bar %t.cpp -i --
+// RUN: clang-rename rename-at -offset=222 -new-name=Bar %t.cpp -i --
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
class Foo { // CHECK: class Bar
Index: test/clang-rename/CtorFindByDeclaration.cpp
===================================================================
--- test/clang-rename/CtorFindByDeclaration.cpp
+++ test/clang-rename/CtorFindByDeclaration.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=174 -new-name=Bar %t.cpp -i --
+// RUN: clang-rename rename-at -offset=184 -new-name=Bar %t.cpp -i --
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
class Foo { // CHECK: class Bar
Index: test/clang-rename/ConstructExpr.cpp
===================================================================
--- test/clang-rename/ConstructExpr.cpp
+++ test/clang-rename/ConstructExpr.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=136 -new-name=Boo %t.cpp -i --
+// RUN: clang-rename rename-at -offset=146 -new-name=Boo %t.cpp -i --
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
class Foo {}; // CHECK: class Boo {};
Index: test/clang-rename/ConstCastExpr.cpp
===================================================================
--- test/clang-rename/ConstCastExpr.cpp
+++ test/clang-rename/ConstCastExpr.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=136 -new-name=Bar %t.cpp -i --
+// RUN: clang-rename rename-at -offset=146 -new-name=Bar %t.cpp -i --
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
class Foo { // CHECK: class Bar {
Index: test/clang-rename/ClassSimpleRenaming.cpp
===================================================================
--- test/clang-rename/ClassSimpleRenaming.cpp
+++ test/clang-rename/ClassSimpleRenaming.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=136 -new-name=Bar %t.cpp -i --
+// RUN: clang-rename rename-at -offset=146 -new-name=Bar %t.cpp -i --
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
class Foo {}; // CHECK: class Bar
Index: test/clang-rename/ClassReplacements.cpp
===================================================================
--- test/clang-rename/ClassReplacements.cpp
+++ test/clang-rename/ClassReplacements.cpp
@@ -1,7 +1,7 @@
// RUN: rm -rf %t
// RUN: mkdir -p %t/fixes
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=254 -new-name=Bar -export-fixes=%t/fixes/clang-rename.yaml %t.cpp --
+// RUN: clang-rename rename-at -offset=264 -new-name=Bar -export-fixes=%t/fixes/clang-rename.yaml %t.cpp --
// RUN: clang-apply-replacements %t
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
Index: test/clang-rename/ClassFindByName.cpp
===================================================================
--- test/clang-rename/ClassFindByName.cpp
+++ test/clang-rename/ClassFindByName.cpp
@@ -1,5 +1,5 @@
// RUN: cat %s > %t.cpp
-// RUN: clang-rename -old-name=Foo -new-name=Bar %t.cpp -i --
+// RUN: clang-rename rename-all -old-name=Foo -new-name=Bar %t.cpp -i --
// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
class Foo { // CHECK: class Bar
Index: docs/clang-rename.rst
===================================================================
--- docs/clang-rename.rst
+++ docs/clang-rename.rst
@@ -32,7 +32,7 @@
.. code-block:: console
- $ clang-rename -offset=42 -new-name=foo test.cpp -- -Imy_project/include -DMY_DEFINES ...
+ $ clang-rename rename-at -offset=42 -new-name=foo test.cpp -- -Imy_project/include -DMY_DEFINES ...
To get an offset of a symbol in a file run
@@ -42,6 +42,14 @@
$ grep -FUbo 'foo' file.cpp
+You can also identify a symbol to be renamed by giving its fully qualified
+name:
+
+.. code-block:: console
+
+ $ clang-rename rename-all -old-name=foo -new-name=bar test.cpp
+
+
The tool currently supports renaming actions inside a single Translation Unit
only. It is planned to extend the tool's functionality to support multi-TU
renaming actions in the future.
@@ -55,34 +63,72 @@
.. code-block:: console
$ clang-rename -help
+ Usage: clang-rename {rename-at|rename-all} [OPTION]...
+
+ A tool to rename symbols in C/C++ code.
+
+ Subcommands:
+ rename-at: Perform rename off of a location in a file.
+ rename-all: Perform rename of all symbols matching a fully qualified name.
+
+
+.. code-block:: console
+
+ $ clang-rename rename-at -help
OVERVIEW: A tool to rename symbols in C/C++ code.
clang-rename renames every occurrence of a symbol found at <offset> in
<source0>. If -i is specified, the edited files are overwritten to disk.
Otherwise, the results are written to stdout.
-
- USAGE: clang-rename [subcommand] [options] <source0> [... <sourceN>]
-
+
+ USAGE: clang-rename rename-at [subcommand] [options] <source0> [... <sourceN>]
+
OPTIONS:
+
+ Generic Options:
+
+ -help - Display available options (-help-hidden for more)
+ -help-list - Display list of available options (-help-list-hidden for more)
+ -version - Display the version of this program
- Clang-rename options:
+ clang-rename rename-at options:
-export-fixes=<filename> - YAML file to store suggested fixes in.
-extra-arg=<string> - Additional argument to append to the compiler command line
-extra-arg-before=<string> - Additional argument to prepend to the compiler command line
-i - Overwrite edited <file>s.
-new-name=<string> - The new name to change the symbol to.
-offset=<uint> - Locates the symbol by offset as opposed to <line>:<column>.
- -old-name=<string> - The fully qualified name of the symbol, if -offset is not used.
-p=<string> - Build path
-pl - Print the locations affected by renaming to stderr.
-pn - Print the found symbol's name prior to renaming to stderr.
+
+.. code-block:: console
+
+ $ ~/git/llvm/workdir/bin/clang-rename rename-all -help
+ OVERVIEW: A tool to rename symbols in C/C++ code.
+ clang-rename renames every occurrence of a symbol named <old-name>.
+
+ USAGE: clang-rename rename-all [subcommand] [options] <source0> [... <sourceN>]
+
+ OPTIONS:
+
Generic Options:
-help - Display available options (-help-hidden for more)
-help-list - Display list of available options (-help-list-hidden for more)
-version - Display the version of this program
+ clang-rename rename-all options:
+
+ -export-fixes=<filename> - YAML file to store suggested fixes in.
+ -extra-arg=<string> - Additional argument to append to the compiler command line
+ -extra-arg-before=<string> - Additional argument to prepend to the compiler command line
+ -i - Overwrite edited <file>s.
+ -new-name=<string> - The new name to change the symbol to.
+ -old-name=<string> - The fully qualified name of the symbol, if -offset is not used.
+ -p=<string> - Build path
+
clang-rename Vim integration
============================
Index: clang-rename/tool/clang-rename.py
===================================================================
--- clang-rename/tool/clang-rename.py
+++ clang-rename/tool/clang-rename.py
@@ -40,6 +40,7 @@
# Call clang-rename.
command = [binary,
+ "rename-at",
filename,
'-i',
'-offset', str(offset),
Index: clang-rename/tool/ClangRename.cpp
===================================================================
--- clang-rename/tool/ClangRename.cpp
+++ clang-rename/tool/ClangRename.cpp
@@ -40,44 +40,8 @@
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<std::string>
-OldName(
- "old-name",
- cl::desc("The fully qualified name of the symbol, if -offset is not used."),
- 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));
-static cl::opt<std::string>
-ExportFixes(
- "export-fixes",
- cl::desc("YAML file to store suggested fixes in."),
- cl::value_desc("filename"),
- cl::cat(ClangRenameCategory));
+cl::OptionCategory ClangRenameAtCategory("clang-rename rename-at options");
+cl::OptionCategory ClangRenameAllCategory("clang-rename rename-all options");
#define CLANG_RENAME_VERSION "0.0.1"
@@ -87,14 +51,68 @@
using namespace clang;
-const char RenameUsage[] = "A tool to rename symbols in C/C++ code.\n\
+const char RenameAtUsage[] = "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);
+const char RenameAllUsage[] = "A tool to rename symbols in C/C++ code.\n\
+clang-rename renames every occurrence of a symbol named <old-name>.\n";
+
+enum RenameSubcommand {
+ RenameAt, RenameAll
+};
+
+int subcommandMain(RenameSubcommand Subcommand, int argc, const char **argv) {
+ cl::OptionCategory *Category = nullptr;
+ const char *Usage = nullptr;
+ if (Subcommand == RenameAt) {
+ Category = &ClangRenameAtCategory;
+ Usage = RenameAtUsage;
+ } else {
+ assert(Subcommand == RenameAll);
+ Category = &ClangRenameAllCategory;
+ Usage = RenameAllUsage;
+ }
+
+ cl::opt<std::string>
+ NewName(
+ "new-name",
+ cl::desc("The new name to change the symbol to."),
+ cl::cat(*Category));
+ cl::opt<unsigned>
+ SymbolOffset(
+ "offset",
+ cl::desc("Locates the symbol by offset as opposed to <line>:<column>."),
+ cl::cat(ClangRenameAtCategory));
+ cl::opt<std::string>
+ OldName(
+ "old-name",
+ cl::desc("The fully qualified name of the symbol, if -offset is not used."),
+ cl::cat(ClangRenameAllCategory));
+ cl::opt<bool>
+ Inplace(
+ "i",
+ cl::desc("Overwrite edited <file>s."),
+ cl::cat(*Category));
+ cl::opt<bool>
+ PrintName(
+ "pn",
+ cl::desc("Print the found symbol's name prior to renaming to stderr."),
+ cl::cat(ClangRenameAtCategory));
+ cl::opt<bool>
+ PrintLocations(
+ "pl",
+ cl::desc("Print the locations affected by renaming to stderr."),
+ cl::cat(ClangRenameAtCategory));
+ cl::opt<std::string>
+ ExportFixes(
+ "export-fixes",
+ cl::desc("YAML file to store suggested fixes in."),
+ cl::value_desc("filename"),
+ cl::cat(*Category));
+
+ tooling::CommonOptionsParser OP(argc, argv, *Category, Usage);
// Check the arguments for correctness.
@@ -177,3 +195,52 @@
exit(ExitCode);
}
+
+/// \brief Top level help.
+static int helpMain(int argc, const char *argv[]) {
+ errs() << "Usage: clang-rename {rename-at|rename-all} [OPTION]...\n\n"
+ << "A tool to rename symbols in C/C++ code.\n\n"
+ << "Subcommands:\n"
+ << " rename-at: Perform rename off of a location in a file.\n"
+ << " rename-all: Perform rename of all symbols matching a fully qualified name.\n";
+ return 0;
+}
+
+/// \brief Top level version information.
+static int versionMain(int argc, const char *argv[]) {
+ cl::PrintVersionMessage();
+ return 0;
+}
+
+static int renameAtMain(int argc, const char *argv[]) {
+ return subcommandMain(RenameAt, argc, argv);
+}
+static int renameAllMain(int argc, const char *argv[]) {
+ return subcommandMain(RenameAll, argc, argv);
+}
+
+int main(int argc, const char **argv) {
+ cl::SetVersionPrinter(PrintVersion);
+
+ if (argc > 1) {
+ typedef int (*MainFunction)(int, const char *[]);
+ MainFunction Func = StringSwitch<MainFunction>(argv[1])
+ .Case("rename-at", renameAtMain)
+ .Case("rename-all", renameAllMain)
+ .Cases("-help", "--help", helpMain)
+ .Cases("-version", "--version", versionMain)
+ .Default(nullptr);
+
+ if (Func) {
+ std::string Invocation = std::string(argv[0]) + " " + argv[1];
+ argv[1] = Invocation.c_str();
+ return Func(argc - 1, argv + 1);
+ }
+ }
+
+ if (argc > 1) {
+ errs() << "clang-rename: unrecognized command: " << argv[1] << '\n';
+ }
+ helpMain(argc, argv);
+ return 1;
+}
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits