LanguageClient: resend rename request automatically on changes

Instead of asking the user to trigger the search again button before
being able to trigger the replace operation.

Change-Id: Ie2f0674255249b27d9435fc9df344e3f21bb886a
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
David Schulz
2022-10-11 10:43:53 +02:00
parent 2e6437b8fe
commit 5eeef19743
2 changed files with 18 additions and 28 deletions

View File

@@ -443,17 +443,15 @@ void SymbolSupport::requestPrepareRename(TextEditor::TextDocument *document,
} }
void SymbolSupport::requestRename(const TextDocumentPositionParams &positionParams, void SymbolSupport::requestRename(const TextDocumentPositionParams &positionParams,
const QString &newName,
Core::SearchResult *search) Core::SearchResult *search)
{ {
RenameParams params(positionParams); RenameParams params(positionParams);
params.setNewName(newName); params.setNewName(search->textToReplace());
RenameRequest request(params); RenameRequest request(params);
request.setResponseCallback([this, search](const RenameRequest::Response &response) { request.setResponseCallback([this, search](const RenameRequest::Response &response) {
handleRenameResponse(search, response); handleRenameResponse(search, response);
}); });
m_client->sendMessage(request); m_client->sendMessage(request);
search->setTextToReplace(newName);
search->popup(); search->popup();
} }
@@ -492,40 +490,34 @@ Core::SearchResult *SymbolSupport::createSearch(const TextDocumentPositionParams
"", "",
placeholder, placeholder,
Core::SearchResultWindow::SearchAndReplace); Core::SearchResultWindow::SearchAndReplace);
search->setSearchAgainSupported(true);
search->setUserData(QVariantList{oldSymbolName, preferLowerCaseFileNames}); search->setUserData(QVariantList{oldSymbolName, preferLowerCaseFileNames});
const auto extraWidget = new ReplaceWidget; const auto extraWidget = new ReplaceWidget;
search->setAdditionalReplaceWidget(extraWidget); search->setAdditionalReplaceWidget(extraWidget);
search->setTextToReplace(placeholder);
connect(search, &Core::SearchResult::activated, [](const Core::SearchResultItem &item) { connect(search, &Core::SearchResult::activated, [](const Core::SearchResultItem &item) {
Core::EditorManager::openEditorAtSearchResult(item); Core::EditorManager::openEditorAtSearchResult(item);
}); });
connect(search, &Core::SearchResult::replaceTextChanged, this, [search, extraWidget]() { connect(search, &Core::SearchResult::replaceTextChanged, this, [this, search, positionParams]() {
extraWidget->showLabel(true);
search->setUserData(search->userData().toList().first(2)); search->setUserData(search->userData().toList().first(2));
search->setSearchAgainEnabled(true);
search->setReplaceEnabled(false); search->setReplaceEnabled(false);
});
connect(search,
&Core::SearchResult::searchAgainRequested,
this,
[this, positionParams, search]() {
search->restart(); search->restart();
requestRename(positionParams, search->textToReplace(), search); requestRename(positionParams, search);
});
connect(search,
&Core::SearchResult::replaceButtonClicked,
this,
[this, positionParams, search](const QString & /*replaceText*/,
const QList<Core::SearchResultItem> &checkedItems) {
applyRename(checkedItems, search);
}); });
connect(this, &QObject::destroyed, search, [search, clientName = m_client->name()]() { auto resetConnection
= connect(this, &QObject::destroyed, search, [search, clientName = m_client->name()]() {
search->restart(); // clears potential current results search->restart(); // clears potential current results
search->finishSearch(true, tr("%1 is not reachable anymore.").arg(clientName)); search->finishSearch(true, tr("%1 is not reachable anymore.").arg(clientName));
}); });
connect(search, &Core::SearchResult::replaceButtonClicked, this,
[this, search, resetConnection](const QString & /*replaceText*/,
const QList<Core::SearchResultItem> &checkedItems) {
applyRename(checkedItems, search);
disconnect(resetConnection);
});
return search; return search;
} }
@@ -535,7 +527,6 @@ void SymbolSupport::startRenameSymbol(const TextDocumentPositionParams &position
bool preferLowerCaseFileNames) bool preferLowerCaseFileNames)
{ {
requestRename(positionParams, requestRename(positionParams,
placeholder,
createSearch(positionParams, placeholder, oldSymbolName, preferLowerCaseFileNames)); createSearch(positionParams, placeholder, oldSymbolName, preferLowerCaseFileNames));
} }
@@ -558,7 +549,6 @@ void SymbolSupport::handleRenameResponse(Core::SearchResult *search,
Core::SearchResult::AddOrdered); Core::SearchResult::AddOrdered);
qobject_cast<ReplaceWidget *>(search->additionalReplaceWidget())->showLabel(false); qobject_cast<ReplaceWidget *>(search->additionalReplaceWidget())->showLabel(false);
search->setReplaceEnabled(true); search->setReplaceEnabled(true);
search->setSearchAgainEnabled(false);
search->finishSearch(false); search->finishSearch(false);
} else { } else {
search->finishSearch(error.has_value(), errorMessage); search->finishSearch(error.has_value(), errorMessage);

View File

@@ -65,7 +65,7 @@ private:
const QString &oldSymbolName, const QString &oldSymbolName,
bool preferLowerCaseFileNames); bool preferLowerCaseFileNames);
void requestRename(const LanguageServerProtocol::TextDocumentPositionParams &positionParams, void requestRename(const LanguageServerProtocol::TextDocumentPositionParams &positionParams,
const QString &newName, Core::SearchResult *search); Core::SearchResult *search);
Core::SearchResult *createSearch(const LanguageServerProtocol::TextDocumentPositionParams &positionParams, Core::SearchResult *createSearch(const LanguageServerProtocol::TextDocumentPositionParams &positionParams,
const QString &placeholder, const QString &oldSymbolName, const QString &placeholder, const QString &oldSymbolName,
bool preferLowerCaseFileNames); bool preferLowerCaseFileNames);