[PATCH] D142967: [clangd] Introduce source.organizeImports code action.

Haojian Wu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 31 02:15:07 PST 2023


hokein created this revision.
hokein added a reviewer: kadircet.
Herald added a subscriber: arphaman.
Herald added a project: All.
hokein requested review of this revision.
Herald added subscribers: MaskRay, ilya-biryukov.
Herald added a project: clang-tools-extra.

This would provide us a way to apply unused-includes fixts at once via
the right-click "Source Action" menu or "Organize imports" command
in VSCode.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D142967

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


Index: clang-tools-extra/clangd/Protocol.h
===================================================================
--- clang-tools-extra/clangd/Protocol.h
+++ clang-tools-extra/clangd/Protocol.h
@@ -1022,6 +1022,7 @@
   const static llvm::StringLiteral QUICKFIX_KIND;
   const static llvm::StringLiteral REFACTOR_KIND;
   const static llvm::StringLiteral INFO_KIND;
+  const static llvm::StringLiteral SOURCE_ORGANIZE_IMPORT;
 
   /// The diagnostics that this code action resolves.
   std::optional<std::vector<Diagnostic>> diagnostics;
Index: clang-tools-extra/clangd/Protocol.cpp
===================================================================
--- clang-tools-extra/clangd/Protocol.cpp
+++ clang-tools-extra/clangd/Protocol.cpp
@@ -819,6 +819,7 @@
 const llvm::StringLiteral CodeAction::QUICKFIX_KIND = "quickfix";
 const llvm::StringLiteral CodeAction::REFACTOR_KIND = "refactor";
 const llvm::StringLiteral CodeAction::INFO_KIND = "info";
+const llvm::StringLiteral CodeAction::SOURCE_ORGANIZE_IMPORT = "source.organizeImports";
 
 llvm::json::Value toJSON(const CodeAction &CA) {
   auto CodeAction = llvm::json::Object{{"title", CA.title}};
Index: clang-tools-extra/clangd/ClangdLSPServer.cpp
===================================================================
--- clang-tools-extra/clangd/ClangdLSPServer.cpp
+++ clang-tools-extra/clangd/ClangdLSPServer.cpp
@@ -611,7 +611,8 @@
           ? llvm::json::Object{{"codeActionKinds",
                                 {CodeAction::QUICKFIX_KIND,
                                  CodeAction::REFACTOR_KIND,
-                                 CodeAction::INFO_KIND}}}
+                                 CodeAction::INFO_KIND,
+                                 CodeAction::SOURCE_ORGANIZE_IMPORT}}}
           : llvm::json::Value(true);
 
 
@@ -988,6 +989,26 @@
       }
     }
   }
+  if (KindAllowed(CodeAction::SOURCE_ORGANIZE_IMPORT)) {
+    std::lock_guard<std::mutex> Lock(FixItsMutex);
+    if (auto FileFixItsIter = FixItsMap.find(File.file());
+        FileFixItsIter != FixItsMap.end()) {
+      std::vector<TextEdit> Edits;
+      for (auto &[Diag, Fixes] : FileFixItsIter->second) {
+        if (Diag.source == "clangd" && Diag.code == "unused-includes")
+          for (auto &F : Fixes)
+            std::copy(F.Edits.begin(), F.Edits.end(),
+                      std::back_inserter(Edits));
+      }
+      if (!Edits.empty()) {
+        FixIts.emplace_back();
+        FixIts.back().title = "remove unusded includes";
+        FixIts.back().kind = std::string(CodeAction::SOURCE_ORGANIZE_IMPORT);
+        FixIts.back().edit.emplace();
+        FixIts.back().edit->changes[File.uri()] = std::move(Edits);
+      }
+    }
+  }
 
   // Now enumerate the semantic code actions.
   auto ConsumeActions =


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D142967.493530.patch
Type: text/x-patch
Size: 2765 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230131/79d9a0f8/attachment.bin>


More information about the cfe-commits mailing list