diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index effe6a1f760..d0a54042df9 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -2706,8 +2706,9 @@ static void semanticHighlighter(QFutureInterface &future, const AstNode n = firstChildTree.takeFirst(); const QString detail = n.detail().value_or(QString()); if (detail.startsWith("operator")) { - return !detail.contains('=') && !detail.contains("++") - && !detail.contains("--"); + return !detail.contains('=') + && !detail.contains("++") && !detail.contains("--") + && !detail.contains("<<") && !detail.contains(">>"); } firstChildTree << n.children().value_or(QList()); } diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp index d03fcc2c896..6efddf7c20a 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.cpp +++ b/src/plugins/clangcodemodel/test/clangdtests.cpp @@ -1295,6 +1295,9 @@ void ClangdTestHighlighting::test_data() 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; } void ClangdTestHighlighting::test() diff --git a/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp b/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp index c54dfe13710..40a4ef23b4c 100644 --- a/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp +++ b/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp @@ -921,3 +921,17 @@ void keywords() bool b2 = false; void *p = nullptr; } + +namespace std { +struct Debug {}; +Debug& operator<<(Debug &dbg, int) { return dbg; } +Debug& operator>>(Debug &dbg, int&) { return dbg; } +static Debug cout; +static Debug cin; +} +void outputOperator() +{ + std::cout << 0; + int i; + std::cin >> i; +}