This revision was automatically updated to reflect the committed changes.
Closed by commit rG9f6d8de28ab6: [clangd] Support renaming designated 
initializers (authored by kbobyrev).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72867/new/

https://reviews.llvm.org/D72867

Files:
  clang-tools-extra/clangd/FindTarget.cpp
  clang-tools-extra/clangd/unittests/FindTargetTests.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
@@ -440,6 +440,35 @@
         template <template<typename> class Z> struct Bar { };
         template <> struct Bar<[[Foo]]> {};
       )cpp",
+
+      // Designated initializer.
+      R"cpp(
+        struct Bar {
+          int [[Fo^o]];
+        };
+        Bar bar { .[[^Foo]] = 42 };
+      )cpp",
+
+      // Nested designated initializer.
+      R"cpp(
+        struct Baz {
+          int Field;
+        };
+        struct Bar {
+          Baz [[Fo^o]];
+        };
+        // FIXME:    v selecting here results in renaming Field.
+        Bar bar { .[[Foo]].Field = 42 };
+      )cpp",
+      R"cpp(
+        struct Baz {
+          int [[Fiel^d]];
+        };
+        struct Bar {
+          Baz Foo;
+        };
+        Bar bar { .Foo.[[^Field]] = 42 };
+      )cpp",
   };
   for (llvm::StringRef T : Tests) {
     SCOPED_TRACE(T);
Index: clang-tools-extra/clangd/unittests/FindTargetTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/FindTargetTests.cpp
+++ clang-tools-extra/clangd/unittests/FindTargetTests.cpp
@@ -1162,7 +1162,41 @@
           )cpp",
            "0: targets = {f}\n"
            "1: targets = {I::x}\n"
-           "2: targets = {I::setY:}\n"}};
+           "2: targets = {I::setY:}\n"},
+       // Designated initializers.
+       {R"cpp(
+            void foo() {
+              struct $0^Foo {
+                int $1^Bar;
+              };
+              $2^Foo $3^f { .$4^Bar = 42 };
+            }
+        )cpp",
+        "0: targets = {Foo}, decl\n"
+        "1: targets = {foo()::Foo::Bar}, decl\n"
+        "2: targets = {Foo}\n"
+        "3: targets = {f}, decl\n"
+        "4: targets = {foo()::Foo::Bar}\n"},
+       {R"cpp(
+            void foo() {
+              struct $0^Baz {
+                int $1^Field;
+              };
+              struct $2^Bar {
+                $3^Baz $4^Foo;
+              };
+              $5^Bar $6^bar { .$7^Foo.$8^Field = 42 };
+            }
+        )cpp",
+        "0: targets = {Baz}, decl\n"
+        "1: targets = {foo()::Baz::Field}, decl\n"
+        "2: targets = {Bar}, decl\n"
+        "3: targets = {Baz}\n"
+        "4: targets = {foo()::Bar::Foo}, decl\n"
+        "5: targets = {Bar}\n"
+        "6: targets = {bar}, decl\n"
+        "7: targets = {foo()::Bar::Foo}\n"
+        "8: targets = {foo()::Baz::Field}\n"}};
 
   for (const auto &C : Cases) {
     llvm::StringRef ExpectedCode = C.first;
Index: clang-tools-extra/clangd/FindTarget.cpp
===================================================================
--- clang-tools-extra/clangd/FindTarget.cpp
+++ clang-tools-extra/clangd/FindTarget.cpp
@@ -672,6 +672,17 @@
           // Select the getter, setter, or @property depending on the call.
           explicitReferenceTargets(DynTypedNode::create(*E), {})});
     }
+
+    void VisitDesignatedInitExpr(const DesignatedInitExpr *DIE) {
+      for (const DesignatedInitExpr::Designator &D : DIE->designators()) {
+        if (!D.isFieldDesignator())
+          continue;
+        Refs.push_back(ReferenceLoc{NestedNameSpecifierLoc(),
+                                    D.getFieldLoc(),
+                                    /*IsDecl=*/false,
+                                    {D.getField()}});
+      }
+    }
   };
 
   Visitor V;
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to