LanguageClient: Export LanguageClientOutlineItem

To enable more customizations by specialized clients.

Change-Id: I0ad92e248e931389c3fa239df424df8883e1d86e
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2023-02-03 14:46:00 +01:00
parent dc5d416937
commit cc52478a93
7 changed files with 110 additions and 84 deletions

View File

@@ -38,6 +38,7 @@
#include <languageclient/languageclienthoverhandler.h>
#include <languageclient/languageclientinterface.h>
#include <languageclient/languageclientmanager.h>
#include <languageclient/languageclientoutline.h>
#include <languageclient/languageclientsymbolsupport.h>
#include <languageclient/languageclientutils.h>
#include <languageclient/progressmanager.h>
@@ -128,6 +129,20 @@ public:
: Request("textDocument/symbolInfo", params) {}
};
class ClangdOutlineItem : public LanguageClientOutlineItem
{
using LanguageClientOutlineItem::LanguageClientOutlineItem;
private:
QVariant data(int column, int role) const override
{
if (role == Qt::DisplayRole) {
return ClangdClient::displayNameFromDocumentSymbol(
static_cast<SymbolKind>(type()), name(), detail());
}
return LanguageClientOutlineItem::data(column, role);
}
};
void setupClangdConfigFile()
{
const Utils::FilePath targetConfigFile = CppEditor::ClangdSettings::clangdUserConfigFilePath();
@@ -427,7 +442,6 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir, c
});
setCurrentProject(project);
setDocumentChangeUpdateThreshold(d->settings.documentUpdateThreshold);
setSymbolStringifier(displayNameFromDocumentSymbol);
setSemanticTokensHandler([this](TextDocument *doc, const QList<ExpandedSemanticToken> &tokens,
int version, bool force) {
d->handleSemanticTokens(doc, tokens, version, force);
@@ -661,6 +675,12 @@ DiagnosticManager *ClangdClient::createDiagnosticManager()
return diagnosticManager;
}
LanguageClientOutlineItem *ClangdClient::createOutlineItem(
const LanguageServerProtocol::DocumentSymbol &symbol)
{
return new ClangdOutlineItem(this, symbol);
}
bool ClangdClient::referencesShadowFile(const TextEditor::TextDocument *doc,
const Utils::FilePath &candidate)
{

View File

@@ -137,6 +137,8 @@ private:
const CustomInspectorTabs createCustomInspectorTabs() override;
TextEditor::RefactoringChangesData *createRefactoringChangesBackend() const override;
LanguageClient::DiagnosticManager *createDiagnosticManager() override;
LanguageClient::LanguageClientOutlineItem *createOutlineItem(
const LanguageServerProtocol::DocumentSymbol &symbol) override;
bool referencesShadowFile(const TextEditor::TextDocument *doc,
const Utils::FilePath &candidate) override;
bool fileBelongsToProject(const Utils::FilePath &filePath) const override;