From 64a1bf6c438986c9aaf5134306e5a1675d820f04 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 25 Feb 2022 10:15:42 +0100 Subject: [PATCH] ClangCodeModel: Properly highlight built-in defines These are not reported as semantic tokens, so consult the AST Task-number: QTCREATORBUG-27111 Change-Id: I38efcfbdc3197173a50033a74a1bc631eaa8d2c1 Reviewed-by: Qt CI Bot Reviewed-by: David Schulz Reviewed-by: --- src/plugins/clangcodemodel/clangdclient.cpp | 10 +++++++++- src/plugins/clangcodemodel/test/clangdtests.cpp | 6 ++++++ .../test/data/highlighting/highlighting.cpp | 7 +++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 216b90da654..0d9eaa3fc10 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -3598,8 +3598,16 @@ void ExtraHighlightingResultsCollector::collectFromNode(const AstNode &node) } const bool isExpression = node.role() == "expression"; - const bool isDeclaration = node.role() == "declaration"; + if (isExpression && node.kind() == "Predefined") { + HighlightingResult result; + result.useTextSyles = true; + result.textStyles.mainStyle = C_PREPROCESSOR; + setResultPosFromRange(result, node.range()); + insertResult(result); + return; + } + const bool isDeclaration = node.role() == "declaration"; const int nodeStartPos = posForNodeStart(node); const int nodeEndPos = posForNodeEnd(node); const QList children = node.children().value_or(QList()); diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp index 98e720ba25c..adaa705cb85 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.cpp +++ b/src/plugins/clangcodemodel/test/clangdtests.cpp @@ -1302,6 +1302,12 @@ void ClangdTestHighlighting::test_data() << QList{C_FIELD} << 0; QTest::newRow("output arg") << 945 << 20 << 945 << 23 << QList{C_LOCAL, C_OUTPUT_ARGUMENT} << 0; + QTest::newRow("built-in define 1") << 950 << 21 << 950 << 29 + << QList{C_PREPROCESSOR} << 0; + QTest::newRow("built-in define 2") << 951 << 21 << 951 << 33 + << QList{C_PREPROCESSOR} << 0; + QTest::newRow("built-in define 3") << 952 << 21 << 952 << 40 + << QList{C_PREPROCESSOR} << 0; } void ClangdTestHighlighting::test() diff --git a/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp b/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp index 6230e7f0392..2ef28c11ba5 100644 --- a/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp +++ b/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp @@ -944,3 +944,10 @@ void inputsAndOutputsFromObject(const WithVector &s) std::vector out; transform(s.v, out, [] {}); } + +void builtinDefines() +{ + const auto f1 = __func__; + const auto f2 = __FUNCTION__; + const auto f3 = __PRETTY_FUNCTION__; +}