imctrading created this revision.
imctrading added reviewers: klimek, dcastagna, arphaman.
Herald added a subscriber: jeroen.dobbelaere.
Herald added a project: All.
imctrading requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

`RecursiveSymbolVisitor` - used by clang-rename does not visit namespace 
aliases and using directives. This patch fixes that.
This allows the tool to be used to rename namespaces.

Fixes https://github.com/llvm/llvm-project/issues/57194


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D133298

Files:
  clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h
  clang/test/clang-rename/Namespace.cpp


Index: clang/test/clang-rename/Namespace.cpp
===================================================================
--- clang/test/clang-rename/Namespace.cpp
+++ clang/test/clang-rename/Namespace.cpp
@@ -6,6 +6,9 @@
   gcc::x = 42;                // CHECK: clang::x = 42;
 }
 
+namespace gcc_alias = gcc; // CHECK: namespace gcc_alias = clang;
+using namespace gcc; // CHECK: using namespace clang;
+
 // Test 1.
 // RUN: clang-rename -offset=10 -new-name=clang %s -- | sed 's,//.*,,' | 
FileCheck %s
 
Index: clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h
===================================================================
--- clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h
+++ clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h
@@ -133,6 +133,14 @@
     return true;
   }
 
+  bool VisitNamespaceAliasDecl(NamespaceAliasDecl *Declaration) {
+    return visit(Declaration->getAliasedNamespace(), 
Declaration->getTargetNameLoc(), Declaration->getEndLoc());
+  }
+
+  bool VisitUsingDirectiveDecl(UsingDirectiveDecl *Declaration) {
+    return visit(Declaration->getNominatedNamespace(), 
Declaration->getIdentLocation(), Declaration->getEndLoc());
+  }
+
 private:
   const SourceManager &SM;
   const LangOptions &LangOpts;


Index: clang/test/clang-rename/Namespace.cpp
===================================================================
--- clang/test/clang-rename/Namespace.cpp
+++ clang/test/clang-rename/Namespace.cpp
@@ -6,6 +6,9 @@
   gcc::x = 42;                // CHECK: clang::x = 42;
 }
 
+namespace gcc_alias = gcc; // CHECK: namespace gcc_alias = clang;
+using namespace gcc; // CHECK: using namespace clang;
+
 // Test 1.
 // RUN: clang-rename -offset=10 -new-name=clang %s -- | sed 's,//.*,,' | FileCheck %s
 
Index: clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h
===================================================================
--- clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h
+++ clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h
@@ -133,6 +133,14 @@
     return true;
   }
 
+  bool VisitNamespaceAliasDecl(NamespaceAliasDecl *Declaration) {
+    return visit(Declaration->getAliasedNamespace(), Declaration->getTargetNameLoc(), Declaration->getEndLoc());
+  }
+
+  bool VisitUsingDirectiveDecl(UsingDirectiveDecl *Declaration) {
+    return visit(Declaration->getNominatedNamespace(), Declaration->getIdentLocation(), Declaration->getEndLoc());
+  }
+
 private:
   const SourceManager &SM;
   const LangOptions &LangOpts;
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to