[PATCH] D118976: clangd: Set a diagnostic on a code action resulting from a tweak

Christian Kandeler via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Feb 4 01:43:22 PST 2022


ckandeler created this revision.
ckandeler added a reviewer: sammccall.
Herald added subscribers: usaxena95, kadircet, arphaman.
ckandeler requested review of this revision.
Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov.
Herald added a project: clang-tools-extra.

... if there is a match.
This is needed to that clients can can make a connection between a
diagnostic and an associated quickfix-tweak.
Ideally, quickfix-kind tweak code actions would be provided inline along
with the non-tweak fixes, but this doesn't seem easily achievable.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D118976

Files:
  clang-tools-extra/clangd/ClangdLSPServer.cpp


Index: clang-tools-extra/clangd/ClangdLSPServer.cpp
===================================================================
--- clang-tools-extra/clangd/ClangdLSPServer.cpp
+++ clang-tools-extra/clangd/ClangdLSPServer.cpp
@@ -986,7 +986,7 @@
 
   // Now enumerate the semantic code actions.
   auto ConsumeActions =
-      [Reply = std::move(Reply), File, Selection = Params.range,
+      [Diags = Params.context.diagnostics, Reply = std::move(Reply), File, Selection = Params.range,
        FixIts = std::move(FixIts), this](
           llvm::Expected<std::vector<ClangdServer::TweakRef>> Tweaks) mutable {
         if (!Tweaks)
@@ -994,8 +994,17 @@
 
         std::vector<CodeAction> Actions = std::move(FixIts);
         Actions.reserve(Actions.size() + Tweaks->size());
-        for (const auto &T : *Tweaks)
+        for (const auto &T : *Tweaks) {
           Actions.push_back(toCodeAction(T, File, Selection));
+          if (T.Kind != CodeAction::QUICKFIX_KIND)
+            continue;
+          for (const Diagnostic &D : Diags) {
+            if (D.range == Selection) {
+              Actions.back().diagnostics = {D};
+              break;
+            }
+          }
+        }
 
         // If there's exactly one quick-fix, call it "preferred".
         // We never consider refactorings etc as preferred.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D118976.405892.patch
Type: text/x-patch
Size: 1317 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220204/e3073414/attachment.bin>


More information about the cfe-commits mailing list