[PATCH] D100310: Add field designated initializers logic in Tooling/Rename
Justin Lebar via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 12 11:42:56 PDT 2021
I guess you need me or Michael to push this. Happy to do so once you're
happy with it.
On Mon, Apr 12, 2021 at 11:33 AM Daniele Castagna via Phabricator <
reviews at reviews.llvm.org> wrote:
> dcastagna updated this revision to Diff 336912.
> dcastagna added a comment.
>
> clang-format again
>
>
> Repository:
> rG LLVM Github Monorepo
>
> CHANGES SINCE LAST ACTION
> https://reviews.llvm.org/D100310/new/
>
> https://reviews.llvm.org/D100310
>
> Files:
> clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h
> clang/lib/Tooling/Refactoring/Rename/USRLocFinder.cpp
> clang/unittests/Rename/RenameClassTest.cpp
>
>
> Index: clang/unittests/Rename/RenameClassTest.cpp
> ===================================================================
> --- clang/unittests/Rename/RenameClassTest.cpp
> +++ clang/unittests/Rename/RenameClassTest.cpp
> @@ -780,6 +780,27 @@
> CompareSnippets(Expected, After);
> }
>
> +TEST_F(ClangRenameTest, FieldDesignatedInitializers) {
> + std::string Before = R"(
> + struct S {
> + int a;
> + };
> + void foo() {
> + S s = { .a = 10 };
> + s.a = 20;
> + })";
> + std::string Expected = R"(
> + struct S {
> + int b;
> + };
> + void foo() {
> + S s = { .b = 10 };
> + s.b = 20;
> + })";
> + std::string After = runClangRenameOnCode(Before, "S::a", "S::b");
> + CompareSnippets(Expected, After);
> +}
> +
> // FIXME: investigate why the test fails when adding a new USR to the
> USRSet.
> TEST_F(ClangRenameTest, DISABLED_NestedTemplates) {
> std::string Before = R"(
> Index: clang/lib/Tooling/Refactoring/Rename/USRLocFinder.cpp
> ===================================================================
> --- clang/lib/Tooling/Refactoring/Rename/USRLocFinder.cpp
> +++ clang/lib/Tooling/Refactoring/Rename/USRLocFinder.cpp
> @@ -226,6 +226,24 @@
> return true;
> }
>
> + bool VisitDesignatedInitExpr(const DesignatedInitExpr *E) {
> + for (const DesignatedInitExpr::Designator &D : E->designators()) {
> + if (D.isFieldDesignator() && D.getField()) {
> + const FieldDecl *Decl = D.getField();
> + if (isInUSRSet(Decl)) {
> + auto StartLoc = D.getFieldLoc();
> + auto EndLoc = D.getFieldLoc();
> + RenameInfos.push_back({StartLoc, EndLoc,
> + /*FromDecl=*/nullptr,
> + /*Context=*/nullptr,
> + /*Specifier=*/nullptr,
> + /*IgnorePrefixQualifiers=*/true});
> + }
> + }
> + }
> + return true;
> + }
> +
> bool VisitCXXConstructorDecl(const CXXConstructorDecl *CD) {
> // Fix the constructor initializer when renaming class members.
> for (const auto *Initializer : CD->inits()) {
> Index: clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h
> ===================================================================
> --- clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h
> +++ clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h
> @@ -122,6 +122,17 @@
> return BaseType::TraverseNestedNameSpecifierLoc(NNS);
> }
>
> + bool VisitDesignatedInitExpr(const DesignatedInitExpr *E) {
> + for (const DesignatedInitExpr::Designator &D : E->designators()) {
> + if (D.isFieldDesignator() && D.getField()) {
> + const FieldDecl *Decl = D.getField();
> + if (!visit(Decl, D.getFieldLoc(), D.getFieldLoc()))
> + return false;
> + }
> + }
> + return true;
> + }
> +
> private:
> const SourceManager &SM;
> const LangOptions &LangOpts;
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210412/27ea52ae/attachment-0001.html>
More information about the cfe-commits
mailing list