forked from OSchip/llvm-project
[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:
parent
757ac02dc8
commit
04112ecd41
|
@ -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));
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue