From c31522731ce9790b84e5d01e512c0f723758ceb1 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 31 Jan 2023 18:02:08 +0100 Subject: [PATCH] ClangCodeModel: Ignore boolean and pointer literals ... when doing semantic highlighting. The syntax highlighter already handles these. Change-Id: I048e033eda5b72d2e6eafaaccdb66040a00afe6a Reviewed-by: Qt CI Bot Reviewed-by: Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangdsemantichighlighting.cpp | 8 ++++---- src/plugins/clangcodemodel/test/clangdtests.cpp | 3 --- src/plugins/cppeditor/cpphighlighter.cpp | 5 +++++ src/plugins/cppeditor/testcases/highlightingtestcase.cpp | 7 +++++++ 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdsemantichighlighting.cpp b/src/plugins/clangcodemodel/clangdsemantichighlighting.cpp index 771b9898679..8f505853977 100644 --- a/src/plugins/clangcodemodel/clangdsemantichighlighting.cpp +++ b/src/plugins/clangcodemodel/clangdsemantichighlighting.cpp @@ -597,11 +597,11 @@ void ExtraHighlightingResultsCollector::collectFromNode(const ClangdAstNode &nod if (node.kind() == "UserDefinedLiteral") return; if (node.kind().endsWith("Literal")) { - const bool isKeyword = node.kind() == "CXXBoolLiteral" - || node.kind() == "CXXNullPtrLiteral"; - if (!isKeyword && (node.kind().startsWith("String") || node.kind().startsWith("Character"))) + if (node.kind() == "CXXBoolLiteral" || node.kind() == "CXXNullPtrLiteral") return; - insertResult(node, isKeyword ? C_KEYWORD : C_NUMBER); + if (node.kind().startsWith("String") || node.kind().startsWith("Character")) + return; + insertResult(node, C_NUMBER); return; } if (node.role() == "type" && node.kind() == "Builtin") { diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp index a644b3a045d..917991c6074 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.cpp +++ b/src/plugins/clangcodemodel/test/clangdtests.cpp @@ -1259,9 +1259,6 @@ 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; QTest::newRow("operator<<") << 934 << 10 << 934 << 14 << QList{C_GLOBAL} << 0; QTest::newRow("operator>>") << 936 << 10 << 936 << 13 << QList{C_GLOBAL} << 0; QTest::newRow("operator>>") << 936 << 17 << 936 << 18 << QList{C_LOCAL} << 0; diff --git a/src/plugins/cppeditor/cpphighlighter.cpp b/src/plugins/cppeditor/cpphighlighter.cpp index f09331efae6..011a118d611 100644 --- a/src/plugins/cppeditor/cpphighlighter.cpp +++ b/src/plugins/cppeditor/cpphighlighter.cpp @@ -496,6 +496,11 @@ void CppHighlighterTest::test_data() QTest::newRow("raw string suffix 3") << 6 << 51 << 6 << 52 << C_KEYWORD; QTest::newRow("semicolon") << 6 << 53 << 6 << 53 << C_PUNCTUATION; QTest::newRow("closing brace") << 7 << 1 << 7 << 1 << C_PUNCTUATION; + QTest::newRow("void") << 9 << 1 << 9 << 4 << C_PRIMITIVE_TYPE; + QTest::newRow("bool") << 11 << 5 << 11 << 8 << C_PRIMITIVE_TYPE; + QTest::newRow("true") << 11 << 15 << 11 << 18 << C_KEYWORD; + QTest::newRow("false") << 12 << 15 << 12 << 19 << C_KEYWORD; + QTest::newRow("nullptr") << 13 << 15 << 13 << 21 << C_KEYWORD; } void CppHighlighterTest::test() diff --git a/src/plugins/cppeditor/testcases/highlightingtestcase.cpp b/src/plugins/cppeditor/testcases/highlightingtestcase.cpp index 89d002e851e..3ba45e22b82 100644 --- a/src/plugins/cppeditor/testcases/highlightingtestcase.cpp +++ b/src/plugins/cppeditor/testcases/highlightingtestcase.cpp @@ -5,3 +5,10 @@ auto func() R"notaprefix!( barfoobar)" R"(second)" /* comment */ R"(third)"; } + +void keywords() +{ + bool b1 = true; + bool b2 = false; + void *p = nullptr; +}