forked from OSchip/llvm-project
[clang-rename] Better renaming the typedef decl.
Summary: when renaming a typedef decl, we used to rename the underlying decl of the typedef, we should rename the typedef itself. Subscribers: cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D68322 llvm-svn: 373440
This commit is contained in:
parent
e503256790
commit
fbd134f969
|
@ -98,7 +98,17 @@ public:
|
|||
TypeBeginLoc, TypeEndLoc))
|
||||
return false;
|
||||
}
|
||||
return visit(Loc.getType()->getAsCXXRecordDecl(), TypeBeginLoc, TypeEndLoc);
|
||||
if (const Type *TP = Loc.getTypePtr()) {
|
||||
if (TP->getTypeClass() == clang::Type::Record)
|
||||
return visit(TP->getAsCXXRecordDecl(), TypeBeginLoc, TypeEndLoc);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool VisitTypedefTypeLoc(TypedefTypeLoc TL) {
|
||||
const SourceLocation TypeEndLoc =
|
||||
Lexer::getLocForEndOfToken(TL.getBeginLoc(), 0, SM, LangOpts);
|
||||
return visit(TL.getTypedefNameDecl(), TL.getBeginLoc(), TypeEndLoc);
|
||||
}
|
||||
|
||||
bool TraverseNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS) {
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
namespace std {
|
||||
class basic_string {};
|
||||
typedef basic_string string;
|
||||
} // namespace std
|
||||
|
||||
std::string foo(); // // CHECK: std::new_string foo();
|
||||
|
||||
// RUN: clang-rename -offset=93 -new-name=new_string %s -- | sed 's,//.*,,' | FileCheck %s
|
Loading…
Reference in New Issue