diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 89d89c75a41..916cbe37c0a 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -2667,6 +2667,11 @@ static void semanticHighlighter(QFutureInterface &future, const QList path = getAstPath(ast, range); if (path.size() < 2) return false; + if (token.type == "property" + && (path.rbegin()->kind() == "MemberInitializer" + || path.rbegin()->kind() == "CXXConstruct")) { + return false; + } for (auto it = path.rbegin() + 1; it != path.rend(); ++it) { if (it->kind() == "Call" || it->kind() == "CXXConstruct" || it->kind() == "MemberInitializer") { diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp index 78250c1aa28..2d996c2af41 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.cpp +++ b/src/plugins/clangcodemodel/test/clangdtests.cpp @@ -1288,6 +1288,10 @@ void ClangdTestHighlighting::test_data() << QList{C_LOCAL} << 0; QTest::newRow("const operator()") << 903 << 5 << 903 << 7 << QList{C_LOCAL} << 0; + QTest::newRow("member initialization: member (user-defined type)") << 911 << 14 << 911 << 18 + << QList{C_FIELD} << 0; + QTest::newRow("member initialization: member (built-in type)") << 911 << 23 << 911 << 27 + << QList{C_FIELD} << 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 44ee7ac8686..492b4a37a5e 100644 --- a/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp +++ b/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp @@ -902,3 +902,15 @@ void callOperators() Callable2 c2; c2(); } + +namespace std { template struct atomic { atomic(int) {} }; } + +void constructorMemberInitialization() +{ + struct S { + S(): m_m1(1), m_m2(0) {} + + std::atomic m_m1; + int m_m2; + }; +}