summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcodecompletion.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
-rw-r--r--src/plugins/cpptools/cppcodecompletion.cpp36
1 files changed, 24 insertions, 12 deletions
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 1d77d7c867..30fb1ce2ed 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -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);
-
- if (completion.size()) {
- TextEditor::CompletionItem item(this);
- item.text = completion;
- m_completions.append(item);
- }
+ // gets: "parameter list) cv-spec",
+ QString completion = overview(f->type()).mid(1);
+
+ 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