From 7c6a00b4e703b0d976f79598829531e8646f1ce0 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 31 Jan 2023 18:13:42 +0100 Subject: [PATCH] ClangCodeModel: Ignore number literals ... in the semantic highlighter. The syntax highlighter already handles these. Change-Id: I26f6bca06c4fc648ffe59bd9e3639d81d2265755 Reviewed-by: Qt CI Bot Reviewed-by: Reviewed-by: David Schulz --- .../clangcodemodel/clangdsemantichighlighting.cpp | 11 ++--------- src/plugins/clangcodemodel/test/clangdtests.cpp | 15 --------------- src/plugins/cppeditor/cpphighlighter.cpp | 11 ++++++++++- .../cppeditor/testcases/highlightingtestcase.cpp | 9 +++++++++ 4 files changed, 21 insertions(+), 25 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdsemantichighlighting.cpp b/src/plugins/clangcodemodel/clangdsemantichighlighting.cpp index 8f505853977..cc16bf2b96c 100644 --- a/src/plugins/clangcodemodel/clangdsemantichighlighting.cpp +++ b/src/plugins/clangcodemodel/clangdsemantichighlighting.cpp @@ -594,16 +594,9 @@ void ExtraHighlightingResultsCollector::setResultPosFromRange(HighlightingResult void ExtraHighlightingResultsCollector::collectFromNode(const ClangdAstNode &node) { - if (node.kind() == "UserDefinedLiteral") + if (node.kind().endsWith("Literal")) return; - if (node.kind().endsWith("Literal")) { - if (node.kind() == "CXXBoolLiteral" || node.kind() == "CXXNullPtrLiteral") - return; - if (node.kind().startsWith("String") || node.kind().startsWith("Character")) - return; - insertResult(node, C_NUMBER); - return; - } + if (node.role() == "type" && node.kind() == "Builtin") { insertResult(node, C_PRIMITIVE_TYPE); return; diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp index 917991c6074..f343ad34f47 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.cpp +++ b/src/plugins/clangcodemodel/test/clangdtests.cpp @@ -693,8 +693,6 @@ void ClangdTestHighlighting::test_data() QTest::addColumn>("expectedStyles"); QTest::addColumn("expectedKind"); - QTest::newRow("integer literal") << 23 << 24 << 23 << 25 << QList{C_NUMBER} << 0; - QTest::newRow("float literal") << 24 << 24 << 24 << 28 << QList{C_NUMBER} << 0; QTest::newRow("function definition") << 45 << 5 << 45 << 13 << QList{C_FUNCTION, C_FUNCTION_DEFINITION, C_DECLARATION} << 0; QTest::newRow("member function definition") << 52 << 10 << 52 << 24 @@ -797,15 +795,12 @@ void ClangdTestHighlighting::test_data() << QList{C_PUNCTUATION, C_OPERATOR, C_OVERLOADED_OPERATOR, C_DECLARATION} << 0; QTest::newRow("operator<<= call") << 629 << 12 << 629 << 15 << QList{C_PUNCTUATION, C_OPERATOR, C_OVERLOADED_OPERATOR} << 0; - QTest::newRow("integer literal 2") << 629 << 16 << 629 << 17 << QList{C_NUMBER} << 0; QTest::newRow("operator(int) member declaration (opening paren") << 619 << 19 << 619 << 20 << QList{C_PUNCTUATION, C_OPERATOR, C_OVERLOADED_OPERATOR, C_DECLARATION} << 0; QTest::newRow("operator(int) member declaration (closing paren") << 619 << 20 << 619 << 21 << QList{C_PUNCTUATION, C_OPERATOR, C_OVERLOADED_OPERATOR, C_DECLARATION} << 0; QTest::newRow("operator(int) call (opening parenthesis)") << 632 << 12 << 632 << 13 << QList{C_PUNCTUATION, C_OPERATOR, C_OVERLOADED_OPERATOR} << 0; - QTest::newRow("operator(int) call (argument)") << 632 << 13 << 632 << 14 - << QList{C_NUMBER} << 0; QTest::newRow("operator(int) call (closing parenthesis)") << 632 << 14 << 632 << 15 << QList{C_PUNCTUATION, C_OPERATOR, C_OVERLOADED_OPERATOR} << 0; QTest::newRow("operator[] member declaration (opening bracket") << 620 << 18 << 620 << 19 @@ -814,8 +809,6 @@ void ClangdTestHighlighting::test_data() << QList{C_PUNCTUATION, C_OPERATOR, C_OVERLOADED_OPERATOR, C_DECLARATION} << 0; QTest::newRow("operator[] call (opening bracket)") << 633 << 12 << 633 << 13 << QList{C_PUNCTUATION, C_OPERATOR, C_OVERLOADED_OPERATOR} << 0; - QTest::newRow("operator[] call (argument)") << 633 << 13 << 633 << 14 - << QList{C_NUMBER} << 0; QTest::newRow("operator[] call (closing bracket)") << 633 << 14 << 633 << 15 << QList{C_PUNCTUATION, C_OPERATOR, C_OVERLOADED_OPERATOR} << 0; QTest::newRow("operator new member declaration") << 621 << 20 << 621 << 23 @@ -834,8 +827,6 @@ void ClangdTestHighlighting::test_data() << QList{C_KEYWORD, C_OPERATOR, C_OVERLOADED_OPERATOR} << 0; QTest::newRow("operator new[] member call (type argument)") << 637 << 23 << 637 << 28 << QList{C_TYPE} << 0; - QTest::newRow("operator new[] member call (size argument)") << 637 << 29 << 637 << 31 - << QList{C_NUMBER} << 0; QTest::newRow("operator delete[] member declaration (keyword)") << 624 << 19 << 624 << 25 << QList{C_KEYWORD, C_OPERATOR, C_OVERLOADED_OPERATOR, C_DECLARATION} << 0; QTest::newRow("operator delete[] member call (keyword") << 638 << 5 << 638 << 11 @@ -878,10 +869,6 @@ void ClangdTestHighlighting::test_data() << QList{C_MACRO, C_DECLARATION} << 0; QTest::newRow("function-like macro call") << 236 << 5 << 236 << 20 << QList{C_MACRO} << 0; - QTest::newRow("function-like macro call argument 1") << 236 << 21 << 236 << 22 - << QList{C_NUMBER} << 0; - QTest::newRow("function-like macro call argument 2") << 236 << 24 << 236 << 25 - << QList{C_NUMBER} << 0; QTest::newRow("function template call") << 254 << 5 << 254 << 21 << QList{C_FUNCTION} << 0; QTest::newRow("template type parameter") << 265 << 17 << 265 << 38 << QList{C_TYPE, C_DECLARATION} << 0; @@ -889,8 +876,6 @@ void ClangdTestHighlighting::test_data() << QList{C_TYPE} << 0; QTest::newRow("template non-type parameter") << 265 << 50 << 265 << 74 << QList{C_PARAMETER, C_DECLARATION} << 0; - QTest::newRow("template non-type parameter default argument") << 265 << 77 << 265 << 78 - << QList{C_NUMBER} << 0; QTest::newRow("template template parameter") << 265 << 103 << 265 << 128 << QList{C_TYPE, C_DECLARATION} << 0; QTest::newRow("template template parameter default argument") << 265 << 131 << 265 << 142 diff --git a/src/plugins/cppeditor/cpphighlighter.cpp b/src/plugins/cppeditor/cpphighlighter.cpp index 011a118d611..da0d8b6da0f 100644 --- a/src/plugins/cppeditor/cpphighlighter.cpp +++ b/src/plugins/cppeditor/cpphighlighter.cpp @@ -481,7 +481,7 @@ void CppHighlighterTest::test_data() QTest::addColumn("lastColumn"); QTest::addColumn("style"); - QTest::newRow("auto") << 1 << 1 << 1 << 4 << C_KEYWORD; + QTest::newRow("auto return type") << 1 << 1 << 1 << 4 << C_KEYWORD; QTest::newRow("opening brace") << 2 << 1 << 2 << 1 << C_PUNCTUATION; QTest::newRow("return") << 3 << 5 << 3 << 10 << C_KEYWORD; QTest::newRow("raw string prefix") << 3 << 12 << 3 << 14 << C_KEYWORD; @@ -501,6 +501,15 @@ void CppHighlighterTest::test_data() 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; + QTest::newRow("auto var type") << 18 << 15 << 18 << 8 << C_KEYWORD; + QTest::newRow("integer literal") << 18 << 28 << 18 << 28 << C_NUMBER; + QTest::newRow("floating-point literal 1") << 19 << 28 << 19 << 31 << C_NUMBER; + QTest::newRow("floating-point literal 2") << 20 << 28 << 20 << 30 << C_NUMBER; + QTest::newRow("template keyword") << 23 << 1 << 23 << 8 << C_KEYWORD; + QTest::newRow("type in template type parameter") << 23 << 10 << 23 << 12 << C_PRIMITIVE_TYPE; + QTest::newRow("integer literal as non-type template parameter default value") + << 23 << 18 << 23 << 18 << C_NUMBER; + QTest::newRow("class keyword") << 23 << 21 << 23 << 25 << C_KEYWORD; } void CppHighlighterTest::test() diff --git a/src/plugins/cppeditor/testcases/highlightingtestcase.cpp b/src/plugins/cppeditor/testcases/highlightingtestcase.cpp index 3ba45e22b82..fb93e5a4132 100644 --- a/src/plugins/cppeditor/testcases/highlightingtestcase.cpp +++ b/src/plugins/cppeditor/testcases/highlightingtestcase.cpp @@ -12,3 +12,12 @@ void keywords() bool b2 = false; void *p = nullptr; } + +void numberLiterals() +{ + auto integer = 1; + auto numFloat1 = 1.2f; + auto numFloat2 = 1.2; +} + +template class C;