Commit 04112ecd authored by Ilya Biryukov's avatar Ilya Biryukov
Browse files

[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
parent 757ac02d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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));
+9 −6
Original line number Diff line number Diff line
@@ -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,
+1 −1
Original line number Diff line number Diff line
@@ -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