forked from OSchip/llvm-project
[clangd] Fix a regression issue in local rename.
Summary: The regression is that we can't rename symbols in annonymous namespaces. Reviewers: ilya-biryukov Subscribers: MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D70853
This commit is contained in:
parent
c653a52c85
commit
902dc6c69c
|
@ -123,20 +123,26 @@ llvm::Optional<ReasonToReject> renameable(const Decl &RenameDecl,
|
|||
if (RenameDecl.getParentFunctionOrMethod())
|
||||
return None;
|
||||
|
||||
// Check whether the symbol being rename is indexable.
|
||||
auto &ASTCtx = RenameDecl.getASTContext();
|
||||
bool MainFileIsHeader = isHeaderFile(MainFilePath, ASTCtx.getLangOpts());
|
||||
bool DeclaredInMainFile =
|
||||
isInsideMainFile(RenameDecl.getBeginLoc(), ASTCtx.getSourceManager());
|
||||
bool IsMainFileOnly = true;
|
||||
if (MainFileIsHeader)
|
||||
// main file is a header, the symbol can't be main file only.
|
||||
IsMainFileOnly = false;
|
||||
else if (!DeclaredInMainFile)
|
||||
IsMainFileOnly = false;
|
||||
bool IsIndexable =
|
||||
isa<NamedDecl>(RenameDecl) &&
|
||||
SymbolCollector::shouldCollectSymbol(
|
||||
cast<NamedDecl>(RenameDecl), RenameDecl.getASTContext(),
|
||||
SymbolCollector::Options(), CrossFile);
|
||||
SymbolCollector::Options(), IsMainFileOnly);
|
||||
if (!IsIndexable) // If the symbol is not indexable, we disallow rename.
|
||||
return ReasonToReject::NonIndexable;
|
||||
|
||||
if (!CrossFile) {
|
||||
auto &ASTCtx = RenameDecl.getASTContext();
|
||||
const auto &SM = ASTCtx.getSourceManager();
|
||||
bool MainFileIsHeader = isHeaderFile(MainFilePath, ASTCtx.getLangOpts());
|
||||
bool DeclaredInMainFile = isInsideMainFile(RenameDecl.getBeginLoc(), SM);
|
||||
|
||||
if (!DeclaredInMainFile)
|
||||
// We are sure the symbol is used externally, bail out early.
|
||||
return ReasonToReject::UsedOutsideFile;
|
||||
|
|
|
@ -450,13 +450,20 @@ TEST(RenameTest, Renameable) {
|
|||
)cpp",
|
||||
"used outside main file", HeaderFile, Index},
|
||||
|
||||
{R"cpp(// disallow -- symbol is not indexable.
|
||||
{R"cpp(// disallow -- symbol in annonymous namespace in header is not indexable.
|
||||
namespace {
|
||||
class Unin^dexable {};
|
||||
}
|
||||
)cpp",
|
||||
"not eligible for indexing", HeaderFile, Index},
|
||||
|
||||
{R"cpp(// allow -- symbol in annonymous namespace in non-header file is indexable.
|
||||
namespace {
|
||||
class [[F^oo]] {};
|
||||
}
|
||||
)cpp",
|
||||
nullptr, !HeaderFile, Index},
|
||||
|
||||
{R"cpp(// disallow -- namespace symbol isn't supported
|
||||
namespace n^s {}
|
||||
)cpp",
|
||||
|
|
Loading…
Reference in New Issue