Skip to content

Commit

Permalink
[clangd][Protocol] Drop optional from WorkspaceEdit::changes
Browse files Browse the repository at this point in the history
This is causing weird code patterns in various places and I can't see
any difference between None and empty change list. Neither in the current use
cases nor in the spec.

Differential Revision: https://reviews.llvm.org/D103449
  • Loading branch information
kadircet committed Jun 2, 2021
1 parent 6c2a4e2 commit dc10bf1
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 24 deletions.
33 changes: 15 additions & 18 deletions clang-tools-extra/clangd/ClangdLSPServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -748,9 +748,8 @@ void ClangdLSPServer::onCommandApplyTweak(const TweakArgs &Args,
return Reply(std::move(Err));

WorkspaceEdit WE;
WE.changes.emplace();
for (const auto &It : R->ApplyEdits) {
(*WE.changes)[URI::createFile(It.first()).toString()] =
WE.changes[URI::createFile(It.first()).toString()] =
It.second.asTextEdits();
}
// ApplyEdit will take care of calling Reply().
Expand Down Expand Up @@ -813,22 +812,20 @@ void ClangdLSPServer::onRename(const RenameParams &Params,
if (!Server->getDraft(File))
return Reply(llvm::make_error<LSPError>(
"onRename called for non-added file", ErrorCode::InvalidParams));
Server->rename(
File, Params.position, Params.newName, Opts.Rename,
[File, Params, Reply = std::move(Reply),
this](llvm::Expected<RenameResult> R) mutable {
if (!R)
return Reply(R.takeError());
if (auto Err = validateEdits(*Server, R->GlobalChanges))
return Reply(std::move(Err));
WorkspaceEdit Result;
Result.changes.emplace();
for (const auto &Rep : R->GlobalChanges) {
(*Result.changes)[URI::createFile(Rep.first()).toString()] =
Rep.second.asTextEdits();
}
Reply(Result);
});
Server->rename(File, Params.position, Params.newName, Opts.Rename,
[File, Params, Reply = std::move(Reply),
this](llvm::Expected<RenameResult> R) mutable {
if (!R)
return Reply(R.takeError());
if (auto Err = validateEdits(*Server, R->GlobalChanges))
return Reply(std::move(Err));
WorkspaceEdit Result;
for (const auto &Rep : R->GlobalChanges) {
Result.changes[URI::createFile(Rep.first()).toString()] =
Rep.second.asTextEdits();
}
Reply(Result);
});
}

void ClangdLSPServer::onDocumentDidClose(
Expand Down
3 changes: 1 addition & 2 deletions clang-tools-extra/clangd/Diagnostics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -372,8 +372,7 @@ CodeAction toCodeAction(const Fix &F, const URIForFile &File) {
Action.title = F.Message;
Action.kind = std::string(CodeAction::QUICKFIX_KIND);
Action.edit.emplace();
Action.edit->changes.emplace();
(*Action.edit->changes)[File.uri()] = {F.Edits.begin(), F.Edits.end()};
Action.edit->changes[File.uri()] = {F.Edits.begin(), F.Edits.end()};
return Action;
}

Expand Down
4 changes: 1 addition & 3 deletions clang-tools-extra/clangd/Protocol.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -808,10 +808,8 @@ llvm::json::Value toJSON(const DocumentSymbol &S) {
}

llvm::json::Value toJSON(const WorkspaceEdit &WE) {
if (!WE.changes)
return llvm::json::Object{};
llvm::json::Object FileChanges;
for (auto &Change : *WE.changes)
for (auto &Change : WE.changes)
FileChanges[Change.first] = llvm::json::Array(Change.second);
return llvm::json::Object{{"changes", std::move(FileChanges)}};
}
Expand Down
2 changes: 1 addition & 1 deletion clang-tools-extra/clangd/Protocol.h
Original file line number Diff line number Diff line change
Expand Up @@ -908,7 +908,7 @@ bool fromJSON(const llvm::json::Value &, CodeActionParams &, llvm::json::Path);

struct WorkspaceEdit {
/// Holds changes to existing resources.
llvm::Optional<std::map<std::string, std::vector<TextEdit>>> changes;
std::map<std::string, std::vector<TextEdit>> changes;

/// Note: "documentChanges" is not currently used because currently there is
/// no support for versioned edits.
Expand Down

0 comments on commit dc10bf1

Please sign in to comment.