[clangd] Return TextEdits from ClangdServer::applyTweak

Summary:
Instead of `tooling::Replacements`. So that embedders do not need to store
the contents of the file.

This also aligns better with `ClangdServer::rename`.

Reviewers: kadircet, hokein

Reviewed By: hokein

Subscribers: MaskRay, jkorous, arphaman, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D63140

llvm-svn: 363150
This commit is contained in:
Ilya Biryukov 2019-06-12 12:03:24 +00:00
parent 757ac02dc8
commit 04112ecd41
3 changed files with 12 additions and 9 deletions

View File

@ -482,13 +482,13 @@ void ClangdLSPServer::onCommand(const ExecuteCommandParams &Params,
auto Action = [ApplyEdit](decltype(Reply) Reply, URIForFile File,
std::string Code,
llvm::Expected<tooling::Replacements> R) {
llvm::Expected<std::vector<TextEdit>> R) {
if (!R)
return Reply(R.takeError());
WorkspaceEdit WE;
WE.changes.emplace();
(*WE.changes)[File.uri()] = replacementsToEdits(Code, *R);
(*WE.changes)[File.uri()] = std::move(*R);
Reply("Fix applied.");
ApplyEdit(std::move(WE));

View File

@ -321,7 +321,7 @@ void ClangdServer::enumerateTweaks(PathRef File, Range Sel,
}
void ClangdServer::applyTweak(PathRef File, Range Sel, StringRef TweakID,
Callback<tooling::Replacements> CB) {
Callback<std::vector<TextEdit>> CB) {
auto Action = [Sel](decltype(CB) CB, std::string File, std::string TweakID,
Expected<InputsAndAST> InpAST) {
if (!InpAST)
@ -332,15 +332,18 @@ void ClangdServer::applyTweak(PathRef File, Range Sel, StringRef TweakID,
auto A = prepareTweak(TweakID, *Selection);
if (!A)
return CB(A.takeError());
auto RawReplacements = (*A)->apply(*Selection);
if (!RawReplacements)
return CB(RawReplacements.takeError());
auto Raw = (*A)->apply(*Selection);
if (!Raw)
return CB(Raw.takeError());
// FIXME: this function has I/O operations (find .clang-format file), figure
// out a way to cache the format style.
auto Style = getFormatStyleForFile(File, InpAST->Inputs.Contents,
InpAST->Inputs.FS.get());
return CB(
cleanupAndFormat(InpAST->Inputs.Contents, *RawReplacements, Style));
auto Formatted =
cleanupAndFormat(InpAST->Inputs.Contents, *Raw, Style);
if (!Formatted)
return CB(Formatted.takeError());
return CB(replacementsToEdits(InpAST->Inputs.Contents, *Formatted));
};
WorkScheduler.runWithAST(
"ApplyTweak", File,

View File

@ -234,7 +234,7 @@ public:
/// Apply the code tweak with a specified \p ID.
void applyTweak(PathRef File, Range Sel, StringRef ID,
Callback<tooling::Replacements> CB);
Callback<std::vector<TextEdit>> CB);
/// Only for testing purposes.
/// Waits until all requests to worker thread are finished and dumps AST for