forked from qt-creator/qt-creator
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:
@@ -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);
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user