C++: Fix completion for doxygen tags I

There are three cases that must be handled:

 1. Completion in C++ style comment
 2. Completion in first line of a C style comment
 3. Completion in non-first line of a C style comment

This change fixes case 1 + 2. Case 3 will be addressed in a follow-up
change, same goes for the duplication.

Task-number: QTCREATORBUG-15143
Change-Id: I449711f965ddcbbe6158870a8a5ae33218e0d238
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
This commit is contained in:
Nikolai Kosjar
2016-03-29 12:26:25 +02:00
parent 9905eb6f75
commit 4de62a7349
6 changed files with 52 additions and 2 deletions

View File

@@ -24,6 +24,7 @@
****************************************************************************/
#include "cppcompletionassist.h"
#include "cppdoxygen.h"
#include "cppmodelmanager.h"
#include "cpptoolsplugin.h"
#include "cpptoolstestcase.h"
@@ -171,6 +172,17 @@ bool isProbablyGlobalCompletion(const QStringList &list)
&& list.contains(QLatin1String("bool"));
}
bool isDoxygenTagCompletion(const QStringList &list)
{
for (int i = 1; i < T_DOXY_LAST_TAG; ++i) {
const QString doxygenTag = QString::fromLatin1(doxygenTagSpell(i));
if (!list.contains(doxygenTag))
return false;
}
return true;
}
} // anonymous namespace
void CppToolsPlugin::test_completion_basic_1()
@@ -384,6 +396,29 @@ void CppToolsPlugin::test_global_completion()
QVERIFY(completions.toSet().contains(requiredCompletionItems.toSet()));
}
void CppToolsPlugin::test_doxygen_tag_completion_data()
{
QTest::addColumn<QByteArray>("code");
QTest::newRow("C++ comment")
<< _("/// @");
QTest::newRow("C comment single line")
<< _("/*! @ */");
}
void CppToolsPlugin::test_doxygen_tag_completion()
{
QFETCH(QByteArray, code);
const QByteArray prefix = "\\";
CompletionTestCase test(code, prefix);
QVERIFY(test.succeededSoFar());
const QStringList completions = test.getCompletions();
QVERIFY(isDoxygenTagCompletion(completions));
}
static void enumTestCase(const QByteArray &tag, const QByteArray &source,
const QByteArray &prefix = QByteArray())
{