From 6414f22be773725663a842f258ffb9456f7ac3c6 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 15 Feb 2022 11:24:02 +0100 Subject: [PATCH] ClangCodeModel: Fix highlighting of literals with clangd Some literals are keywords. Task-number: QTCREATORBUG-27059 Change-Id: I6315bfd4e4179990e55bc046084fdf0a4e3f9e8e Reviewed-by: Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangdclient.cpp | 8 +++++--- src/plugins/clangcodemodel/test/clangdtests.cpp | 3 +++ .../test/data/highlighting/highlighting.cpp | 7 +++++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 916cbe37c0a..4ec7646552f 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -3565,9 +3565,11 @@ void ExtraHighlightingResultsCollector::collectFromNode(const AstNode &node) if (node.kind().endsWith("Literal")) { HighlightingResult result; result.useTextSyles = true; - const bool isStringLike = node.kind().startsWith("String") - || node.kind().startsWith("Character"); - result.textStyles.mainStyle = isStringLike ? C_STRING : C_NUMBER; + const bool isKeyword = node.kind() == "CXXBoolLiteral" + || node.kind() == "CXXNullPtrLiteral"; + const bool isStringLike = !isKeyword && (node.kind().startsWith("String") + || node.kind().startsWith("Character")); + result.textStyles.mainStyle = isKeyword ? C_KEYWORD : isStringLike ? C_STRING : C_NUMBER; setResultPosFromRange(result, node.range()); insertResult(result); return; diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp index 2d996c2af41..6f5e3df3eef 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.cpp +++ b/src/plugins/clangcodemodel/test/clangdtests.cpp @@ -1292,6 +1292,9 @@ void ClangdTestHighlighting::test_data() << QList{C_FIELD} << 0; QTest::newRow("member initialization: member (built-in type)") << 911 << 23 << 911 << 27 << QList{C_FIELD} << 0; + QTest::newRow("keywords: true") << 920 << 15 << 920 << 19 << QList{C_KEYWORD} << 0; + QTest::newRow("keywords: false") << 921 << 15 << 921 << 20 << QList{C_KEYWORD} << 0; + QTest::newRow("keywords: nullptr") << 922 << 15 << 922 << 22 << QList{C_KEYWORD} << 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 492b4a37a5e..c54dfe13710 100644 --- a/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp +++ b/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp @@ -914,3 +914,10 @@ void constructorMemberInitialization() int m_m2; }; } + +void keywords() +{ + bool b1 = true; + bool b2 = false; + void *p = nullptr; +}