Index: clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp =================================================================== --- clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp +++ clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp @@ -482,13 +482,13 @@ auto Action = [ApplyEdit](decltype(Reply) Reply, URIForFile File, std::string Code, - llvm::Expected R) { + llvm::Expected> 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)); Index: clang-tools-extra/trunk/clangd/ClangdServer.h =================================================================== --- clang-tools-extra/trunk/clangd/ClangdServer.h +++ clang-tools-extra/trunk/clangd/ClangdServer.h @@ -234,7 +234,7 @@ /// Apply the code tweak with a specified \p ID. void applyTweak(PathRef File, Range Sel, StringRef ID, - Callback CB); + Callback> CB); /// Only for testing purposes. /// Waits until all requests to worker thread are finished and dumps AST for Index: clang-tools-extra/trunk/clangd/ClangdServer.cpp =================================================================== --- clang-tools-extra/trunk/clangd/ClangdServer.cpp +++ clang-tools-extra/trunk/clangd/ClangdServer.cpp @@ -321,7 +321,7 @@ } void ClangdServer::applyTweak(PathRef File, Range Sel, StringRef TweakID, - Callback CB) { + Callback> CB) { auto Action = [Sel](decltype(CB) CB, std::string File, std::string TweakID, Expected InpAST) { if (!InpAST) @@ -332,15 +332,18 @@ 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,