diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2024-02-20 16:23:25 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2024-02-21 10:02:07 +0000 |
commit | 5956254e6f8676d3f409e1c55b0388cfdda3dd2e (patch) | |
tree | 5ed9e72bcc4740612d7c9b3da78447c8ebf970aa /src/plugins/cppeditor | |
parent | b9e4c98f1d0c9aac74ada21e1bd43795063b92d5 (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.cpp | 2 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppmodelmanager.cpp | 2 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppmodelmanager.h | 4 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppmodelmanagersupport.h | 8 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppquickfix.h | 10 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppquickfix_test.cpp | 2 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppquickfixes.cpp | 9 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppquickfixes.h | 4 |
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; |