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 <codecompletion.h> 29 30 #include <texteditor/codeassist/assistproposaliteminterface.h> 31 32 #include <QString> 33 34 namespace ClangCodeModel { 35 namespace Internal { 36 37 class ClangAssistProposalItem final : public TextEditor::AssistProposalItemInterface 38 { 39 friend bool operator<(const ClangAssistProposalItem &first, const ClangAssistProposalItem &second); 40 public: 41 ~ClangAssistProposalItem() noexcept override = default; 42 bool prematurelyApplies(const QChar &typedCharacter) const final; 43 bool implicitlyApplies() const final; 44 void apply(TextEditor::TextDocumentManipulatorInterface &manipulator, int basePosition) const final; 45 46 void setText(const QString &text); 47 QString text() const final; 48 QIcon icon() const final; 49 QString detail() const final; 50 bool isKeyword() const final; 51 Qt::TextFormat detailFormat() const final; 52 bool isSnippet() const final; 53 bool isValid() const final; 54 quint64 hash() const final; 55 bool requiresFixIts() const final; 56 57 void keepCompletionOperator(unsigned compOp); 58 59 bool hasOverloadsWithParameters() const; 60 void setHasOverloadsWithParameters(bool hasOverloadsWithParameters); 61 62 void appendCodeCompletion(const ClangBackEnd::CodeCompletion &firstCodeCompletion); 63 const ClangBackEnd::CodeCompletion &firstCodeCompletion() const; 64 void removeFirstCodeCompletion(); 65 66 private: 67 const QVector<ClangBackEnd::FixItContainer> &firstCompletionFixIts() const; 68 QString fixItText() const; 69 int fixItsShift(const TextEditor::TextDocumentManipulatorInterface &manipulator) const; 70 71 std::vector<ClangBackEnd::CodeCompletion> m_codeCompletions; 72 QList<ClangBackEnd::CodeCompletion> m_overloads; 73 bool m_hasOverloadsWithParameters = false; 74 QString m_text; 75 unsigned m_completionOperator; 76 mutable QChar m_typedCharacter; 77 }; 78 79 } // namespace Internal 80 } // namespace ClangCodeModel 81