CppEditor: Do not assume an opening brace starts a block

... when generating doxygen comments.
Otherwise, we will not properly parse declarations such as
    void f(int i = {});
or
    int m_member{};

Fixes: QTCREATORBUG-29198
Change-Id: I744041d2cd5438e4b64161bba04a088a8910024b
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Christian Kandeler
2023-06-19 17:42:19 +02:00
parent c510689fe4
commit 98b341b7cc

View File

@@ -61,7 +61,7 @@ QString DoxygenGenerator::generate(QTextCursor cursor,
const QString &text = block.text();
const Tokens &tks = lexer(text);
for (const Token &tk : tks) {
if (tk.is(T_SEMICOLON) || tk.is(T_LBRACE)) {
if (tk.is(T_SEMICOLON)) {
// No need to continue beyond this, we might already have something meaningful.
cursor.setPosition(block.position() + tk.utf16charsEnd(), QTextCursor::KeepAnchor);
break;
@@ -74,6 +74,11 @@ QString DoxygenGenerator::generate(QTextCursor cursor,
block = block.next();
}
// For the edge case of no semicolons at all, which can e.g. happen if the file
// consists only of empty function definitions.
if (!cursor.hasSelection())
cursor.setPosition(cursor.document()->characterCount() - 1, QTextCursor::KeepAnchor);
if (!cursor.hasSelection())
return QString();