[PATCH] D116643: [clangd] Don't rename on symbols from system headers.
Haojian Wu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jan 10 05:15:13 PST 2022
hokein updated this revision to Diff 398588.
hokein marked 3 inline comments as done.
hokein added a comment.
address comments.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D116643/new/
https://reviews.llvm.org/D116643
Files:
clang-tools-extra/clangd/refactor/Rename.cpp
clang-tools-extra/clangd/unittests/RenameTests.cpp
Index: clang-tools-extra/clangd/unittests/RenameTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/RenameTests.cpp
+++ clang-tools-extra/clangd/unittests/RenameTests.cpp
@@ -1198,6 +1198,29 @@
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());
Index: clang-tools-extra/clangd/refactor/Rename.cpp
===================================================================
--- clang-tools-extra/clangd/refactor/Rename.cpp
+++ clang-tools-extra/clangd/refactor/Rename.cpp
@@ -159,13 +159,17 @@
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"
@@ -248,6 +252,7 @@
}
llvm_unreachable("unhandled reason kind");
};
+ // abc
return error("Cannot rename symbol: {0}", Message(Reason));
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D116643.398588.patch
Type: text/x-patch
Size: 2659 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220110/1f903749/attachment.bin>
More information about the cfe-commits
mailing list