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
  • [PATCH] D141760: [clangd] f... Julian Schmidt via Phabricator via cfe-commits

Reply via email to