forked from qt-creator/qt-creator
TextEditor: request assist after trigger char inserted
... while proposal is shown
amends 23d63dcc8b
Fixes: QTCREATORBUG-24225
Change-Id: Ie935c7c1d4786a4fd3cf338d7f1df52ae28de63b
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -196,6 +196,8 @@ void ClangEditorDocumentProcessor::updateCodeWarnings(
|
||||
uint documentRevision)
|
||||
{
|
||||
if (documentRevision == revision()) {
|
||||
if (m_invalidationState == InvalidationState::Scheduled)
|
||||
m_invalidationState = InvalidationState::Canceled;
|
||||
m_diagnosticManager.processNewDiagnostics(diagnostics, m_isProjectFile);
|
||||
const auto codeWarnings = m_diagnosticManager.takeExtraSelections();
|
||||
const auto fixitAvailableMarkers = m_diagnosticManager.takeFixItAvailableMarkers();
|
||||
@@ -298,11 +300,14 @@ TextEditor::QuickFixOperations ClangEditorDocumentProcessor::extraRefactoringOpe
|
||||
void ClangEditorDocumentProcessor::editorDocumentTimerRestarted()
|
||||
{
|
||||
m_updateBackendDocumentTimer.stop(); // Wait for the next call to run().
|
||||
m_invalidationState = InvalidationState::Scheduled;
|
||||
}
|
||||
|
||||
void ClangEditorDocumentProcessor::invalidateDiagnostics()
|
||||
{
|
||||
m_diagnosticManager.invalidateDiagnostics();
|
||||
if (m_invalidationState != InvalidationState::Canceled)
|
||||
m_diagnosticManager.invalidateDiagnostics();
|
||||
m_invalidationState = InvalidationState::Off;
|
||||
}
|
||||
|
||||
TextEditor::TextMarks ClangEditorDocumentProcessor::diagnosticTextMarksAt(uint line,
|
||||
|
||||
@@ -140,6 +140,7 @@ private:
|
||||
QFutureWatcher<void> m_parserWatcher;
|
||||
QTimer m_updateBackendDocumentTimer;
|
||||
unsigned m_parserRevision;
|
||||
enum class InvalidationState { Off, Scheduled, Canceled } m_invalidationState;
|
||||
|
||||
QVector<ClangBackEnd::TokenInfoContainer> m_tokenInfos;
|
||||
CppTools::SemanticHighlighter m_semanticHighlighter;
|
||||
|
||||
@@ -88,6 +88,7 @@ public:
|
||||
bool eventFilter(QObject *o, QEvent *e) override;
|
||||
|
||||
private:
|
||||
bool requestActivationCharProposal();
|
||||
void processProposalItem(AssistProposalItemInterface *proposalItem);
|
||||
void handlePrefixExpansion(const QString &newPrefix);
|
||||
void finalizeProposal();
|
||||
@@ -161,6 +162,19 @@ void CodeAssistantPrivate::invoke(AssistKind kind, IAssistProvider *provider)
|
||||
}
|
||||
}
|
||||
|
||||
bool CodeAssistantPrivate::requestActivationCharProposal()
|
||||
{
|
||||
if (m_assistKind == Completion && m_settings.m_completionTrigger != ManualCompletion) {
|
||||
if (CompletionAssistProvider *provider = identifyActivationSequence()) {
|
||||
if (isWaitingForProposal())
|
||||
cancelCurrentRequest();
|
||||
requestProposal(ActivationCharacter, Completion, provider);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void CodeAssistantPrivate::process()
|
||||
{
|
||||
if (!isConfigured())
|
||||
@@ -169,16 +183,8 @@ void CodeAssistantPrivate::process()
|
||||
stopAutomaticProposalTimer();
|
||||
|
||||
if (m_assistKind == TextEditor::Completion) {
|
||||
if (m_settings.m_completionTrigger != ManualCompletion) {
|
||||
if (CompletionAssistProvider *provider = identifyActivationSequence()) {
|
||||
if (isWaitingForProposal())
|
||||
cancelCurrentRequest();
|
||||
requestProposal(ActivationCharacter, Completion, provider);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
startAutomaticProposalTimer();
|
||||
if (!requestActivationCharProposal())
|
||||
startAutomaticProposalTimer();
|
||||
} else if (m_assistKind != FunctionHint){
|
||||
m_assistKind = TextEditor::Completion;
|
||||
}
|
||||
@@ -365,6 +371,8 @@ void CodeAssistantPrivate::processProposalItem(AssistProposalItemInterface *prop
|
||||
proposalItem->apply(manipulator, m_proposal->basePosition());
|
||||
destroyContext();
|
||||
m_editorWidget->encourageApply();
|
||||
if (!proposalItem->isSnippet())
|
||||
requestActivationCharProposal();
|
||||
}
|
||||
|
||||
void CodeAssistantPrivate::handlePrefixExpansion(const QString &newPrefix)
|
||||
@@ -404,7 +412,7 @@ void CodeAssistantPrivate::finalizeProposal()
|
||||
|
||||
bool CodeAssistantPrivate::isDisplayingProposal() const
|
||||
{
|
||||
return m_proposalWidget != nullptr;
|
||||
return m_proposalWidget != nullptr && m_proposalWidget->isVisible();
|
||||
}
|
||||
|
||||
bool CodeAssistantPrivate::isWaitingForProposal() const
|
||||
@@ -457,6 +465,8 @@ void CodeAssistantPrivate::notifyChange()
|
||||
m_proposalWidget->updateProposal(
|
||||
m_editorWidget->textAt(m_proposal->basePosition(),
|
||||
m_editorWidget->position() - m_proposal->basePosition()));
|
||||
if (!isDisplayingProposal())
|
||||
requestActivationCharProposal();
|
||||
} else {
|
||||
destroyContext();
|
||||
requestProposal(ExplicitlyInvoked, m_assistKind, m_requestProvider);
|
||||
|
||||
Reference in New Issue
Block a user