forked from OSchip/llvm-project
[clang-tidy] Fix type names in modernize-use-unique/shared_ptr checks.
Summary: If the class being created in unique_ptr is in anonymous nampespace, the anonymous namespace will be included in the apply-fixes. This patch fix this. ``` namespace { class Foo {}; } std::unique_ptr<Foo> f; f.reset(new Foo()); // Before the change: f = std::make_unique<(annonymous namespace)::Foo>(); // After the change: f = std::make_unique<Foo>(); ``` Reviewers: alexfh Reviewed By: alexfh Subscribers: JDevlieghere, xazax.hun, cfe-commits Differential Revision: https://reviews.llvm.org/D34286 llvm-svn: 306378
This commit is contained in:
parent
f31b0dc473
commit
665494cada
|
@ -16,6 +16,17 @@ namespace clang {
|
|||
namespace tidy {
|
||||
namespace modernize {
|
||||
|
||||
namespace {
|
||||
StringRef GetNewExprName(const CXXNewExpr *NewExpr,
|
||||
const SourceManager &SM,
|
||||
const LangOptions &Lang) {
|
||||
return Lexer::getSourceText(
|
||||
CharSourceRange::getTokenRange(
|
||||
NewExpr->getAllocatedTypeSourceInfo()->getTypeLoc().getSourceRange()),
|
||||
SM, Lang);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
const char MakeSmartPtrCheck::PointerType[] = "pointerType";
|
||||
const char MakeSmartPtrCheck::ConstructorCall[] = "constructorCall";
|
||||
const char MakeSmartPtrCheck::ResetCall[] = "resetCall";
|
||||
|
@ -87,7 +98,7 @@ void MakeSmartPtrCheck::checkConstruct(SourceManager &SM,
|
|||
StringRef ExprStr = Lexer::getSourceText(
|
||||
CharSourceRange::getCharRange(
|
||||
ConstructCallStart, Construct->getParenOrBraceRange().getBegin()),
|
||||
SM, LangOptions(), &Invalid);
|
||||
SM, getLangOpts(), &Invalid);
|
||||
if (Invalid)
|
||||
return;
|
||||
|
||||
|
@ -102,7 +113,8 @@ void MakeSmartPtrCheck::checkConstruct(SourceManager &SM,
|
|||
// we have to add it back.
|
||||
ConstructCallEnd = ConstructCallStart.getLocWithOffset(ExprStr.size());
|
||||
Diag << FixItHint::CreateInsertion(
|
||||
ConstructCallEnd, "<" + Type->getAsString(getLangOpts()) + ">");
|
||||
ConstructCallEnd,
|
||||
"<" + GetNewExprName(New, SM, getLangOpts()).str() + ">");
|
||||
} else {
|
||||
ConstructCallEnd = ConstructCallStart.getLocWithOffset(LAngle);
|
||||
}
|
||||
|
@ -144,7 +156,7 @@ void MakeSmartPtrCheck::checkReset(SourceManager &SM,
|
|||
Diag << FixItHint::CreateReplacement(
|
||||
CharSourceRange::getCharRange(OperatorLoc, ExprEnd),
|
||||
(llvm::Twine(" = ") + makeSmartPtrFunctionName + "<" +
|
||||
New->getAllocatedType().getAsString(getLangOpts()) + ">")
|
||||
GetNewExprName(New, SM, getLangOpts()) + ">")
|
||||
.str());
|
||||
|
||||
if (Expr->isArrow())
|
||||
|
|
|
@ -49,6 +49,14 @@ struct DPair {
|
|||
|
||||
struct Empty {};
|
||||
|
||||
namespace {
|
||||
class Foo {};
|
||||
} // namespace
|
||||
|
||||
namespace bar {
|
||||
class Bar {};
|
||||
} // namespace bar
|
||||
|
||||
template <class T>
|
||||
using unique_ptr_ = std::unique_ptr<T>;
|
||||
|
||||
|
@ -239,6 +247,20 @@ void initialization(int T, Base b) {
|
|||
std::unique_ptr<Empty> PEmpty = std::unique_ptr<Empty>(new Empty{});
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:35: warning: use std::make_unique instead
|
||||
// CHECK-FIXES: std::unique_ptr<Empty> PEmpty = std::make_unique<Empty>(Empty{});
|
||||
|
||||
std::unique_ptr<Foo> FF = std::unique_ptr<Foo>(new Foo());
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:29: warning:
|
||||
// CHECK-FIXES: std::unique_ptr<Foo> FF = std::make_unique<Foo>();
|
||||
FF.reset(new Foo());
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning:
|
||||
// CHECK-FIXES: FF = std::make_unique<Foo>();
|
||||
|
||||
std::unique_ptr<bar::Bar> BB = std::unique_ptr<bar::Bar>(new bar::Bar());
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:34: warning:
|
||||
// CHECK-FIXES: std::unique_ptr<bar::Bar> BB = std::make_unique<bar::Bar>();
|
||||
BB.reset(new bar::Bar());
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning:
|
||||
// CHECK-FIXES: BB = std::make_unique<bar::Bar>();
|
||||
}
|
||||
|
||||
void aliases() {
|
||||
|
|
Loading…
Reference in New Issue