1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of Qt Creator.
7 **
8 ** Commercial License Usage
9 ** Licensees holding valid commercial Qt licenses may use this file in
10 ** accordance with the commercial license agreement provided with the
11 ** Software or, alternatively, in accordance with the terms contained in
12 ** a written agreement between you and The Qt Company. For licensing terms
13 ** and conditions see https://www.qt.io/terms-conditions. For further
14 ** information use the contact form at https://www.qt.io/contact-us.
15 **
16 ** GNU General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU
18 ** General Public License version 3 as published by the Free Software
19 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
20 ** included in the packaging of this file. Please review the following
21 ** information to ensure the GNU General Public License requirements will
22 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
23 **
24 ****************************************************************************/
25 
26 #pragma once
27 
28 #include "cpptools_global.h"
29 
30 #include <texteditor/codeassist/iassistprocessor.h>
31 #include <texteditor/snippets/snippetassistcollector.h>
32 
33 #include <functional>
34 
35 QT_BEGIN_NAMESPACE
36 class QTextDocument;
37 QT_END_NAMESPACE
38 
39 namespace CPlusPlus {
40 struct LanguageFeatures;
41 }
42 
43 namespace CppTools {
44 
45 class CPPTOOLS_EXPORT CppCompletionAssistProcessor : public TextEditor::IAssistProcessor
46 {
47 public:
48     explicit CppCompletionAssistProcessor(int snippetItemOrder = 0);
49 
50 protected:
51     void addSnippets();
52 
53     using DotAtIncludeCompletionHandler = std::function<void(int &startPosition, unsigned *kind)>;
54     static void startOfOperator(QTextDocument *textDocument,
55                                 int positionInDocument,
56                                 unsigned *kind,
57                                 int &start,
58                                 const CPlusPlus::LanguageFeatures &languageFeatures,
59                                 bool adjustForQt5SignalSlotCompletion = false,
60                                 DotAtIncludeCompletionHandler dotAtIncludeCompletionHandler
61                                     = DotAtIncludeCompletionHandler());
62 
63     int m_positionForProposal = -1;
64     QList<TextEditor::AssistProposalItemInterface *> m_completions;
65     QStringList m_preprocessorCompletions;
66     TextEditor::IAssistProposal *m_hintProposal = nullptr;
67 
68 private:
69     TextEditor::SnippetAssistCollector m_snippetCollector;
70 };
71 
72 } // namespace CppTools
73