diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 07e8956f0a0..48cb1bf13bd 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -2576,7 +2576,8 @@ static QList cleanupDisabledCode(HighlightingResults &results, const } if (wasIfdefedOut && (it + 1 == results.end() - || (it + 1)->textStyles.mainStyle != C_DISABLED_CODE)) { + || (it + 1)->textStyles.mainStyle != C_DISABLED_CODE + || (it + 1)->line != it->line + 1)) { // The #else or #endif that ends disabled code should not be disabled. const QTextBlock block = doc->findBlockByNumber(it->line - 1); ifdefedOutRanges << BlockRange(rangeStartPos, block.position()); diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp index 36217ad8d76..6ed6163a6bd 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.cpp +++ b/src/plugins/clangcodemodel/test/clangdtests.cpp @@ -675,6 +675,8 @@ void ClangdTestHighlighting::initTestCase() { ClangdTest::initTestCase(); + connect(document("highlighting.cpp"), &TextDocument::ifdefedOutBlocksChanged, this, + [this](const QList &ranges) { m_ifdefedOutBlocks = ranges; }); QTimer timer; timer.setSingleShot(true); QEventLoop loop; @@ -1380,6 +1382,17 @@ void ClangdTestHighlighting::test() QCOMPARE(result.kind, expectedKind); } +void ClangdTestHighlighting::testIfdefedOutBlocks() +{ + QCOMPARE(m_ifdefedOutBlocks.size(), 3); + QCOMPARE(m_ifdefedOutBlocks.at(0).first(), 12033); + QCOMPARE(m_ifdefedOutBlocks.at(0).last(), 12050); + QCOMPARE(m_ifdefedOutBlocks.at(1).first(), 13351); + QCOMPARE(m_ifdefedOutBlocks.at(1).last(), 13364); + QCOMPARE(m_ifdefedOutBlocks.at(2).first(), 13390); + QCOMPARE(m_ifdefedOutBlocks.at(2).last(), 13402); +} + class Manipulator : public TextDocumentManipulatorInterface { diff --git a/src/plugins/clangcodemodel/test/clangdtests.h b/src/plugins/clangcodemodel/test/clangdtests.h index b6399a9c59f..66f41cfa156 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.h +++ b/src/plugins/clangcodemodel/test/clangdtests.h @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -141,9 +142,11 @@ private slots: void initTestCase() override; void test_data(); void test(); + void testIfdefedOutBlocks(); private: TextEditor::HighlightingResults m_results; + QList m_ifdefedOutBlocks; }; class ClangdTestCompletion : public ClangdTest diff --git a/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp b/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp index 46112c2f136..7ebc39d433f 100644 --- a/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp +++ b/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp @@ -869,3 +869,14 @@ void constMemberAsFunctionArg() const Foo &constMember; }; } + +# if 0 +#define FOO + +#endif + +// comment + +#if 0 +#define BAR +# endif diff --git a/src/plugins/texteditor/textdocument.cpp b/src/plugins/texteditor/textdocument.cpp index 4376cc17398..696e4caf0a2 100644 --- a/src/plugins/texteditor/textdocument.cpp +++ b/src/plugins/texteditor/textdocument.cpp @@ -532,6 +532,10 @@ void TextDocument::setIfdefedOutBlocks(const QList &blocks) if (needUpdate) documentLayout->requestUpdate(); + +#ifdef WITH_TESTS + emit ifdefedOutBlocksChanged(blocks); +#endif } const ExtraEncodingSettings &TextDocument::extraEncodingSettings() const diff --git a/src/plugins/texteditor/textdocument.h b/src/plugins/texteditor/textdocument.h index 71a9a120a6c..0385bb2463f 100644 --- a/src/plugins/texteditor/textdocument.h +++ b/src/plugins/texteditor/textdocument.h @@ -172,6 +172,10 @@ signals: void fontSettingsChanged(); void markRemoved(TextMark *mark); +#ifdef WITH_TESTS + void ifdefedOutBlocksChanged(const QList &blocks); +#endif + protected: virtual void applyFontSettings();