[PATCH] D131088: [clang] Apply FixIts to members declared via `using` in derived classes
Denis Fatkulin via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Aug 3 12:05:32 PDT 2022
denis-fatkulin created this revision.
Herald added subscribers: usaxena95, kadircet, arphaman.
Herald added a project: All.
denis-fatkulin requested review of this revision.
Herald added projects: clang, clang-tools-extra.
Herald added a subscriber: cfe-commits.
FixIt don't switch to arrow in derrived members with `using`
Example code:
struct Bar {
void foo();
};
struct Baz {
using Bar::foo;
};
void test(Baz* ptr) {
ptr.^
}
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D131088
Files:
clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
clang/lib/Sema/SemaCodeComplete.cpp
clang/test/CodeCompletion/member-access.cpp
Index: clang/test/CodeCompletion/member-access.cpp
===================================================================
--- clang/test/CodeCompletion/member-access.cpp
+++ clang/test/CodeCompletion/member-access.cpp
@@ -311,3 +311,25 @@
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:310:19 %s -o - | FileCheck -check-prefix=CHECK-MEMBERS-FROM-BASE-DEPENDENT %s
// CHECK-MEMBERS-FROM-BASE-DEPENDENT: [#Base4#]base4
}
+
+namespace members_using_fixits {
+ struct Bar {
+ void method();
+ int field;
+ };
+ struct Baz: Bar {
+ using Bar::method;
+ using Bar::field;
+ };
+ void testMethod(Baz* ptr) {
+ ptr.m
+ }
+ // RUN: %clang_cc1 -fsyntax-only -code-completion-with-fixits -code-completion-at=%s:325:10 %s -o - | FileCheck -check-prefix=CHECK-METHOD-DECLARED-VIA-USING %s
+ // CHECK-METHOD-DECLARED-VIA-USING: [#void#]method() (requires fix-it: {325:8-325:9} to "->")
+
+ void testField(Baz* ptr) {
+ ptr.f
+ }
+ // RUN: %clang_cc1 -fsyntax-only -code-completion-with-fixits -code-completion-at=%s:331:10 %s -o - | FileCheck -check-prefix=CHECK-FIELD-DECLARED-VIA-USING %s
+ // CHECK-FIELD-DECLARED-VIA-USING: [#int#]field (requires fix-it: {331:8-331:9} to "->")
+}
Index: clang/lib/Sema/SemaCodeComplete.cpp
===================================================================
--- clang/lib/Sema/SemaCodeComplete.cpp
+++ clang/lib/Sema/SemaCodeComplete.cpp
@@ -1275,6 +1275,7 @@
(R.Availability == CXAvailability_Available ||
R.Availability == CXAvailability_Deprecated));
Result.ShadowDecl = Using;
+ Result.FixIts = R.FixIts;
AddResult(Result, CurContext, Hiding);
return;
}
Index: clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
+++ clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
@@ -2184,6 +2184,42 @@
EXPECT_TRUE(R.additionalTextEdits.empty());
}
+TEST(CompletionTest, FixItForMembersUsing) {
+ const Annotations Code(R"cpp(
+ struct Bar {
+ void method();
+ int field;
+ };
+ struct Baz : Bar {
+ using Bar::method;
+ using Bar::field;
+ };
+ void foo(Baz* ptr) {
+ ptr.m^ethod();
+ ptr.f^ield;
+ }
+ )cpp");
+
+ TestTU TU;
+ TU.Code = Code.code().str();
+ auto CheckCompletion = [&TU](const Position &Pos, const std::string &Name) {
+ clangd::CodeCompleteOptions Opts;
+ Opts.IncludeFixIts = true;
+
+ const auto Completions = completions(TU, Pos, {}, Opts).Completions;
+ ASSERT_EQ(Completions.size(), 1u);
+ EXPECT_EQ(Completions[0].Name, Name);
+
+ const auto R = Completions[0].render(Opts);
+ ASSERT_TRUE(R.textEdit);
+ EXPECT_EQ(R.textEdit->newText, "->" + Name);
+ };
+
+ const auto Points = Code.points();
+ CheckCompletion(Points[0], "method");
+ CheckCompletion(Points[1], "field");
+}
+
TEST(CompletionTest, RenderWithFixItNonMerged) {
TextEdit FixIt;
FixIt.range.end.character = 4;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D131088.449733.patch
Type: text/x-patch
Size: 3101 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220803/97523876/attachment.bin>
More information about the cfe-commits
mailing list