summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/clangcodemodel/clangcompletion.cpp6
-rw-r--r--src/plugins/cpptools/cppcompletion_test.cpp29
-rw-r--r--src/plugins/cpptools/cppcompletionassist.cpp5
3 files changed, 33 insertions, 7 deletions
diff --git a/src/plugins/clangcodemodel/clangcompletion.cpp b/src/plugins/clangcodemodel/clangcompletion.cpp
index b7727de317..a9ad07a75a 100644
--- a/src/plugins/clangcodemodel/clangcompletion.cpp
+++ b/src/plugins/clangcodemodel/clangcompletion.cpp
@@ -680,6 +680,7 @@ int ClangCompletionAssistProcessor::startCompletionHelper()
return startCompletionInternal(fileName, line, column, endOfOperator);
}
+// TODO: Extract duplicated logic from InternalCppCompletionAssistProcessor::startOfOperator
int ClangCompletionAssistProcessor::startOfOperator(int pos,
unsigned *kind,
bool wantFunctionCall) const
@@ -724,8 +725,9 @@ int ClangCompletionAssistProcessor::startOfOperator(int pos,
start = pos;
}
// Don't complete in comments or strings, but still check for include completion
- else if (tk.is(T_COMMENT) || tk.is(T_CPP_COMMENT) ||
- (tk.isLiteral() && (*kind != T_STRING_LITERAL
+ else if (tk.is(T_COMMENT) || tk.is(T_CPP_COMMENT)
+ || tk.is(T_CPP_DOXY_COMMENT) || tk.is(T_DOXY_COMMENT)
+ || (tk.isLiteral() && (*kind != T_STRING_LITERAL
&& *kind != T_ANGLE_STRING_LITERAL
&& *kind != T_SLASH))) {
*kind = T_EOF_SYMBOL;
diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp
index f15950bc71..baa0f784d7 100644
--- a/src/plugins/cpptools/cppcompletion_test.cpp
+++ b/src/plugins/cpptools/cppcompletion_test.cpp
@@ -341,25 +341,48 @@ void CppToolsPlugin::test_global_completion_data()
{
QTest::addColumn<QByteArray>("code");
QTest::addColumn<QByteArray>("prefix");
+ QTest::addColumn<QStringList>("requiredCompletionItems");
// Check that special completion after '&' for Qt5 signal/slots does not
// interfere global completion after '&'
QTest::newRow("global completion after & in return expression")
<< _("void f() { foo(myObject, @); }\n")
- << _("&");
+ << _("&")
+ << QStringList();
QTest::newRow("global completion after & in function argument")
<< _("int f() { return @; }\n")
- << _("&");
+ << _("&")
+ << QStringList();
+
+ // Check global completion after one line comments
+ const QByteArray codeTemplate = "int myGlobal;\n"
+ "<REPLACEMENT>\n"
+ "@\n";
+ const QStringList replacements = QStringList()
+ << QLatin1String("// text")
+ << QLatin1String("// text.")
+ << QLatin1String("/// text")
+ << QLatin1String("/// text.")
+ ;
+ foreach (const QString &replacement, replacements) {
+ QByteArray code = codeTemplate;
+ code.replace("<REPLACEMENT>", replacement.toUtf8());
+ const QByteArray tag = _("completion after comment: ") + replacement.toUtf8();
+ QTest::newRow(tag) << code << QByteArray() << QStringList(QLatin1String("myGlobal"));
+ }
}
void CppToolsPlugin::test_global_completion()
{
QFETCH(QByteArray, code);
QFETCH(QByteArray, prefix);
+ QFETCH(QStringList, requiredCompletionItems);
CompletionTestCase test(code, prefix);
QVERIFY(test.succeededSoFar());
- QVERIFY(isProbablyGlobalCompletion(test.getCompletions()));
+ const QStringList completions = test.getCompletions();
+ QVERIFY(isProbablyGlobalCompletion(completions));
+ QVERIFY(completions.toSet().contains(requiredCompletionItems.toSet()));
}
static void enumTestCase(const QByteArray &tag, const QByteArray &source,
diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp
index 8811ae5132..b6fd792f73 100644
--- a/src/plugins/cpptools/cppcompletionassist.cpp
+++ b/src/plugins/cpptools/cppcompletionassist.cpp
@@ -974,8 +974,9 @@ int InternalCppCompletionAssistProcessor::startOfOperator(int pos,
start = pos;
}
// Don't complete in comments or strings, but still check for include completion
- else if (tk.is(T_COMMENT) || tk.is(T_CPP_COMMENT) ||
- (tk.isLiteral() && (*kind != T_STRING_LITERAL
+ else if (tk.is(T_COMMENT) || tk.is(T_CPP_COMMENT)
+ || tk.is(T_CPP_DOXY_COMMENT) || tk.is(T_DOXY_COMMENT)
+ || (tk.isLiteral() && (*kind != T_STRING_LITERAL
&& *kind != T_ANGLE_STRING_LITERAL
&& *kind != T_SLASH
&& *kind != T_DOT))) {