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,
|
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);
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user