diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2021-07-29 16:50:55 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2021-08-18 12:10:34 +0000 |
commit | 49b002682683716e9297dda7e39538afec62c753 (patch) | |
tree | 9bf9287a89db1bded65884ebc3623b667df5b441 | |
parent | 2384865bff2b8d03539abddc3511b3351bbf8f6b (diff) |
ClangCodeModel: Adapt clangd tooltip test for include directives
This feature was recently added upstream
(https://reviews.llvm.org/D107137).
Change-Id: I022855cd5d69230b755cdd657c5a7df2db5508ce
Reviewed-by: David Schulz <david.schulz@qt.io>
5 files changed, 23 insertions, 3 deletions
diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 60decc87fd..d987518591 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -1370,12 +1370,13 @@ void ClangdClient::findLocalUsages(TextEditor::TextDocument *document, const QTe void ClangdClient::gatherHelpItemForTooltip(const HoverRequest::Response &hoverResponse, const DocumentUri &uri) { - // Macros aren't locatable via the AST, so parse the formatted string. if (const Utils::optional<Hover> result = hoverResponse.result()) { const HoverContent content = result->content(); const MarkupContent * const markup = Utils::get_if<MarkupContent>(&content); if (markup) { const QString markupString = markup->content(); + + // Macros aren't locatable via the AST, so parse the formatted string. static const QString magicMacroPrefix = "### macro `"; if (markupString.startsWith(magicMacroPrefix)) { const int nameStart = magicMacroPrefix.length(); @@ -1387,6 +1388,19 @@ void ClangdClient::gatherHelpItemForTooltip(const HoverRequest::Response &hoverR return; } } + + // Is it the file path for an include directive? + QString cleanString = markupString; + cleanString.remove('`'); + const QStringList lines = cleanString.trimmed().split('\n'); + if (!lines.isEmpty()) { + const auto filePath = Utils::FilePath::fromUserInput(lines.last().simplified()); + if (filePath.exists()) { + d->setHelpItemForTooltip(hoverResponse.id(), filePath.fileName(), + HelpItem::Brief); + return; + } + } } } diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp index 41ba4b39b7..4a127ecd99 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.cpp +++ b/src/plugins/clangcodemodel/test/clangdtests.cpp @@ -604,8 +604,10 @@ void ClangdTestTooltips::test() QCOMPARE(editor->document(), doc); QVERIFY(editor->editorWidget()); - if (QLatin1String(QTest::currentDataTag()) == QLatin1String("IncludeDirective")) + if (client()->versionNumber() < QVersionNumber(14) + && QLatin1String(QTest::currentDataTag()) == QLatin1String("IncludeDirective")) { QSKIP("FIXME: clangd sends empty or no hover data for includes"); + } QTimer timer; timer.setSingleShot(true); @@ -631,7 +633,6 @@ void ClangdTestTooltips::test() QEXPECT_FAIL("TypeName_ResolveTemplateTypeAlias", "typedef already resolved in AST", Abort); QCOMPARE(int(helpItem.category()), expectedCategory); QEXPECT_FAIL("TemplateClassQualified", "Additional look-up needed?", Abort); - QEXPECT_FAIL("AutoTypeTemplate", "Additional look-up needed?", Abort); QCOMPARE(helpItem.helpIds(), expectedIds); QCOMPARE(helpItem.docMark(), expectedMark); } diff --git a/src/plugins/clangcodemodel/test/data/clangtestdata.qrc b/src/plugins/clangcodemodel/test/data/clangtestdata.qrc index 47764d312b..6655568da4 100644 --- a/src/plugins/clangcodemodel/test/data/clangtestdata.qrc +++ b/src/plugins/clangcodemodel/test/data/clangtestdata.qrc @@ -43,5 +43,6 @@ <file>tooltips/tooltips.pro</file> <file>highlighting/highlighting.cpp</file> <file>highlighting/highlighting.pro</file> + <file>tooltips/subdir/tooltipinfo.h</file> </qresource> </RCC> diff --git a/src/plugins/clangcodemodel/test/data/tooltips/subdir/tooltipinfo.h b/src/plugins/clangcodemodel/test/data/tooltips/subdir/tooltipinfo.h new file mode 100644 index 0000000000..47d3bb92e7 --- /dev/null +++ b/src/plugins/clangcodemodel/test/data/tooltips/subdir/tooltipinfo.h @@ -0,0 +1,3 @@ +#define MACRO_FROM_HEADER(x) x + \ + x + \ + x diff --git a/src/plugins/clangcodemodel/test/data/tooltips/tooltips.pro b/src/plugins/clangcodemodel/test/data/tooltips/tooltips.pro index d10195696e..d5f7a749bf 100644 --- a/src/plugins/clangcodemodel/test/data/tooltips/tooltips.pro +++ b/src/plugins/clangcodemodel/test/data/tooltips/tooltips.pro @@ -1,3 +1,4 @@ TEMPLATE = app CONFIG -= qt SOURCES = tooltips.cpp +INCLUDEPATH += subdir |