5chmidti created this revision. 5chmidti added reviewers: sammccall, nridge. Herald added subscribers: kadircet, arphaman. Herald added a project: All. 5chmidti requested review of this revision. Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov. Herald added a project: clang-tools-extra.
Fixes the signature of the extracted function when the signature contains a lambda. Previously spelled out the type (i.e. loc, ...) of the lambda, now specifies auto. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D141760 Files: clang-tools-extra/clangd/AST.cpp clang-tools-extra/clangd/unittests/tweaks/ExtractFunctionTests.cpp clang-tools-extra/docs/ReleaseNotes.rst Index: clang-tools-extra/docs/ReleaseNotes.rst =================================================================== --- clang-tools-extra/docs/ReleaseNotes.rst +++ clang-tools-extra/docs/ReleaseNotes.rst @@ -78,6 +78,8 @@ Miscellaneous ^^^^^^^^^^^^^ +- Fixed extracted function signatures spelling out lambda types. + Improvements to clang-doc ------------------------- Index: clang-tools-extra/clangd/unittests/tweaks/ExtractFunctionTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/tweaks/ExtractFunctionTests.cpp +++ clang-tools-extra/clangd/unittests/tweaks/ExtractFunctionTests.cpp @@ -190,6 +190,32 @@ }]] )cpp"; EXPECT_EQ(apply(CompoundFailInput), "unavailable"); + + std::string LambdaInput = R"cpp( +auto bar() { + int x = 10; + auto lambda = [x]() { return x; }; + [[int y = 42; + int z = lambda();]] + + return lambda(); +} + )cpp"; + + std::string LambdaOutput = R"cpp( +void extracted(auto &lambda) { +int y = 42; + int z = lambda(); +} +auto bar() { + int x = 10; + auto lambda = [x]() { return x; }; + extracted(lambda); + + return lambda(); +} + )cpp"; + EXPECT_EQ(apply(LambdaInput), LambdaOutput); } TEST_F(ExtractFunctionTest, DifferentHeaderSourceTest) { Index: clang-tools-extra/clangd/AST.cpp =================================================================== --- clang-tools-extra/clangd/AST.cpp +++ clang-tools-extra/clangd/AST.cpp @@ -430,6 +430,11 @@ PrintCB PCB(&CurContext); PP.Callbacks = &PCB; + if (const auto *const RDecl = QT->getAsCXXRecordDecl(); + RDecl && RDecl->isLambda()) { + return "auto"; + } + QT.print(OS, PP, Placeholder); return OS.str(); }
Index: clang-tools-extra/docs/ReleaseNotes.rst =================================================================== --- clang-tools-extra/docs/ReleaseNotes.rst +++ clang-tools-extra/docs/ReleaseNotes.rst @@ -78,6 +78,8 @@ Miscellaneous ^^^^^^^^^^^^^ +- Fixed extracted function signatures spelling out lambda types. + Improvements to clang-doc ------------------------- Index: clang-tools-extra/clangd/unittests/tweaks/ExtractFunctionTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/tweaks/ExtractFunctionTests.cpp +++ clang-tools-extra/clangd/unittests/tweaks/ExtractFunctionTests.cpp @@ -190,6 +190,32 @@ }]] )cpp"; EXPECT_EQ(apply(CompoundFailInput), "unavailable"); + + std::string LambdaInput = R"cpp( +auto bar() { + int x = 10; + auto lambda = [x]() { return x; }; + [[int y = 42; + int z = lambda();]] + + return lambda(); +} + )cpp"; + + std::string LambdaOutput = R"cpp( +void extracted(auto &lambda) { +int y = 42; + int z = lambda(); +} +auto bar() { + int x = 10; + auto lambda = [x]() { return x; }; + extracted(lambda); + + return lambda(); +} + )cpp"; + EXPECT_EQ(apply(LambdaInput), LambdaOutput); } TEST_F(ExtractFunctionTest, DifferentHeaderSourceTest) { Index: clang-tools-extra/clangd/AST.cpp =================================================================== --- clang-tools-extra/clangd/AST.cpp +++ clang-tools-extra/clangd/AST.cpp @@ -430,6 +430,11 @@ PrintCB PCB(&CurContext); PP.Callbacks = &PCB; + if (const auto *const RDecl = QT->getAsCXXRecordDecl(); + RDecl && RDecl->isLambda()) { + return "auto"; + } + QT.print(OS, PP, Placeholder); return OS.str(); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits