forked from qt-creator/qt-creator
CppEditor: Try to handle "declaration macros"
Fixes: QTCREATORBUG-13640 Change-Id: I6566add09011388627c62394dfc3e47d29bac9cd Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: David Schulz <david.schulz@qt.io> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -346,6 +346,7 @@ void addQtcStatementMacros(clang::format::FormatStyle &style)
|
|||||||
"Q_GADGET",
|
"Q_GADGET",
|
||||||
"Q_GADGET_EXPORT",
|
"Q_GADGET_EXPORT",
|
||||||
"Q_INTERFACES",
|
"Q_INTERFACES",
|
||||||
|
"Q_LOGGING_CATEGORY",
|
||||||
"Q_MOC_INCLUDE",
|
"Q_MOC_INCLUDE",
|
||||||
"Q_NAMESPACE",
|
"Q_NAMESPACE",
|
||||||
"Q_NAMESPACE_EXPORT",
|
"Q_NAMESPACE_EXPORT",
|
||||||
|
@@ -152,6 +152,12 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block)
|
|||||||
case T_GREATER_GREATER: break;
|
case T_GREATER_GREATER: break;
|
||||||
case T_LBRACKET: break;
|
case T_LBRACKET: break;
|
||||||
case T_NAMESPACE: leave(); enter(namespace_start); break;
|
case T_NAMESPACE: leave(); enter(namespace_start); break;
|
||||||
|
case T_IDENTIFIER:
|
||||||
|
if (isStatementMacroOrEquivalent()) {
|
||||||
|
enter(qt_like_macro);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
[[fallthrough]];
|
||||||
default: tryExpression(true); break;
|
default: tryExpression(true); break;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
@@ -272,7 +278,14 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block)
|
|||||||
case T_SEMICOLON: leave(true); break;
|
case T_SEMICOLON: leave(true); break;
|
||||||
case T_LBRACE: enter(brace_list_open); break;
|
case T_LBRACE: enter(brace_list_open); break;
|
||||||
case T_RBRACE: leave(true); continue;
|
case T_RBRACE: leave(true); continue;
|
||||||
case T_RPAREN: leave(); break;
|
case T_RPAREN:
|
||||||
|
leave();
|
||||||
|
if (m_currentState.top().type == qt_like_macro && m_currentState.size() > 1
|
||||||
|
&& m_currentState.at(m_currentState.size() - 2).type == declaration_start) {
|
||||||
|
leave();
|
||||||
|
leave();
|
||||||
|
}
|
||||||
|
break;
|
||||||
default: tryExpression(); break;
|
default: tryExpression(); break;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
@@ -754,6 +767,16 @@ void CodeFormatter::correctIndentation(const QTextBlock &block)
|
|||||||
adjustIndent(m_tokens, lexerState, &m_indentDepth, &m_paddingDepth);
|
adjustIndent(m_tokens, lexerState, &m_indentDepth, &m_paddingDepth);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CodeFormatter::isStatementMacroOrEquivalent() const
|
||||||
|
{
|
||||||
|
const QStringView tokenText = currentTokenText();
|
||||||
|
return tokenText.startsWith(QLatin1String("Q_"))
|
||||||
|
|| tokenText.startsWith(QLatin1String("QT_"))
|
||||||
|
|| tokenText.startsWith(QLatin1String("QML_"))
|
||||||
|
|| tokenText.startsWith(QLatin1String("QDOC_"))
|
||||||
|
|| m_statementMacros.contains(tokenText);
|
||||||
|
}
|
||||||
|
|
||||||
bool CodeFormatter::tryExpression(bool alsoExpression)
|
bool CodeFormatter::tryExpression(bool alsoExpression)
|
||||||
{
|
{
|
||||||
int newState = -1;
|
int newState = -1;
|
||||||
@@ -838,12 +861,7 @@ bool CodeFormatter::tryDeclaration()
|
|||||||
return true;
|
return true;
|
||||||
case T_IDENTIFIER:
|
case T_IDENTIFIER:
|
||||||
if (m_tokenIndex == 0) {
|
if (m_tokenIndex == 0) {
|
||||||
const QStringView tokenText = currentTokenText();
|
if (isStatementMacroOrEquivalent()) {
|
||||||
if (tokenText.startsWith(QLatin1String("Q_"))
|
|
||||||
|| tokenText.startsWith(QLatin1String("QT_"))
|
|
||||||
|| tokenText.startsWith(QLatin1String("QML_"))
|
|
||||||
|| tokenText.startsWith(QLatin1String("QDOC_"))
|
|
||||||
|| m_statementMacros.contains(tokenText)) {
|
|
||||||
enter(qt_like_macro);
|
enter(qt_like_macro);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -209,6 +209,8 @@ private:
|
|||||||
void leave(bool statementDone = false);
|
void leave(bool statementDone = false);
|
||||||
void correctIndentation(const QTextBlock &block);
|
void correctIndentation(const QTextBlock &block);
|
||||||
|
|
||||||
|
bool isStatementMacroOrEquivalent() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static QStack<State> initialState();
|
static QStack<State> initialState();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user