File indexing completed on 2024-05-05 05:51:20
0001 /* 0002 SPDX-FileCopyrightText: 2021 Waqar Ahmed <waqar.17a@gmail.com> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 #pragma once 0007 0008 #include <ktexteditor/codecompletionmodel.h> 0009 #include <ktexteditor/codecompletionmodelcontrollerinterface.h> 0010 #include <ktexteditor/view.h> 0011 0012 #include <QStandardItemModel> 0013 0014 /** 0015 * Project wide completion support. 0016 */ 0017 class CMakeCompletion : public KTextEditor::CodeCompletionModel, public KTextEditor::CodeCompletionModelControllerInterface 0018 { 0019 Q_OBJECT 0020 0021 Q_INTERFACES(KTextEditor::CodeCompletionModelControllerInterface) 0022 0023 using Controller = KTextEditor::CodeCompletionModelControllerInterface; 0024 0025 public: 0026 /** 0027 * Construct project completion. 0028 * @param plugin our plugin 0029 */ 0030 explicit CMakeCompletion(QObject *parent = nullptr); 0031 0032 /** 0033 * This function is responsible to generating / updating the list of current 0034 * completions. The default implementation does nothing. 0035 * 0036 * When implementing this function, remember to call setRowCount() (or implement 0037 * rowCount()), and to generate the appropriate change notifications (for instance 0038 * by calling QAbstractItemModel::reset()). 0039 * @param view The view to generate completions for 0040 * @param range The range of text to generate completions for 0041 * */ 0042 void completionInvoked(KTextEditor::View *view, const KTextEditor::Range &range, InvocationType invocationType) override; 0043 0044 bool shouldStartCompletion(KTextEditor::View *view, const QString &insertedText, bool userInsertion, const KTextEditor::Cursor &position) override; 0045 0046 int rowCount(const QModelIndex &parent) const override; 0047 0048 QVariant data(const QModelIndex &index, int role) const override; 0049 0050 static bool isCMakeFile(const QUrl &url); 0051 0052 // KTextEditor::Range completionRange(KTextEditor::View *view, const KTextEditor::Cursor &position) override; 0053 0054 // void allMatches(QStandardItemModel &model, KTextEditor::View *view, const KTextEditor::Range &range) const; 0055 0056 struct Completion { 0057 enum Kind { 0058 Compl_PROPERTY, 0059 Compl_VARIABLE, 0060 Compl_COMMAND, 0061 } kind; 0062 QByteArray text; 0063 }; 0064 0065 private: 0066 std::vector<Completion> m_matches; 0067 0068 bool m_hasData = false; 0069 };