File indexing completed on 2024-05-19 15:41:37
0001 /* 0002 SPDX-FileCopyrightText: 2011 Sven Brauch <svenbrauch@googlemail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "implementfunction.h" 0008 0009 #include <language/codecompletion/codecompletionmodel.h> 0010 #include <language/duchain/duchainutils.h> 0011 #include <interfaces/icore.h> 0012 #include <interfaces/isession.h> 0013 #include <interfaces/idocumentcontroller.h> 0014 0015 #include <KTextEditor/View> 0016 #include <KTextEditor/Document> 0017 #include <KTextEditor/Editor> 0018 0019 #include <QIcon> 0020 0021 using namespace KDevelop; 0022 using namespace KTextEditor; 0023 0024 namespace Python { 0025 0026 ImplementFunctionCompletionItem::ImplementFunctionCompletionItem(const QString& name, const QStringList& arguments, const QString& previousIndent) 0027 : m_arguments(arguments), m_name(name), m_previousIndent(previousIndent) 0028 { 0029 0030 } 0031 0032 void ImplementFunctionCompletionItem::execute(KTextEditor::View* view, const KTextEditor::Range& word) 0033 { 0034 auto document = view->document(); 0035 const QString finalText = m_name + "(" + m_arguments.join(", ") + "):"; 0036 document->replaceText(word, finalText); 0037 // 4 spaces is indentation for python. everyone does it like this. you must, too. 0038 // TODO use kate settings 0039 document->insertLine(word.start().line() + 1, m_previousIndent + " "); 0040 if ( View* view = ICore::self()->documentController()->activeTextDocumentView() ) { 0041 view->setCursorPosition(Cursor(word.end().line() + 1, m_previousIndent.length() + 4)); 0042 } 0043 } 0044 0045 QVariant ImplementFunctionCompletionItem::data(const QModelIndex& index, int role, const KDevelop::CodeCompletionModel* model) const 0046 { 0047 switch ( role ) { 0048 case KDevelop::CodeCompletionModel::MatchQuality: { 0049 return QVariant(m_name.startsWith("__") ? 0 : 10); 0050 } 0051 case KDevelop::CodeCompletionModel::BestMatchesCount: { 0052 return QVariant(5); 0053 } 0054 case Qt::DisplayRole: 0055 switch ( index.column() ) { 0056 case KDevelop::CodeCompletionModel::Name: 0057 return m_name + "(" + m_arguments.join(", ") + ")"; 0058 case KDevelop::CodeCompletionModel::Postfix: 0059 return ""; 0060 case KDevelop::CodeCompletionModel::Prefix: 0061 return "Override method"; 0062 default: 0063 return ""; 0064 } 0065 case Qt::DecorationRole: 0066 if( index.column() == KDevelop::CodeCompletionModel::Icon ) { 0067 KDevelop::CodeCompletionModel::CompletionProperties p(KDevelop::CodeCompletionModel::Function); 0068 return DUChainUtils::iconForProperties(p); 0069 } 0070 // Fall through 0071 default: return CompletionTreeItem::data(index, role, model); 0072 } 0073 } 0074 0075 } // namespace Python