[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