Clangd: Fix autocompletion for old style SIGNAL and SLOT

Fixes: QTCREATORBUG-20737
Change-Id: If6d3c6ea5924537386eca81d90d4bb1e8f1a1466
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
Artem Sokolovskii
2022-06-20 12:57:23 +02:00
parent c899793b37
commit 0087bd492f
12 changed files with 114 additions and 36 deletions

View File

@@ -1163,22 +1163,43 @@ void CppEditorWidget::updateSemanticInfo(const SemanticInfo &semanticInfo,
updateFunctionDeclDefLink();
}
bool CppEditorWidget::isOldStyleSignalOrSlot() const
{
QTextCursor tc(textCursor());
const QString content = textDocument()->plainText();
return CppEditor::CppModelManager::instance()
->getSignalSlotType(textDocument()->filePath().toString(),
content.toUtf8(),
tc.position())
== CppEditor::SignalSlotType::OldStyleSignal;
}
AssistInterface *CppEditorWidget::createAssistInterface(AssistKind kind, AssistReason reason) const
{
if (kind == Completion || kind == FunctionHint) {
CppCompletionAssistProvider * const cap = kind == Completion
? qobject_cast<CppCompletionAssistProvider *>(cppEditorDocument()->completionAssistProvider())
: qobject_cast<CppCompletionAssistProvider *>(cppEditorDocument()->functionHintAssistProvider());
if (cap) {
auto getFeatures = [this]() {
LanguageFeatures features = LanguageFeatures::defaultFeatures();
if (Document::Ptr doc = d->m_lastSemanticInfo.doc)
features = doc->languageFeatures();
features.objCEnabled |= cppEditorDocument()->isObjCEnabled();
return features;
};
if (cap)
return cap->createAssistInterface(textDocument()->filePath(),
this,
features,
getFeatures(),
reason);
} else {
else {
if (isOldStyleSignalOrSlot())
return CppModelManager::instance()
->completionAssistProvider()
->createAssistInterface(textDocument()->filePath(), this, getFeatures(), reason);
return TextEditorWidget::createAssistInterface(kind, reason);
}
} else if (kind == QuickFix) {