ClangCodeModel: Fix clangd highlighting of string literals

... passed to macros defined in a different file.
This amends e77e57420a. Contrary to our expectation, it is possible that
AST nodes that are marked as belonging (only) to a header file can
contain child nodes that belong to the main file.

Fixes: QTCREATORBUG-26553
Change-Id: I4d1d877d8e1e2dcf7d81b63aa98e1149b5514e3f
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2021-11-17 13:39:54 +01:00
parent 9d24d886e2
commit 037d2b3889
4 changed files with 13 additions and 2 deletions

View File

@@ -3640,12 +3640,11 @@ void ExtraHighlightingResultsCollector::visitNode(const AstNode &node)
if (m_future.isCanceled())
return;
switch (node.fileStatus(m_filePath)) {
case AstNode::FileStatus::Foreign:
return;
case AstNode::FileStatus::Ours:
case AstNode::FileStatus::Unknown:
collectFromNode(node);
[[fallthrough]];
case AstNode::FileStatus::Foreign:
case ClangCodeModel::Internal::AstNode::FileStatus::Mixed: {
const auto children = node.children();
if (!children)

View File

@@ -1252,6 +1252,10 @@ void ClangdTestHighlighting::test_data()
QTest::newRow("simple return") << 841 << 12 << 841 << 15 << QList<int>{C_LOCAL} << 0;
QTest::newRow("lambda parameter") << 847 << 49 << 847 << 52
<< QList<int>{C_PARAMETER, C_DECLARATION} << 0;
QTest::newRow("string literal passed to macro from same file") << 853 << 32 << 853 << 38
<< QList<int>{C_STRING} << 0;
QTest::newRow("string literal passed to macro from header file") << 854 << 32 << 854 << 38
<< QList<int>{C_STRING} << 0;
}
void ClangdTestHighlighting::test()

View File

@@ -846,3 +846,10 @@ void testConstRefAutoLambdaArgs()
{
useContainer(FooPtrVector(), [](const auto &arg) {});
}
#define USE_STRING(s) (s)
void useString()
{
const char *s = USE_STRING("TEXT");
s = USE_STRING_FROM_HEADER("TEXT");
}

View File

@@ -0,0 +1 @@
#define USE_STRING_FROM_HEADER(s) (s)