diff --git a/clang-tools-extra/clangd/AST.cpp b/clang-tools-extra/clangd/AST.cpp --- a/clang-tools-extra/clangd/AST.cpp +++ b/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(); } diff --git a/clang-tools-extra/clangd/unittests/tweaks/ExtractFunctionTests.cpp b/clang-tools-extra/clangd/unittests/tweaks/ExtractFunctionTests.cpp --- a/clang-tools-extra/clangd/unittests/tweaks/ExtractFunctionTests.cpp +++ b/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) { diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -78,6 +78,8 @@ Miscellaneous ^^^^^^^^^^^^^ +- Fixed extracted function signatures spelling out lambda types. + Improvements to clang-doc -------------------------