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

View File

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