forked from OSchip/llvm-project
[clangd] Don't rename on symbols from system headers.
Fixes https://github.com/clangd/clangd/issues/963. Differential Revision: https://reviews.llvm.org/D116643
This commit is contained in:
parent
aa7f0e6a55
commit
192f8d9700
|
@ -159,13 +159,17 @@ llvm::DenseSet<const NamedDecl *> locateDeclAt(ParsedAST &AST,
|
|||
return Result;
|
||||
}
|
||||
|
||||
// By default, we exclude C++ standard symbols and protobuf symbols as rename
|
||||
// these symbols would change system/generated files which are unlikely to be
|
||||
// modified.
|
||||
// By default, we exclude symbols from system headers and protobuf symbols as
|
||||
// renaming these symbols would change system/generated files which are unlikely
|
||||
// to be good candidates for modification.
|
||||
bool isExcluded(const NamedDecl &RenameDecl) {
|
||||
if (isProtoFile(RenameDecl.getLocation(),
|
||||
RenameDecl.getASTContext().getSourceManager()))
|
||||
const auto &SM = RenameDecl.getASTContext().getSourceManager();
|
||||
if (SM.isInSystemHeader(RenameDecl.getLocation()))
|
||||
return true;
|
||||
if (isProtoFile(RenameDecl.getLocation(), SM))
|
||||
return true;
|
||||
// FIXME: Remove this std symbol list, as they should be covered by the
|
||||
// above isInSystemHeader check.
|
||||
static const auto *StdSymbols = new llvm::DenseSet<llvm::StringRef>({
|
||||
#define SYMBOL(Name, NameSpace, Header) {#NameSpace #Name},
|
||||
#include "StdSymbolMap.inc"
|
||||
|
|
|
@ -1198,6 +1198,29 @@ TEST(RenameTest, MainFileReferencesOnly) {
|
|||
expectedResult(Code, NewName));
|
||||
}
|
||||
|
||||
TEST(RenameTest, NoRenameOnSymbolsFromSystemHeaders) {
|
||||
// filter out references not from main file.
|
||||
llvm::StringRef Test =
|
||||
R"cpp(
|
||||
#include <system>
|
||||
SystemSym^bol abc;
|
||||
)cpp";
|
||||
|
||||
Annotations Code(Test);
|
||||
auto TU = TestTU::withCode(Code.code());
|
||||
TU.AdditionalFiles["system"] = R"cpp(
|
||||
class SystemSymbol {};
|
||||
)cpp";
|
||||
TU.ExtraArgs = {"-isystem", testRoot()};
|
||||
auto AST = TU.build();
|
||||
llvm::StringRef NewName = "abcde";
|
||||
|
||||
auto Results = rename({Code.point(), NewName, AST, testPath(TU.Filename)});
|
||||
EXPECT_FALSE(Results) << "expected rename returned an error: " << Code.code();
|
||||
auto ActualMessage = llvm::toString(Results.takeError());
|
||||
EXPECT_THAT(ActualMessage, testing::HasSubstr("not a supported kind"));
|
||||
}
|
||||
|
||||
TEST(RenameTest, ProtobufSymbolIsExcluded) {
|
||||
Annotations Code("Prot^obuf buf;");
|
||||
auto TU = TestTU::withCode(Code.code());
|
||||
|
|
Loading…
Reference in New Issue