aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2021-07-29 16:50:55 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2021-08-18 12:10:34 +0000
commit49b002682683716e9297dda7e39538afec62c753 (patch)
tree9bf9287a89db1bded65884ebc3623b667df5b441
parent2384865bff2b8d03539abddc3511b3351bbf8f6b (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>
-rw-r--r--src/plugins/clangcodemodel/clangdclient.cpp16
-rw-r--r--src/plugins/clangcodemodel/test/clangdtests.cpp5
-rw-r--r--src/plugins/clangcodemodel/test/data/clangtestdata.qrc1
-rw-r--r--src/plugins/clangcodemodel/test/data/tooltips/subdir/tooltipinfo.h3
-rw-r--r--src/plugins/clangcodemodel/test/data/tooltips/tooltips.pro1
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