LanguageClient: support additional goto targets in symbol support

Allow to follow to the symbol definition as well as to the type
definition for the symbol under the cursor position.

Change-Id: I8ff50b33a1e739f81b0832b1b28ffc525e1f7177
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2023-09-05 11:14:10 +02:00
parent 23828a1d9c
commit 80633a59aa
19 changed files with 265 additions and 106 deletions

View File

@@ -1013,7 +1013,11 @@ void ClangdClient::followSymbol(TextDocument *document,
const QTextCursor adjustedCursor = d->adjustedCursor(cursor, document);
if (followTo == FollowTo::SymbolDef && !resolveTarget) {
symbolSupport().findLinkAt(document, adjustedCursor, callback, false);
symbolSupport().findLinkAt(document,
adjustedCursor,
callback,
false,
LanguageClient::LinkTarget::SymbolDef);
return;
}

View File

@@ -714,7 +714,11 @@ void ClangdFindLocalReferences::Private::findDefinition()
if (sentinel)
getDefinitionAst(l);
};
client()->symbolSupport().findLinkAt(document, cursor, linkHandler, true);
client()->symbolSupport().findLinkAt(document,
cursor,
linkHandler,
true,
LanguageClient::LinkTarget::SymbolDef);
}
void ClangdFindLocalReferences::Private::getDefinitionAst(const Link &link)

View File

@@ -154,7 +154,11 @@ ClangdFollowSymbol::ClangdFollowSymbol(ClangdClient *client, const QTextCursor &
if (self->d->cursorNode)
self->d->handleGotoDefinitionResult();
};
client->symbolSupport().findLinkAt(document, cursor, std::move(gotoDefCallback), true);
client->symbolSupport().findLinkAt(document,
cursor,
std::move(gotoDefCallback),
true,
LanguageClient::LinkTarget::SymbolDef);
const auto astHandler = [self = QPointer(this)](const ClangdAstNode &ast, const MessageId &) {
qCDebug(clangdLog) << "received ast response for cursor";