aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cppeditor
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2024-02-20 16:23:25 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2024-02-21 10:02:07 +0000
commit5956254e6f8676d3f409e1c55b0388cfdda3dd2e (patch)
tree5ed9e72bcc4740612d7c9b3da78447c8ebf970aa /src/plugins/cppeditor
parentb9e4c98f1d0c9aac74ada21e1bd43795063b92d5 (diff)
CppEditor: Make check for clangd more fine-grained
... in the quickfix factories. We want to be able to offer or not offer certain quickfixes based on the current clangd version. Change-Id: I7dca69ff990ab9f1a691785cd72e633f7882ae3d Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Christian Stenger <christian.stenger@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'src/plugins/cppeditor')
-rw-r--r--src/plugins/cppeditor/cppeditordocument.cpp2
-rw-r--r--src/plugins/cppeditor/cppmodelmanager.cpp2
-rw-r--r--src/plugins/cppeditor/cppmodelmanager.h4
-rw-r--r--src/plugins/cppeditor/cppmodelmanagersupport.h8
-rw-r--r--src/plugins/cppeditor/cppquickfix.h10
-rw-r--r--src/plugins/cppeditor/cppquickfix_test.cpp2
-rw-r--r--src/plugins/cppeditor/cppquickfixes.cpp9
-rw-r--r--src/plugins/cppeditor/cppquickfixes.h4
8 files changed, 28 insertions, 13 deletions
diff --git a/src/plugins/cppeditor/cppeditordocument.cpp b/src/plugins/cppeditor/cppeditordocument.cpp
index badd02b751..459ae32977 100644
--- a/src/plugins/cppeditor/cppeditordocument.cpp
+++ b/src/plugins/cppeditor/cppeditordocument.cpp
@@ -475,7 +475,7 @@ bool CppEditorDocument::saveImpl(QString *errorString, const FilePath &filePath,
bool CppEditorDocument::usesClangd() const
{
- return CppModelManager::usesClangd(this);
+ return CppModelManager::usesClangd(this).has_value();
}
void CppEditorDocument::onDiagnosticsChanged(const FilePath &fileName, const QString &kind)
diff --git a/src/plugins/cppeditor/cppmodelmanager.cpp b/src/plugins/cppeditor/cppmodelmanager.cpp
index 27aab615b7..a6e6251898 100644
--- a/src/plugins/cppeditor/cppmodelmanager.cpp
+++ b/src/plugins/cppeditor/cppmodelmanager.cpp
@@ -1714,7 +1714,7 @@ bool CppModelManager::isCppEditor(IEditor *editor)
return editor->context().contains(ProjectExplorer::Constants::CXX_LANGUAGE_ID);
}
-bool CppModelManager::usesClangd(const TextEditor::TextDocument *document)
+std::optional<QVersionNumber> CppModelManager::usesClangd(const TextEditor::TextDocument *document)
{
return d->m_activeModelManagerSupport->usesClangd(document);
}
diff --git a/src/plugins/cppeditor/cppmodelmanager.h b/src/plugins/cppeditor/cppmodelmanager.h
index 0fe9e151ae..77cb212c6e 100644
--- a/src/plugins/cppeditor/cppmodelmanager.h
+++ b/src/plugins/cppeditor/cppmodelmanager.h
@@ -19,9 +19,11 @@
#include <QFuture>
#include <QObject>
#include <QStringList>
+#include <QVersionNumber>
#include <functional>
#include <memory>
+#include <optional>
#include <utility>
namespace Core {
@@ -132,7 +134,7 @@ public:
static void emitAbstractEditorSupportRemoved(const QString &filePath);
static bool isCppEditor(Core::IEditor *editor);
- static bool usesClangd(const TextEditor::TextDocument *document);
+ static std::optional<QVersionNumber> usesClangd(const TextEditor::TextDocument *document);
static bool isClangCodeModelActive();
static QSet<AbstractEditorSupport*> abstractEditorSupports();
diff --git a/src/plugins/cppeditor/cppmodelmanagersupport.h b/src/plugins/cppeditor/cppmodelmanagersupport.h
index c2c463df59..ca90d6758b 100644
--- a/src/plugins/cppeditor/cppmodelmanagersupport.h
+++ b/src/plugins/cppeditor/cppmodelmanagersupport.h
@@ -9,7 +9,10 @@
#include <utils/link.h>
+#include <QVersionNumber>
+
#include <functional>
+#include <optional>
namespace Core { class SearchResult; }
namespace TextEditor {
@@ -31,7 +34,10 @@ public:
virtual BaseEditorDocumentProcessor *createEditorDocumentProcessor(
TextEditor::TextDocument *baseTextDocument) = 0;
- virtual bool usesClangd(const TextEditor::TextDocument *) const { return false; }
+ virtual std::optional<QVersionNumber> usesClangd(const TextEditor::TextDocument *) const
+ {
+ return {};
+ }
virtual void followSymbol(const CursorInEditor &data,
const Utils::LinkHandler &processLinkCallback,
diff --git a/src/plugins/cppeditor/cppquickfix.h b/src/plugins/cppeditor/cppquickfix.h
index eab753ad6b..e901b2bd30 100644
--- a/src/plugins/cppeditor/cppquickfix.h
+++ b/src/plugins/cppeditor/cppquickfix.h
@@ -8,6 +8,10 @@
#include <texteditor/quickfix.h>
+#include <QVersionNumber>
+
+#include <optional>
+
namespace CppEditor {
namespace Internal {
class CppQuickFixInterface;
@@ -52,8 +56,8 @@ public:
static const QList<CppQuickFixFactory *> &cppQuickFixFactories();
- bool hasClangdReplacement() const { return m_hasClangdReplacement; }
- void setHasClangdReplacement() { m_hasClangdReplacement = true; }
+ std::optional<QVersionNumber> clangdReplacement() const { return m_clangdReplacement; }
+ void setClangdReplacement(const QVersionNumber &version) { m_clangdReplacement = version; }
private:
/*!
@@ -63,7 +67,7 @@ private:
virtual void doMatch(const Internal::CppQuickFixInterface &interface,
QuickFixOperations &result) = 0;
- bool m_hasClangdReplacement = false;
+ std::optional<QVersionNumber> m_clangdReplacement;
};
} // namespace CppEditor
diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp
index 56ae513a8a..d6de78b376 100644
--- a/src/plugins/cppeditor/cppquickfix_test.cpp
+++ b/src/plugins/cppeditor/cppquickfix_test.cpp
@@ -191,7 +191,7 @@ QuickFixOperationTest::QuickFixOperationTest(const QList<TestDocumentPtr> &testD
const QByteArray &clangFormatSettings)
: BaseQuickFixTestCase(testDocuments, headerPaths, clangFormatSettings)
{
- if (factory->hasClangdReplacement() && CppModelManager::isClangCodeModelActive())
+ if (factory->clangdReplacement() && CppModelManager::isClangCodeModelActive())
return;
QVERIFY(succeededSoFar());
diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp
index bf3f137511..df6c76bcf6 100644
--- a/src/plugins/cppeditor/cppquickfixes.cpp
+++ b/src/plugins/cppeditor/cppquickfixes.cpp
@@ -104,9 +104,12 @@ CppQuickFixFactory::~CppQuickFixFactory()
void CppQuickFixFactory::match(const Internal::CppQuickFixInterface &interface,
QuickFixOperations &result)
{
- if (m_hasClangdReplacement
- && CppModelManager::usesClangd(interface.currentFile()->editor()->textDocument())) {
- return;
+ if (m_clangdReplacement) {
+ if (const auto clangdVersion = CppModelManager::usesClangd(
+ interface.currentFile()->editor()->textDocument());
+ clangdVersion && clangdVersion >= m_clangdReplacement) {
+ return;
+ }
}
doMatch(interface, result);
diff --git a/src/plugins/cppeditor/cppquickfixes.h b/src/plugins/cppeditor/cppquickfixes.h
index 10f82c9dda..bd47b318c7 100644
--- a/src/plugins/cppeditor/cppquickfixes.h
+++ b/src/plugins/cppeditor/cppquickfixes.h
@@ -338,7 +338,7 @@ public:
class CompleteSwitchCaseStatement: public CppQuickFixFactory
{
public:
- CompleteSwitchCaseStatement() { setHasClangdReplacement(); }
+ CompleteSwitchCaseStatement() { setClangdReplacement({12}); }
private:
void doMatch(const CppQuickFixInterface &interface, QuickFixOperations &result) override;
@@ -580,7 +580,7 @@ public:
class RemoveUsingNamespace : public CppQuickFixFactory
{
public:
- RemoveUsingNamespace() { setHasClangdReplacement(); }
+ RemoveUsingNamespace() { setClangdReplacement({10}); }
private:
void doMatch(const CppQuickFixInterface &interface, TextEditor::QuickFixOperations &result) override;