From 780f89b377ad939de45601169a16942dd57dfaa0 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 2 May 2022 17:18:46 +0200 Subject: [PATCH] ClangCodeModel: Bump minimum clangd version We need clangd >= 14 to get rid of the cumbersome compile_commands.json creation. Change-Id: I30c19a385e2d76e478985f3df64968d1cb3efe87 Reviewed-by: Reviewed-by: Qt CI Bot Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangdclient.cpp | 13 +---- .../clangcodemodel/test/clangdtests.cpp | 47 ++----------------- .../cppeditor/cppcodemodelsettings.cpp | 2 +- .../cppeditor/cppcodemodelsettingspage.cpp | 4 +- 4 files changed, 9 insertions(+), 57 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index e48d9ea7824..96be0ed09b1 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -636,8 +636,7 @@ static BaseClientInterface *clientInterface(Project *project, const Utils::FileP cmd.addArg("--compile-commands-dir=" + jsonDbDir.toString()); if (clangdLogServer().isDebugEnabled()) cmd.addArgs({"--log=verbose", "--pretty"}); - if (settings.clangdVersion() >= QVersionNumber(14)) - cmd.addArg("--use-dirty-headers"); + cmd.addArg("--use-dirty-headers"); const auto interface = new StdIOClientInterface; interface->setCommandLine(cmd); return interface; @@ -3390,16 +3389,6 @@ IAssistProcessor *ClangdClient::ClangdCompletionAssistProvider::createProcessor( contextAnalyzer.positionEndOfExpression(), contextAnalyzer.completionOperator(), CustomAssistMode::Preprocessor); - case ClangCompletionContextAnalyzer::CompleteIncludePath: - if (m_client->versionNumber() < QVersionNumber(14)) { // https://reviews.llvm.org/D112996 - qCDebug(clangdLogCompletion) << "creating include processor"; - return new CustomAssistProcessor(m_client, - contextAnalyzer.positionForProposal(), - contextAnalyzer.positionEndOfExpression(), - contextAnalyzer.completionOperator(), - CustomAssistMode::IncludePath); - } - [[fallthrough]]; default: break; } diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp index 779b5ee9552..51faaaa7dd3 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.cpp +++ b/src/plugins/clangcodemodel/test/clangdtests.cpp @@ -238,8 +238,6 @@ void ClangdTestFindReferences::test_data() ItemList pureVirtualRefs{makeItem(17, 17, Usage::Type::Declaration), makeItem(21, 9, Usage::Type::Declaration)}; - if (client()->versionNumber() < QVersionNumber(14)) - pureVirtualRefs << pureVirtualRefs.last(); QTest::newRow("pure virtual declaration") << "defs.h" << 420 << pureVirtualRefs; QTest::newRow("pointer variable") << "main.cpp" << 52 << ItemList{ @@ -400,8 +398,6 @@ void ClangdTestFollowSymbol::test() timer.stop(); QCOMPARE(actualLink.targetFilePath, filePath(targetFile)); - if (client()->versionNumber() < QVersionNumber(14)) - QEXPECT_FAIL("union member ref", "https://github.com/clangd/clangd/issues/877", Abort); QCOMPARE(actualLink.targetLine, targetLine); QCOMPARE(actualLink.targetColumn + 1, targetColumn); } @@ -627,11 +623,6 @@ void ClangdTestTooltips::test() QCOMPARE(editor->document(), doc); QVERIFY(editor->editorWidget()); - if (client()->versionNumber() < QVersionNumber(14) - && QLatin1String(QTest::currentDataTag()) == QLatin1String("IncludeDirective")) { - QSKIP("clangd <= 13 sends empty or no hover data for includes"); - } - QTimer timer; timer.setSingleShot(true); QEventLoop loop; @@ -654,10 +645,8 @@ void ClangdTestTooltips::test() timer.stop(); QEXPECT_FAIL("TypeName_ResolveTemplateTypeAlias", "typedef already resolved in AST", Abort); - if (client()->versionNumber() >= QVersionNumber(14)) { - QEXPECT_FAIL("TypeNameIntroducedByUsingDeclarationQualified", - "https://github.com/clangd/clangd/issues/989", Abort); - } + QEXPECT_FAIL("TypeNameIntroducedByUsingDeclarationQualified", + "https://github.com/clangd/clangd/issues/989", Abort); QCOMPARE(int(helpItem.category()), expectedCategory); QEXPECT_FAIL("TemplateClassQualified", "Additional look-up needed?", Abort); QCOMPARE(helpItem.helpIds(), expectedIds); @@ -1376,11 +1365,6 @@ void ClangdTestHighlighting::test() }; const TextEditor::HighlightingResults results = findResults(); - if (client()->versionNumber() < QVersionNumber(14)) { - QEXPECT_FAIL("typedef as underlying type in enum declaration", - "https://github.com/clangd/clangd/issues/878", - Abort); - } QEXPECT_FAIL("old-style signal (signal)", "check if and how we want to support this", Abort); QEXPECT_FAIL("old-style signal (signal parameter)", "check if and how we want to support this", Abort); @@ -1417,17 +1401,6 @@ void ClangdTestHighlighting::test() actualStyles << s; } - - if (client()->versionNumber() < QVersionNumber(14)) { - QEXPECT_FAIL("final virtual function call via pointer", - "clangd < 14 does not send virtual modifier", Continue); - QEXPECT_FAIL("virtual member function definition outside of class body", - "clangd < 14 does not send virtual modifier", Continue); - QEXPECT_FAIL("virtual function call via pointer", - "clangd < 14 does not send virtual modifier", Continue); - QEXPECT_FAIL("non-final virtual function call via pointer", - "clangd < 14 does not send virtual modifier", Continue); - } QEXPECT_FAIL("non-const reference via member function call as output argument (object)", "See below", Continue); QEXPECT_FAIL("non-const reference via member function call as output argument (function)", @@ -1583,15 +1556,9 @@ void ClangdTestCompletion::testCompleteIncludeDirective() getProposal("includeDirectiveCompletion.cpp", proposal); QVERIFY(proposal); - if (client()->versionNumber() < QVersionNumber(14)) { - QVERIFY(hasItem(proposal, "file.h")); - QVERIFY(hasItem(proposal, "otherFile.h")); - QVERIFY(hasItem(proposal, "mylib/")); - } else { - QVERIFY(hasItem(proposal, " file.h>")); - QVERIFY(hasItem(proposal, " otherFile.h>")); - QVERIFY(hasItem(proposal, " mylib/")); - } + QVERIFY(hasItem(proposal, " file.h>")); + QVERIFY(hasItem(proposal, " otherFile.h>")); + QVERIFY(hasItem(proposal, " mylib/")); QVERIFY(!hasSnippet(proposal, "class ")); } @@ -1889,10 +1856,6 @@ void ClangdTestCompletion::testSignalCompletion() getProposal("signalCompletion.cpp", proposal, customCode); QVERIFY(proposal); - if (client()->versionNumber() < QVersionNumber(14) - && QString::fromLatin1(QTest::currentDataTag()).startsWith("positive:")) { - QEXPECT_FAIL("", "Signal info in completions requires clangd >= 14", Abort); - } QCOMPARE(proposal->size(), expectedSuggestions.size()); for (const QString &expectedSuggestion : qAsConst(expectedSuggestions)) QVERIFY2(hasItem(proposal, ' ' + expectedSuggestion), qPrintable(expectedSuggestion)); diff --git a/src/plugins/cppeditor/cppcodemodelsettings.cpp b/src/plugins/cppeditor/cppcodemodelsettings.cpp index ebad938a17e..2b576ae2dc2 100644 --- a/src/plugins/cppeditor/cppcodemodelsettings.cpp +++ b/src/plugins/cppeditor/cppcodemodelsettings.cpp @@ -337,7 +337,7 @@ ClangdSettings::ClangdSettings() bool ClangdSettings::useClangd() const { - return m_data.useClangd && clangdVersion() >= QVersionNumber(13); + return m_data.useClangd && clangdVersion() >= QVersionNumber(14); } void ClangdSettings::setDefaultClangdPath(const FilePath &filePath) diff --git a/src/plugins/cppeditor/cppcodemodelsettingspage.cpp b/src/plugins/cppeditor/cppcodemodelsettingspage.cpp index 7b1af0fe72a..1d30d1afec0 100644 --- a/src/plugins/cppeditor/cppcodemodelsettingspage.cpp +++ b/src/plugins/cppeditor/cppcodemodelsettingspage.cpp @@ -381,9 +381,9 @@ ClangdSettingsWidget::ClangdSettingsWidget(const ClangdSettings::Data &settingsD "Unexpected clangd output.")); return; } - if (clangdVersion < QVersionNumber(13)) { + if (clangdVersion < QVersionNumber(14)) { labelSetter.setWarning(tr("The clangd version is %1, but %2 or greater is required.") - .arg(clangdVersion.toString()).arg(13)); + .arg(clangdVersion.toString()).arg(14)); return; } };