forked from qt-creator/qt-creator
		
	Improve completion for function declarations.
Instead of just completing void A::foo(|) -> void A::foo(int i|), we now complete void A::foo(|) -> void A::foo(int i) const| where | represents the place of the cursor. Reviewed-by: Thorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>
This commit is contained in:
		@@ -212,12 +212,21 @@ protected:
 | 
			
		||||
    { _item = newCompletionItem(name->unqualifiedNameId()); }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct CompleteFunctionDeclaration
 | 
			
		||||
{
 | 
			
		||||
    explicit CompleteFunctionDeclaration(Function *f = 0)
 | 
			
		||||
        : function(f)
 | 
			
		||||
    {}
 | 
			
		||||
 | 
			
		||||
    Function *function;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // namespace Internal
 | 
			
		||||
} // namespace CppTools
 | 
			
		||||
 | 
			
		||||
using namespace CppTools::Internal;
 | 
			
		||||
 | 
			
		||||
Q_DECLARE_METATYPE(CompleteFunctionDeclaration)
 | 
			
		||||
 | 
			
		||||
void FakeToolTipFrame::paintEvent(QPaintEvent *)
 | 
			
		||||
{
 | 
			
		||||
@@ -1071,18 +1080,13 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList<TypeOfExpressi
 | 
			
		||||
                    Overview overview;
 | 
			
		||||
                    overview.setShowArgumentNames(true);
 | 
			
		||||
 | 
			
		||||
                    // get rid of parentheses and cv-qualifiers
 | 
			
		||||
                    QString completion = overview(f->type());
 | 
			
		||||
                    if (f->isVolatile() || f->isConst())
 | 
			
		||||
                        completion = completion.mid(1, completion.lastIndexOf(')') - 1);
 | 
			
		||||
                    else
 | 
			
		||||
                        completion = completion.mid(1, completion.size() - 2);
 | 
			
		||||
                    // gets: "parameter list) cv-spec",
 | 
			
		||||
                    QString completion = overview(f->type()).mid(1);
 | 
			
		||||
 | 
			
		||||
                    if (completion.size()) {
 | 
			
		||||
                        TextEditor::CompletionItem item(this);
 | 
			
		||||
                        item.text = completion;
 | 
			
		||||
                        m_completions.append(item);
 | 
			
		||||
                    }
 | 
			
		||||
                    TextEditor::CompletionItem item(this);
 | 
			
		||||
                    item.text = completion;
 | 
			
		||||
                    item.data = QVariant::fromValue(CompleteFunctionDeclaration(f));
 | 
			
		||||
                    m_completions.append(item);
 | 
			
		||||
                }
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
@@ -1560,6 +1564,14 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (m_autoInsertBrackets && item.data.canConvert<CompleteFunctionDeclaration>()) {
 | 
			
		||||
            // everything from the closing parenthesis on are extra chars, to
 | 
			
		||||
            // make sure an auto-inserted ")" gets replaced by ") const" if necessary
 | 
			
		||||
            int closingParen = toInsert.lastIndexOf(QLatin1Char(')'));
 | 
			
		||||
            extraChars = toInsert.mid(closingParen);
 | 
			
		||||
            toInsert.truncate(closingParen);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Avoid inserting characters that are already there
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user