forked from OSchip/llvm-project
[change-namespace] get changing namespace to global correct.
llvm-svn: 288662
This commit is contained in:
parent
7a6252158e
commit
2dd0e1bca3
|
@ -210,7 +210,8 @@ std::string wrapCodeInNamespace(StringRef NestedNs, std::string Code) {
|
|||
if (Code.back() != '\n')
|
||||
Code += "\n";
|
||||
llvm::SmallVector<StringRef, 4> NsSplitted;
|
||||
NestedNs.split(NsSplitted, "::");
|
||||
NestedNs.split(NsSplitted, "::", /*MaxSplit=*/-1,
|
||||
/*KeepEmpty=*/false);
|
||||
while (!NsSplitted.empty()) {
|
||||
// FIXME: consider code style for comments.
|
||||
Code = ("namespace " + NsSplitted.back() + " {\n" + Code +
|
||||
|
@ -272,7 +273,9 @@ void ChangeNamespaceTool::registerMatchers(ast_matchers::MatchFinder *Finder) {
|
|||
// be "a::b". Declarations in this namespace will not be visible in the new
|
||||
// namespace. If DiffOldNamespace is empty, Prefix will be a invalid name "-".
|
||||
llvm::SmallVector<llvm::StringRef, 4> DiffOldNsSplitted;
|
||||
llvm::StringRef(DiffOldNamespace).split(DiffOldNsSplitted, "::");
|
||||
llvm::StringRef(DiffOldNamespace)
|
||||
.split(DiffOldNsSplitted, "::", /*MaxSplit=*/-1,
|
||||
/*KeepEmpty=*/false);
|
||||
std::string Prefix = "-";
|
||||
if (!DiffOldNsSplitted.empty())
|
||||
Prefix = (StringRef(FullOldNs).drop_back(DiffOldNamespace.size()) +
|
||||
|
|
|
@ -1114,6 +1114,42 @@ TEST_F(ChangeNamespaceTest, DerivedClassWithConstructorsAndTypeRefs) {
|
|||
EXPECT_EQ(format(Expected), runChangeNamespaceOnCode(Code));
|
||||
}
|
||||
|
||||
TEST_F(ChangeNamespaceTest, MoveToGlobalNamespace) {
|
||||
NewNamespace = "";
|
||||
std::string Code = "namespace na {\n"
|
||||
"class C_A {};\n"
|
||||
"namespace nc {\n"
|
||||
"class C_C {};"
|
||||
"} // namespace nc\n"
|
||||
"namespace nb {\n"
|
||||
"class C_X {\n"
|
||||
"public:\n"
|
||||
" C_A a;\n"
|
||||
" nc::C_C c;\n"
|
||||
"};\n"
|
||||
"class C_Y {\n"
|
||||
" C_X x;\n"
|
||||
"};\n"
|
||||
"} // namespace nb\n"
|
||||
"} // namespace na\n";
|
||||
std::string Expected = "namespace na {\n"
|
||||
"class C_A {};\n"
|
||||
"namespace nc {\n"
|
||||
"class C_C {};"
|
||||
"} // namespace nc\n"
|
||||
"\n"
|
||||
"} // namespace na\n"
|
||||
"class C_X {\n"
|
||||
"public:\n"
|
||||
" na::C_A a;\n"
|
||||
" na::nc::C_C c;\n"
|
||||
"};\n"
|
||||
"class C_Y {\n"
|
||||
" C_X x;\n"
|
||||
"};\n";
|
||||
EXPECT_EQ(format(Expected), runChangeNamespaceOnCode(Code));
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
} // namespace change_namespace
|
||||
} // namespace clang
|
||||
|
|
Loading…
Reference in New Issue