Merge remote-tracking branch 'origin/4.0'

Conflicts:
	qtcreator.pri
	qtcreator.qbs
	src/plugins/debugger/debuggerruncontrol.cpp

Change-Id: I81b43480a1369e3d7be60ae26e812dda6b962b0b
This commit is contained in:
Oswald Buddenhagen
2016-04-01 17:31:39 +02:00
143 changed files with 6586 additions and 2764 deletions

View File

@@ -24,6 +24,7 @@
****************************************************************************/
#include "cppcompletionassist.h"
#include "cppdoxygen.h"
#include "cppmodelmanager.h"
#include "cpptoolsplugin.h"
#include "cpptoolstestcase.h"
@@ -110,6 +111,8 @@ public:
ExplicitlyInvoked, m_snapshot,
ProjectPartHeaderPaths(),
languageFeatures);
ai->prepareForAsyncUse();
ai->recreateTextDocument();
InternalCppCompletionAssistProcessor processor;
const Tests::IAssistProposalScopedPointer proposal(processor.perform(ai));
@@ -171,6 +174,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 +398,34 @@ 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")
<< _("/*! @ */");
QTest::newRow("C comment multi line")
<< _("/*! text\n"
" * @\n"
" */\n");
}
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())
{

View File

@@ -941,118 +941,35 @@ IAssistProposal *InternalCppCompletionAssistProcessor::createHintProposal(
return proposal;
}
int InternalCppCompletionAssistProcessor::startOfOperator(int pos,
int InternalCppCompletionAssistProcessor::startOfOperator(int positionInDocument,
unsigned *kind,
bool wantFunctionCall) const
{
const QChar ch = pos > -1 ? m_interface->characterAt(pos - 1) : QChar();
const QChar ch2 = pos > 0 ? m_interface->characterAt(pos - 2) : QChar();
const QChar ch3 = pos > 1 ? m_interface->characterAt(pos - 3) : QChar();
const QChar ch = m_interface->characterAt(positionInDocument - 1);
const QChar ch2 = m_interface->characterAt(positionInDocument - 2);
const QChar ch3 = m_interface->characterAt(positionInDocument - 3);
int start = pos - CppCompletionAssistProvider::activationSequenceChar(ch, ch2, ch3, kind,
wantFunctionCall, /*wantQt5SignalSlots*/ true);
if (start != pos) {
QTextCursor tc(m_interface->textDocument());
tc.setPosition(pos);
int start = positionInDocument
- CppCompletionAssistProvider::activationSequenceChar(ch, ch2, ch3, kind,
wantFunctionCall,
/*wantQt5SignalSlots*/ true);
// Include completion: make sure the quote character is the first one on the line
if (*kind == T_STRING_LITERAL) {
QTextCursor s = tc;
s.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor);
QString sel = s.selectedText();
if (sel.indexOf(QLatin1Char('"')) < sel.length() - 1) {
*kind = T_EOF_SYMBOL;
start = pos;
}
}
if (*kind == T_COMMA) {
ExpressionUnderCursor expressionUnderCursor(m_interface->languageFeatures());
if (expressionUnderCursor.startOfFunctionCall(tc) == -1) {
*kind = T_EOF_SYMBOL;
start = pos;
}
}
SimpleLexer tokenize;
tokenize.setLanguageFeatures(m_interface->languageFeatures());
tokenize.setSkipComments(false);
const Tokens &tokens = tokenize(tc.block().text(), BackwardsScanner::previousBlockState(tc.block()));
const int tokenIdx = SimpleLexer::tokenBefore(tokens, qMax(0, tc.positionInBlock() - 1)); // get the token at the left of the cursor
const Token tk = (tokenIdx == -1) ? Token() : tokens.at(tokenIdx);
if (*kind == T_AMPER && tokenIdx > 0) {
const Token &previousToken = tokens.at(tokenIdx - 1);
if (previousToken.kind() == T_COMMA)
start = pos - (tk.utf16charOffset - previousToken.utf16charOffset) - 1;
} else if (*kind == T_DOXY_COMMENT && !(tk.is(T_DOXY_COMMENT) || tk.is(T_CPP_DOXY_COMMENT))) {
*kind = T_EOF_SYMBOL;
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.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))) {
*kind = T_EOF_SYMBOL;
start = pos;
// Include completion: can be triggered by slash, but only in a string
} else if (*kind == T_SLASH && (tk.isNot(T_STRING_LITERAL) && tk.isNot(T_ANGLE_STRING_LITERAL))) {
*kind = T_EOF_SYMBOL;
start = pos;
} else if (*kind == T_LPAREN) {
if (tokenIdx > 0) {
const Token &previousToken = tokens.at(tokenIdx - 1); // look at the token at the left of T_LPAREN
switch (previousToken.kind()) {
case T_IDENTIFIER:
case T_GREATER:
case T_SIGNAL:
case T_SLOT:
break; // good
default:
// that's a bad token :)
*kind = T_EOF_SYMBOL;
start = pos;
}
}
}
// Check for include preprocessor directive
else if (*kind == T_STRING_LITERAL || *kind == T_ANGLE_STRING_LITERAL|| *kind == T_SLASH
|| (*kind == T_DOT && (tk.is(T_STRING_LITERAL) || tk.is(T_ANGLE_STRING_LITERAL)))) {
bool include = false;
if (tokens.size() >= 3) {
if (tokens.at(0).is(T_POUND) && tokens.at(1).is(T_IDENTIFIER) && (tokens.at(2).is(T_STRING_LITERAL) ||
tokens.at(2).is(T_ANGLE_STRING_LITERAL))) {
const Token &directiveToken = tokens.at(1);
QString directive = tc.block().text().mid(directiveToken.utf16charsBegin(),
directiveToken.utf16chars());
if (directive == QLatin1String("include") ||
directive == QLatin1String("include_next") ||
directive == QLatin1String("import")) {
include = true;
}
}
}
if (!include) {
*kind = T_EOF_SYMBOL;
start = pos;
} else {
if (*kind == T_DOT) {
start = findStartOfName(start);
const QChar ch4 = start > -1 ? m_interface->characterAt(start - 1) : QChar();
const QChar ch5 = start > 0 ? m_interface->characterAt(start - 2) : QChar();
const QChar ch6 = start > 1 ? m_interface->characterAt(start - 3) : QChar();
start = start - CppCompletionAssistProvider::activationSequenceChar(
ch4, ch5, ch6, kind, wantFunctionCall, false);
}
}
}
}
const auto dotAtIncludeCompletionHandler = [this](int &start, unsigned *kind) {
start = findStartOfName(start);
const QChar ch4 = m_interface->characterAt(start - 1);
const QChar ch5 = m_interface->characterAt(start - 2);
const QChar ch6 = m_interface->characterAt(start - 3);
start = start - CppCompletionAssistProvider::activationSequenceChar(
ch4, ch5, ch6, kind, false, false);
};
CppCompletionAssistProcessor::startOfOperator(m_interface->textDocument(),
positionInDocument,
kind,
start,
m_interface->languageFeatures(),
/*adjustForQt5SignalSlotCompletion=*/ true,
dotAtIncludeCompletionHandler);
return start;
}

View File

@@ -105,7 +105,7 @@ private:
TextEditor::IAssistProposal *createHintProposal(QList<CPlusPlus::Function *> symbols) const;
bool accepts() const;
int startOfOperator(int pos, unsigned *kind, bool wantFunctionCall) const;
int startOfOperator(int positionInDocument, unsigned *kind, bool wantFunctionCall) const;
int findStartOfName(int pos = -1) const;
int startCompletionHelper();
bool tryObjCCompletion();

View File

@@ -27,6 +27,17 @@
#include <cppeditor/cppeditorconstants.h>
#include <cplusplus/BackwardsScanner.h>
#include <cplusplus/ExpressionUnderCursor.h>
#include <cplusplus/SimpleLexer.h>
#include <cplusplus/Token.h>
#include <QTextBlock>
#include <QTextCursor>
#include <QTextDocument>
using namespace CPlusPlus;
namespace CppTools {
CppCompletionAssistProcessor::CppCompletionAssistProcessor()
@@ -70,4 +81,118 @@ void CppCompletionAssistProcessor::addSnippets()
m_completions.append(m_snippetCollector.collect());
}
static bool isDoxygenTagCompletionCharacter(const QChar &character)
{
return character == QLatin1Char('\\')
|| character == QLatin1Char('@') ;
}
void CppCompletionAssistProcessor::startOfOperator(QTextDocument *textDocument,
int positionInDocument,
unsigned *kind,
int &start,
const CPlusPlus::LanguageFeatures &languageFeatures,
bool adjustForQt5SignalSlotCompletion,
DotAtIncludeCompletionHandler dotAtIncludeCompletionHandler)
{
if (start != positionInDocument) {
QTextCursor tc(textDocument);
tc.setPosition(positionInDocument);
// Include completion: make sure the quote character is the first one on the line
if (*kind == T_STRING_LITERAL) {
QTextCursor s = tc;
s.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor);
QString sel = s.selectedText();
if (sel.indexOf(QLatin1Char('"')) < sel.length() - 1) {
*kind = T_EOF_SYMBOL;
start = positionInDocument;
}
}
if (*kind == T_COMMA) {
ExpressionUnderCursor expressionUnderCursor(languageFeatures);
if (expressionUnderCursor.startOfFunctionCall(tc) == -1) {
*kind = T_EOF_SYMBOL;
start = positionInDocument;
}
}
SimpleLexer tokenize;
tokenize.setLanguageFeatures(languageFeatures);
tokenize.setSkipComments(false);
const Tokens &tokens = tokenize(tc.block().text(), BackwardsScanner::previousBlockState(tc.block()));
const int tokenIdx = SimpleLexer::tokenBefore(tokens, qMax(0, tc.positionInBlock() - 1)); // get the token at the left of the cursor
const Token tk = (tokenIdx == -1) ? Token() : tokens.at(tokenIdx);
const QChar characterBeforePositionInDocument
= textDocument->characterAt(positionInDocument - 1);
if (adjustForQt5SignalSlotCompletion && *kind == T_AMPER && tokenIdx > 0) {
const Token &previousToken = tokens.at(tokenIdx - 1);
if (previousToken.kind() == T_COMMA)
start = positionInDocument - (tk.utf16charOffset - previousToken.utf16charOffset) - 1;
} else if (*kind == T_DOXY_COMMENT && !(tk.is(T_DOXY_COMMENT) || tk.is(T_CPP_DOXY_COMMENT))) {
*kind = T_EOF_SYMBOL;
start = positionInDocument;
// Do not complete in comments, except in doxygen comments for doxygen commands.
// Do not complete in strings, except it is for include completion.
} else if (tk.is(T_COMMENT) || tk.is(T_CPP_COMMENT)
|| ((tk.is(T_CPP_DOXY_COMMENT) || tk.is(T_DOXY_COMMENT))
&& !isDoxygenTagCompletionCharacter(characterBeforePositionInDocument))
|| (tk.isLiteral() && (*kind != T_STRING_LITERAL
&& *kind != T_ANGLE_STRING_LITERAL
&& *kind != T_SLASH
&& *kind != T_DOT))) {
*kind = T_EOF_SYMBOL;
start = positionInDocument;
// Include completion: can be triggered by slash, but only in a string
} else if (*kind == T_SLASH && (tk.isNot(T_STRING_LITERAL) && tk.isNot(T_ANGLE_STRING_LITERAL))) {
*kind = T_EOF_SYMBOL;
start = positionInDocument;
} else if (*kind == T_LPAREN) {
if (tokenIdx > 0) {
const Token &previousToken = tokens.at(tokenIdx - 1); // look at the token at the left of T_LPAREN
switch (previousToken.kind()) {
case T_IDENTIFIER:
case T_GREATER:
case T_SIGNAL:
case T_SLOT:
break; // good
default:
// that's a bad token :)
*kind = T_EOF_SYMBOL;
start = positionInDocument;
}
}
}
// Check for include preprocessor directive
else if (*kind == T_STRING_LITERAL || *kind == T_ANGLE_STRING_LITERAL || *kind == T_SLASH
|| (*kind == T_DOT
&& (tk.is(T_STRING_LITERAL) || tk.is(T_ANGLE_STRING_LITERAL)))) {
bool include = false;
if (tokens.size() >= 3) {
if (tokens.at(0).is(T_POUND) && tokens.at(1).is(T_IDENTIFIER) && (tokens.at(2).is(T_STRING_LITERAL) ||
tokens.at(2).is(T_ANGLE_STRING_LITERAL))) {
const Token &directiveToken = tokens.at(1);
QString directive = tc.block().text().mid(directiveToken.utf16charsBegin(),
directiveToken.utf16chars());
if (directive == QLatin1String("include") ||
directive == QLatin1String("include_next") ||
directive == QLatin1String("import")) {
include = true;
}
}
}
if (!include) {
*kind = T_EOF_SYMBOL;
start = positionInDocument;
} else if (*kind == T_DOT && dotAtIncludeCompletionHandler){
dotAtIncludeCompletionHandler(start, kind);
}
}
}
}
} // namespace CppTools

View File

@@ -32,6 +32,16 @@
#include <cplusplus/Icons.h>
#include <functional>
QT_BEGIN_NAMESPACE
class QTextDocument;
QT_END_NAMESPACE
namespace CPlusPlus {
struct LanguageFeatures;
}
namespace CppTools {
class CPPTOOLS_EXPORT CppCompletionAssistProcessor : public TextEditor::IAssistProcessor
@@ -42,6 +52,16 @@ public:
protected:
void addSnippets();
using DotAtIncludeCompletionHandler = std::function<void(int &startPosition, unsigned *kind)>;
static void startOfOperator(QTextDocument *textDocument,
int positionInDocument,
unsigned *kind,
int &start,
const CPlusPlus::LanguageFeatures &languageFeatures,
bool adjustForQt5SignalSlotCompletion = false,
DotAtIncludeCompletionHandler dotAtIncludeCompletionHandler
= DotAtIncludeCompletionHandler());
int m_positionForProposal;
QList<TextEditor::AssistProposalItemInterface *> m_completions;
QStringList m_preprocessorCompletions;

File diff suppressed because it is too large Load Diff

View File

@@ -33,222 +33,287 @@ namespace CppTools {
enum DoxygenReservedWord {
T_DOXY_IDENTIFIER,
T_DOXY_A,
T_DOXY_ABSTRACT,
T_DOXY_ADDINDEX,
T_DOXY_ADDTOGROUP,
T_DOXY_ANCHOR,
T_DOXY_ANNOTATEDLIST,
T_DOXY_ARG,
T_DOXY_ATTENTION,
T_DOXY_AUTHOR,
T_DOXY_CALLGRAPH,
T_DOXY_CODE,
T_DOXY_DOT,
T_DOXY_ELSE,
T_DOXY_ENDCODE,
T_DOXY_ENDCOND,
T_DOXY_ENDDOT,
T_DOXY_ENDHTMLONLY,
T_DOXY_ENDIF,
T_DOXY_ENDLATEXONLY,
T_DOXY_ENDLINK,
T_DOXY_ENDMANONLY,
T_DOXY_ENDVERBATIM,
T_DOXY_ENDXMLONLY,
T_DOXY_HIDEINITIALIZER,
T_DOXY_HTMLONLY,
T_DOXY_INTERFACE,
T_DOXY_INTERNAL,
T_DOXY_INVARIANT,
T_DOXY_LATEXONLY,
T_DOXY_LI,
T_DOXY_MANONLY,
T_DOXY_N,
T_DOXY_NOSUBGROUPING,
T_DOXY_NOTE,
T_DOXY_ONLY,
T_DOXY_POST,
T_DOXY_PRE,
T_DOXY_REMARKS,
T_DOXY_RETURN,
T_DOXY_RETURNS,
T_DOXY_SA,
T_DOXY_SEE,
T_DOXY_SHOWINITIALIZER,
T_DOXY_SINCE,
T_DOXY_TEST,
T_DOXY_TODO,
T_DOXY_VERBATIM,
T_DOXY_WARNING,
T_DOXY_XMLONLY,
T_DOXY_A,
T_DOXY_ADDTOGROUP,
T_DOXY_ANCHOR,
T_DOXY_AUTHORS,
T_DOXY_B,
T_DOXY_C,
T_DOXY_CLASS,
T_DOXY_COND,
T_DOXY_COPYDOC,
T_DOXY_DEF,
T_DOXY_DONTINCLUDE,
T_DOXY_DOTFILE,
T_DOXY_E,
T_DOXY_ELSEIF,
T_DOXY_EM,
T_DOXY_ENUM,
T_DOXY_EXAMPLE,
T_DOXY_EXCEPTION,
T_DOXY_EXCEPTIONS,
T_DOXY_FILE,
T_DOXY_HTMLINCLUDE,
T_DOXY_IF,
T_DOXY_IFNOT,
T_DOXY_INCLUDE,
T_DOXY_LINK,
T_DOXY_NAMESPACE,
T_DOXY_P,
T_DOXY_PACKAGE,
T_DOXY_REF,
T_DOXY_RELATES,
T_DOXY_RELATESALSO,
T_DOXY_RETVAL,
T_DOXY_THROW,
T_DOXY_THROWS,
T_DOXY_VERBINCLUDE,
T_DOXY_VERSION,
T_DOXY_XREFITEM,
T_DOXY_PARAM,
T_DOXY_IMAGE,
T_DOXY_DEFGROUP,
T_DOXY_PAGE,
T_DOXY_PARAGRAPH,
T_DOXY_SECTION,
T_DOXY_STRUCT,
T_DOXY_SUBSECTION,
T_DOXY_SUBSUBSECTION,
T_DOXY_UNION,
T_DOXY_WEAKGROUP,
T_DOXY_ADDINDEX,
T_DOXY_BRIEF,
T_DOXY_BUG,
T_DOXY_DATE,
T_DOXY_DEPRECATED,
T_DOXY_FN,
T_DOXY_INGROUP,
T_DOXY_LINE,
T_DOXY_MAINPAGE,
T_DOXY_NAME,
T_DOXY_OVERLOAD,
T_DOXY_PAR,
T_DOXY_SHORT,
T_DOXY_SKIP,
T_DOXY_SKIPLINE,
T_DOXY_TYPEDEF,
T_DOXY_UNTIL,
T_DOXY_VAR,
T_FIRST_QDOC_TAG,
T_DOXY_ABSTRACT = T_FIRST_QDOC_TAG,
T_DOXY_BADCODE,
T_DOXY_BASENAME,
T_DOXY_BOLD,
T_DOXY_BRIEF,
T_DOXY_BUG,
T_DOXY_C,
T_DOXY_CALLERGRAPH,
T_DOXY_CALLGRAPH,
T_DOXY_CAPTION,
T_DOXY_CATEGORY,
T_DOXY_CHAPTER,
T_DOXY_CITE,
T_DOXY_CLASS,
T_DOXY_CODE,
T_DOXY_CODELINE,
T_DOXY_COMPAT,
T_DOXY_COND,
T_DOXY_CONTENTSPAGE,
T_DOXY_COPYBRIEF,
T_DOXY_COPYDETAILS,
T_DOXY_COPYDOC,
T_DOXY_COPYRIGHT,
T_DOXY_CORELIB,
T_DOXY_DATE,
T_DOXY_DEF,
T_DOXY_DEFAULT,
T_DOXY_DEFGROUP,
T_DOXY_DEPRECATED,
T_DOXY_DETAILS,
T_DOXY_DIAFILE,
T_DOXY_DIR,
T_DOXY_DIV,
T_DOXY_DOCBOOKONLY,
T_DOXY_DONTINCLUDE,
T_DOXY_DOT,
T_DOXY_DOTFILE,
T_DOXY_DOTS,
T_DOXY_E,
T_DOXY_ELSE,
T_DOXY_ELSEIF,
T_DOXY_EM,
T_DOXY_ENDABSTRACT,
T_DOXY_ENDCHAPTER,
T_DOXY_ENDCODE,
T_DOXY_ENDCOND,
T_DOXY_ENDDOCBOOKONLY,
T_DOXY_ENDDOT,
T_DOXY_ENDFOOTNOTE,
T_DOXY_ENDHTMLONLY,
T_DOXY_ENDIF,
T_DOXY_ENDINTERNAL,
T_DOXY_ENDLATEXONLY,
T_DOXY_ENDLEGALESE,
T_DOXY_ENDLINK,
T_DOXY_ENDLIST,
T_DOXY_ENDMANONLY,
T_DOXY_ENDMSC,
T_DOXY_ENDOMIT,
T_DOXY_ENDPARBLOCK,
T_DOXY_ENDPART,
T_DOXY_ENDQUOTATION,
T_DOXY_ENDRAW,
T_DOXY_ENDRTFONLY,
T_DOXY_ENDSECREFLIST,
T_DOXY_ENDSECTION1,
T_DOXY_ENDSECTION2,
T_DOXY_ENDSECTION3,
T_DOXY_ENDSECTION4,
T_DOXY_ENDSIDEBAR,
T_DOXY_ENDTABLE,
T_DOXY_ENDUML,
T_DOXY_ENDVERBATIM,
T_DOXY_ENDXMLONLY,
T_DOXY_ENUM,
T_DOXY_EXAMPLE,
T_DOXY_EXCEPTION,
T_DOXY_EXCEPTIONS,
T_DOXY_EXPIRE,
T_DOXY_EXTENDS,
T_DOXY_EXTERNALPAGE,
T_DOXY_FILE,
T_DOXY_FN,
T_DOXY_FOOTNOTE,
T_DOXY_GENERATELIST,
T_DOXY_GRANULARITY,
T_DOXY_GROUP,
T_DOXY_GUI,
T_DOXY_HEADER,
T_DOXY_HEADERFILE,
T_DOXY_HIDECALLERGRAPH,
T_DOXY_HIDECALLGRAPH,
T_DOXY_HIDEINITIALIZER,
T_DOXY_HTMLINCLUDE,
T_DOXY_HTMLONLY,
T_DOXY_I,
T_DOXY_IDLEXCEPT,
T_DOXY_IF,
T_DOXY_IFNOT,
T_DOXY_IMAGE,
T_DOXY_IMPLEMENTS,
T_DOXY_INCLUDE,
T_DOXY_INCLUDELINENO,
T_DOXY_INDEX,
T_DOXY_INDEXPAGE,
T_DOXY_INGROUP,
T_DOXY_INHEADERFILE,
T_DOXY_INHERITS,
T_DOXY_INLINEIMAGE,
T_DOXY_INMODULE,
T_DOXY_INPUBLICGROUP,
T_DOXY_INQMLMODULE,
T_DOXY_INSTANTIATES,
T_DOXY_INTERFACE,
T_DOXY_INTERNAL,
T_DOXY_INVARIANT,
T_DOXY_KEYWORD,
T_DOXY_L,
T_DOXY_LATEXINCLUDE,
T_DOXY_LATEXONLY,
T_DOXY_LEGALESE,
T_DOXY_LI,
T_DOXY_LINE,
T_DOXY_LINK,
T_DOXY_LIST,
T_DOXY_MACRO,
T_DOXY_MAINCLASS,
T_DOXY_MAINPAGE,
T_DOXY_MANONLY,
T_DOXY_MEMBEROF,
T_DOXY_META,
T_DOXY_MODULE,
T_DOXY_MSC,
T_DOXY_MSCFILE,
T_DOXY_N,
T_DOXY_NAME,
T_DOXY_NAMESPACE,
T_DOXY_NETWORK,
T_DOXY_NEWCODE,
T_DOXY_NEXTPAGE,
T_DOXY_NOAUTOLIST,
T_DOXY_NONREENTRANT,
T_DOXY_NOSUBGROUPING,
T_DOXY_NOTE,
T_DOXY_O,
T_DOXY_OBSOLETE,
T_DOXY_OLDCODE,
T_DOXY_OMIT,
T_DOXY_OMITVALUE,
T_DOXY_ONLY,
T_DOXY_OPENGL,
T_DOXY_OVERLOAD,
T_DOXY_P,
T_DOXY_PACKAGE,
T_DOXY_PAGE,
T_DOXY_PAR,
T_DOXY_PARAGRAPH,
T_DOXY_PARAM,
T_DOXY_PARBLOCK,
T_DOXY_PART,
T_DOXY_POST,
T_DOXY_PRE,
T_DOXY_PRELIMINARY,
T_DOXY_PREVIOUSPAGE,
T_DOXY_PRINTLINE,
T_DOXY_PRINTTO,
T_DOXY_PRINTUNTIL,
T_DOXY_PRIVATE,
T_DOXY_PRIVATESECTION,
T_DOXY_PROPERTY,
T_DOXY_PROTECTED,
T_DOXY_PROTECTEDSECTION,
T_DOXY_PROTOCOL,
T_DOXY_PUBLIC,
T_DOXY_PUBLICSECTION,
T_DOXY_PURE,
T_DOXY_QMLABSTRACT,
T_DOXY_QMLATTACHEDPROPERTY,
T_DOXY_QMLATTACHEDSIGNAL,
T_DOXY_QMLBASICTYPE,
T_DOXY_QMLCLASS,
T_DOXY_QMLMETHOD,
T_DOXY_QMLMODULE,
T_DOXY_QMLPROPERTY,
T_DOXY_QMLSIGNAL,
T_DOXY_QMLTYPE,
T_DOXY_QT3SUPPORT,
T_DOXY_QTESTLIB,
T_DOXY_QUOTATION,
T_DOXY_QUOTEFILE,
T_DOXY_QUOTEFROMFILE,
T_DOXY_QUOTEFUNCTION,
T_DOXY_RAW,
T_DOXY_REENTRANT,
T_DOXY_REF,
T_DOXY_REFITEM,
T_DOXY_REIMP,
T_DOXY_RELATED,
T_DOXY_RELATEDALSO,
T_DOXY_RELATES,
T_DOXY_RELATESALSO,
T_DOXY_REMARK,
T_DOXY_REMARKS,
T_DOXY_RESULT,
T_DOXY_RETURN,
T_DOXY_RETURNS,
T_DOXY_RETVAL,
T_DOXY_ROW,
T_DOXY_RTFONLY,
T_DOXY_SA,
T_DOXY_SECREFLIST,
T_DOXY_SECTION,
T_DOXY_SECTION1,
T_DOXY_SECTION2,
T_DOXY_SECTION3,
T_DOXY_SECTION4,
T_DOXY_SEE,
T_DOXY_SERVICE,
T_DOXY_SHORT,
T_DOXY_SHOWINITIALIZER,
T_DOXY_SIDEBAR,
T_DOXY_SINCE,
T_DOXY_SKIP,
T_DOXY_SKIPLINE,
T_DOXY_SKIPTO,
T_DOXY_SKIPUNTIL,
T_DOXY_SNIPPET,
T_DOXY_SPAN,
T_DOXY_SQL,
T_DOXY_STARTPAGE,
T_DOXY_STARTUML,
T_DOXY_STRUCT,
T_DOXY_SUB,
T_DOXY_SUBPAGE,
T_DOXY_SUBSECTION,
T_DOXY_SUBSUBSECTION,
T_DOXY_SUBTITLE,
T_DOXY_SUP,
T_DOXY_SVG,
T_DOXY_TABLE,
T_DOXY_TABLEOFCONTENTS,
T_DOXY_TARGET,
T_DOXY_TEST,
T_DOXY_THREADSAFE,
T_DOXY_THROW,
T_DOXY_THROWS,
T_DOXY_TITLE,
T_DOXY_TODO,
T_DOXY_TPARAM,
T_DOXY_TT,
T_DOXY_TYPEDEF,
T_DOXY_UICONTROL,
T_DOXY_UITOOLS,
T_DOXY_UNDERLINE,
T_DOXY_UNICODE,
T_DOXY_UNION,
T_DOXY_UNTIL,
T_DOXY_VALUE,
T_DOXY_CONTENTSPAGE,
T_DOXY_EXTERNALPAGE,
T_DOXY_GROUP,
T_DOXY_HEADERFILE,
T_DOXY_INDEXPAGE,
T_DOXY_INHEADERFILE,
T_DOXY_MACRO,
T_DOXY_MODULE,
T_DOXY_NEXTPAGE,
T_DOXY_PREVIOUSPAGE,
T_DOXY_PROPERTY,
T_DOXY_REIMP,
T_DOXY_SERVICE,
T_DOXY_STARTPAGE,
T_DOXY_VAR,
T_DOXY_VARIABLE,
T_DOXY_COMPAT,
T_DOXY_INMODULE,
T_DOXY_MAINCLASS,
T_DOXY_NONREENTRANT,
T_DOXY_OBSOLETE,
T_DOXY_PRELIMINARY,
T_DOXY_INPUBLICGROUP,
T_DOXY_REENTRANT,
T_DOXY_SUBTITLE,
T_DOXY_THREADSAFE,
T_DOXY_TITLE,
T_DOXY_CORELIB,
T_DOXY_UITOOLS,
T_DOXY_GUI,
T_DOXY_NETWORK,
T_DOXY_OPENGL,
T_DOXY_QT3SUPPORT,
T_DOXY_SVG,
T_DOXY_SQL,
T_DOXY_QTESTLIB,
T_DOXY_VERBATIM,
T_DOXY_VERBINCLUDE,
T_DOXY_VERSION,
T_DOXY_VHDLFLOW,
T_DOXY_WARNING,
T_DOXY_WEAKGROUP,
T_DOXY_WEBKIT,
T_DOXY_XML,
T_DOXY_XMLONLY,
T_DOXY_XREFITEM,
T_DOXY_LAST_TAG
};

View File

@@ -0,0 +1,286 @@
%token-prefix=T_DOXY_
%toupper
%char-type=QChar
%unicode-function=.unicode()
%%
a
abstract
addindex
addtogroup
anchor
annotatedlist
arg
attention
author
authors
b
badcode
basename
bold
brief
bug
c
callergraph
callgraph
caption
category
chapter
cite
class
code
codeline
compat
cond
contentspage
copybrief
copydetails
copydoc
copyright
corelib
date
def
default
defgroup
deprecated
details
diafile
dir
div
docbookonly
dontinclude
dot
dotfile
dots
e
else
elseif
em
endabstract
endchapter
endcode
endcond
enddocbookonly
enddot
endfootnote
endhtmlonly
endif
endinternal
endlatexonly
endlegalese
endlink
endlist
endmanonly
endmsc
endomit
endparblock
endpart
endquotation
endraw
endrtfonly
endsecreflist
endsection1
endsection2
endsection3
endsection4
endsidebar
endtable
enduml
endverbatim
endxmlonly
enum
example
exception
exceptions
expire
extends
externalpage
file
fn
footnote
generatelist
granularity
group
gui
header
headerfile
hidecallergraph
hidecallgraph
hideinitializer
htmlinclude
htmlonly
i
idlexcept
if
ifnot
image
implements
include
includelineno
index
indexpage
ingroup
inheaderfile
inherits
inlineimage
inmodule
inpublicgroup
inqmlmodule
instantiates
interface
internal
invariant
keyword
l
latexinclude
latexonly
legalese
li
line
link
list
macro
mainclass
mainpage
manonly
memberof
meta
module
msc
mscfile
n
name
namespace
network
newcode
nextpage
noautolist
nonreentrant
nosubgrouping
note
o
obsolete
oldcode
omit
omitvalue
only
opengl
overload
p
package
page
par
paragraph
param
parblock
part
post
pre
preliminary
previouspage
printline
printto
printuntil
private
privatesection
property
protected
protectedsection
protocol
public
publicsection
pure
qmlabstract
qmlattachedproperty
qmlattachedsignal
qmlbasictype
qmlclass
qmlmethod
qmlmodule
qmlproperty
qmlsignal
qmltype
qt3support
qtestlib
quotation
quotefile
quotefromfile
quotefunction
raw
reentrant
ref
refitem
reimp
related
relatedalso
relates
relatesalso
remark
remarks
result
return
returns
retval
row
rtfonly
sa
secreflist
section
section1
section2
section3
section4
see
service
short
showinitializer
sidebar
since
skip
skipline
skipto
skipuntil
snippet
span
sql
startpage
startuml
struct
sub
subpage
subsection
subsubsection
subtitle
sup
svg
table
tableofcontents
target
test
threadsafe
throw
throws
title
todo
tparam
tt
typedef
uicontrol
uitools
underline
unicode
union
until
value
var
variable
verbatim
verbinclude
version
vhdlflow
warning
weakgroup
webkit
xml
xmlonly
xrefitem

View File

@@ -115,7 +115,6 @@ struct Result
} // anonymous namespace
Q_DECLARE_METATYPE(Result)
Q_DECLARE_METATYPE(QList<Result>)
QT_BEGIN_NAMESPACE
namespace QTest {

View File

@@ -48,8 +48,6 @@ using namespace CppTools::Internal;
using namespace ExtensionSystem;
using namespace Utils;
Q_DECLARE_METATYPE(ILocatorFilter *)
namespace {
enum { debug = 0 };

View File

@@ -67,8 +67,6 @@
#include <sstream>
#endif
Q_DECLARE_METATYPE(QSet<QString>)
static const bool DumpProjectInfo = qgetenv("QTC_DUMP_PROJECT_INFO") == "1";
using namespace CppTools;

View File

@@ -57,7 +57,7 @@ using namespace ProjectExplorer;
typedef CPlusPlus::Document Document;
Q_DECLARE_METATYPE(QVector<ProjectFile>)
Q_DECLARE_METATYPE(ProjectFile)
namespace {

View File

@@ -108,6 +108,9 @@ private slots:
void test_global_completion_data();
void test_global_completion();
void test_doxygen_tag_completion_data();
void test_doxygen_tag_completion();
void test_completion_member_access_operator_data();
void test_completion_member_access_operator();

View File

@@ -175,8 +175,6 @@ typedef QList<Virtuality> VirtualityList;
} // CppTools namespace
Q_DECLARE_METATYPE(CppTools::Internal::Virtuality)
Q_DECLARE_METATYPE(CppTools::Internal::VirtualityList)
Q_DECLARE_METATYPE(QList<int>)
namespace CppTools {
namespace Internal {

View File

@@ -33,8 +33,6 @@
#include <cassert>
Q_DECLARE_METATYPE(QSet<QString>)
using namespace CppTools::Internal;
using namespace CppTools::Tests;

View File

@@ -126,7 +126,6 @@ private:
} // anonymous namespace
Q_DECLARE_METATYPE(ResultData)
Q_DECLARE_METATYPE(ResultDataList)
QT_BEGIN_NAMESPACE
namespace QTest {