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 };