forked from qt-creator/qt-creator
ClangCodeModel: Fall back to built-in code model when following symbols
In normal interactive mode, users likely want fuzzy look-up, e.g. to a non-matching overload if no exact match is present. Fixes: QTCREATORBUG-29814 Change-Id: I55ca32c001e619d374cc015a7dd2f1564ed2a2c9 Reviewed-by: Christian Stenger <christian.stenger@qt.io> Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -199,8 +199,7 @@ void ClangdFollowSymbol::emitDone(const Link &link)
|
||||
return;
|
||||
|
||||
d->done = true;
|
||||
if (link.hasValidTarget())
|
||||
d->callback(link);
|
||||
d->callback(link);
|
||||
emit done();
|
||||
}
|
||||
|
||||
|
||||
@@ -53,6 +53,7 @@
|
||||
#include <QLabel>
|
||||
#include <QLoggingCategory>
|
||||
#include <QMenu>
|
||||
#include <QPointer>
|
||||
#include <QTextBlock>
|
||||
#include <QTimer>
|
||||
#include <QtDebug>
|
||||
@@ -299,17 +300,27 @@ ClangModelManagerSupport::~ClangModelManagerSupport()
|
||||
|
||||
void ClangModelManagerSupport::followSymbol(const CursorInEditor &data,
|
||||
const LinkHandler &processLinkCallback,
|
||||
FollowSymbolMode mode,
|
||||
bool resolveTarget, bool inNextSplit)
|
||||
{
|
||||
if (ClangdClient * const client = clientForFile(data.filePath());
|
||||
client && client->isFullyIndexed()) {
|
||||
LinkHandler extendedCallback = [editor = QPointer(data.editorWidget()), data,
|
||||
processLinkCallback, mode, resolveTarget, inNextSplit]
|
||||
(const Link &link) {
|
||||
if (link.hasValidTarget() || mode == FollowSymbolMode::Exact || !editor)
|
||||
return processLinkCallback(link);
|
||||
CppModelManager::followSymbol(data, processLinkCallback, resolveTarget, inNextSplit,
|
||||
mode, CppModelManager::Backend::Builtin);
|
||||
|
||||
};
|
||||
client->followSymbol(data.textDocument(), data.cursor(), data.editorWidget(),
|
||||
processLinkCallback, resolveTarget, FollowTo::SymbolDef, inNextSplit);
|
||||
extendedCallback, resolveTarget, FollowTo::SymbolDef, inNextSplit);
|
||||
return;
|
||||
}
|
||||
|
||||
CppModelManager::followSymbol(data, processLinkCallback, resolveTarget, inNextSplit,
|
||||
CppModelManager::Backend::Builtin);
|
||||
mode, CppModelManager::Backend::Builtin);
|
||||
}
|
||||
|
||||
void ClangModelManagerSupport::followSymbolToType(const CursorInEditor &data,
|
||||
|
||||
@@ -52,8 +52,9 @@ public:
|
||||
|
||||
private:
|
||||
void followSymbol(const CppEditor::CursorInEditor &data,
|
||||
const Utils::LinkHandler &processLinkCallback, bool resolveTarget,
|
||||
bool inNextSplit) override;
|
||||
const Utils::LinkHandler &processLinkCallback,
|
||||
CppEditor::FollowSymbolMode mode,
|
||||
bool resolveTarget, bool inNextSplit) override;
|
||||
void followSymbolToType(const CppEditor::CursorInEditor &data,
|
||||
const Utils::LinkHandler &processLinkCallback,
|
||||
bool inNextSplit) override;
|
||||
|
||||
Reference in New Issue
Block a user