Skip to content

Commit

Permalink
Revert "[clang-format] Handle variable declarations in BreakAfterAttr…
Browse files Browse the repository at this point in the history
…ibutes (#71755)"

This reverts commit 5c36f43 which caused a
formatting error in polly.
  • Loading branch information
owenca committed Nov 10, 2023
1 parent 50a48d8 commit a0710e1
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 66 deletions.
13 changes: 2 additions & 11 deletions clang/docs/ClangFormatStyleOptions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2049,8 +2049,8 @@ the configuration (without a prefix: ``Auto``).
.. _BreakAfterAttributes:

**BreakAfterAttributes** (``AttributeBreakingStyle``) :versionbadge:`clang-format 16` :ref:`<BreakAfterAttributes>`
Break after a group of C++11 attributes before a variable/function
(including constructor/destructor) declaration/definition name.
Break after a group of C++11 attributes before a function
declaration/definition name.

Possible values:

Expand All @@ -2059,10 +2059,6 @@ the configuration (without a prefix: ``Auto``).

.. code-block:: c++

[[maybe_unused]]
const int i;
[[gnu::const]] [[maybe_unused]]
int j;
[[nodiscard]]
inline int f();
[[gnu::const]] [[nodiscard]]
Expand All @@ -2073,9 +2069,6 @@ the configuration (without a prefix: ``Auto``).

.. code-block:: c++

[[maybe_unused]] const int i;
[[gnu::const]] [[maybe_unused]]
int j;
[[nodiscard]] inline int f();
[[gnu::const]] [[nodiscard]]
int g();
Expand All @@ -2085,8 +2078,6 @@ the configuration (without a prefix: ``Auto``).

.. code-block:: c++

[[maybe_unused]] const int i;
[[gnu::const]] [[maybe_unused]] int j;
[[nodiscard]] inline int f();
[[gnu::const]] [[nodiscard]] int g();

Expand Down
13 changes: 2 additions & 11 deletions clang/include/clang/Format/Format.h
Original file line number Diff line number Diff line change
Expand Up @@ -1428,10 +1428,6 @@ struct FormatStyle {
enum AttributeBreakingStyle : int8_t {
/// Always break after attributes.
/// \code
/// [[maybe_unused]]
/// const int i;
/// [[gnu::const]] [[maybe_unused]]
/// int j;
/// [[nodiscard]]
/// inline int f();
/// [[gnu::const]] [[nodiscard]]
Expand All @@ -1440,26 +1436,21 @@ struct FormatStyle {
ABS_Always,
/// Leave the line breaking after attributes as is.
/// \code
/// [[maybe_unused]] const int i;
/// [[gnu::const]] [[maybe_unused]]
/// int j;
/// [[nodiscard]] inline int f();
/// [[gnu::const]] [[nodiscard]]
/// int g();
/// \endcode
ABS_Leave,
/// Never break after attributes.
/// \code
/// [[maybe_unused]] const int i;
/// [[gnu::const]] [[maybe_unused]] int j;
/// [[nodiscard]] inline int f();
/// [[gnu::const]] [[nodiscard]] int g();
/// \endcode
ABS_Never,
};

/// Break after a group of C++11 attributes before a variable/function
/// (including constructor/destructor) declaration/definition name.
/// Break after a group of C++11 attributes before a function
/// declaration/definition name.
/// \version 16
AttributeBreakingStyle BreakAfterAttributes;

Expand Down
27 changes: 11 additions & 16 deletions clang/lib/Format/TokenAnnotator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2000,10 +2000,6 @@ class AnnotatingParser {
(!Line.MightBeFunctionDecl || Current.NestingLevel != 0)) {
Contexts.back().FirstStartOfName = &Current;
Current.setType(TT_StartOfName);
if (auto *PrevNonComment = Current.getPreviousNonComment();
PrevNonComment && PrevNonComment->is(TT_StartOfName)) {
PrevNonComment->setType(TT_Unknown);
}
} else if (Current.is(tok::semi)) {
// Reset FirstStartOfName after finding a semicolon so that a for loop
// with multiple increment statements is not confused with a for loop
Expand Down Expand Up @@ -3262,7 +3258,7 @@ static bool isFunctionDeclarationName(bool IsCpp, const FormatToken &Current,
if (Current.is(TT_FunctionDeclarationName))
return true;

if (!Current.Tok.getIdentifierInfo() || Current.is(TT_CtorDtorDeclName))
if (!Current.Tok.getIdentifierInfo())
return false;

auto skipOperatorName = [](const FormatToken *Next) -> const FormatToken * {
Expand Down Expand Up @@ -3445,30 +3441,29 @@ void TokenAnnotator::calculateFormattingInformation(AnnotatedLine &Line) const {
if (AlignArrayOfStructures)
calculateArrayInitializerColumnList(Line);

const bool IsCpp = Style.isCpp();
bool LineIsFunctionDeclaration = false;
FormatToken *ClosingParen = nullptr;
for (FormatToken *Tok = Current, *AfterLastAttribute = nullptr; Tok;
Tok = Tok->Next) {
if (Tok->Previous->EndsCppAttributeGroup)
AfterLastAttribute = Tok;
if (isFunctionDeclarationName(IsCpp, *Tok, Line, ClosingParen)) {
LineIsFunctionDeclaration = true;
Tok->setFinalizedType(TT_FunctionDeclarationName);
}
if (LineIsFunctionDeclaration ||
Tok->isOneOf(TT_CtorDtorDeclName, TT_StartOfName)) {
if (IsCpp && AfterLastAttribute &&
if (const bool IsCtorOrDtor = Tok->is(TT_CtorDtorDeclName);
IsCtorOrDtor ||
isFunctionDeclarationName(Style.isCpp(), *Tok, Line, ClosingParen)) {
if (!IsCtorOrDtor) {
LineIsFunctionDeclaration = true;
Tok->setFinalizedType(TT_FunctionDeclarationName);
}
if (AfterLastAttribute &&
mustBreakAfterAttributes(*AfterLastAttribute, Style)) {
AfterLastAttribute->MustBreakBefore = true;
if (LineIsFunctionDeclaration)
Line.ReturnTypeWrapped = true;
Line.ReturnTypeWrapped = true;
}
break;
}
}

if (IsCpp) {
if (Style.isCpp()) {
if (!LineIsFunctionDeclaration) {
// Annotate */&/&& in `operator` function calls as binary operators.
for (const auto *Tok = Line.First; Tok; Tok = Tok->Next) {
Expand Down
41 changes: 13 additions & 28 deletions clang/unittests/Format/FormatTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8479,25 +8479,18 @@ TEST_F(FormatTest, BreaksFunctionDeclarationsWithTrailingTokens) {
" aaaaaaaaaaaaaaaaaaaaaaaaa));");
verifyFormat("bool aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
" __attribute__((unused));");

Style = getGoogleStyle();
Style.AttributeMacros.push_back("GUARDED_BY");
verifyFormat(
verifyGoogleFormat(
"bool aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
" GUARDED_BY(aaaaaaaaaaaa);",
Style);
verifyFormat(
" GUARDED_BY(aaaaaaaaaaaa);");
verifyGoogleFormat(
"bool aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
" GUARDED_BY(aaaaaaaaaaaa);",
Style);
verifyFormat(
" GUARDED_BY(aaaaaaaaaaaa);");
verifyGoogleFormat(
"bool aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa GUARDED_BY(aaaaaaaaaaaa) =\n"
" aaaaaaaa::aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;",
Style);
verifyFormat(
" aaaaaaaa::aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;");
verifyGoogleFormat(
"bool aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa GUARDED_BY(aaaaaaaaaaaa) =\n"
" aaaaaaaaaaaaaaaaaaaaaaaaa;",
Style);
" aaaaaaaaaaaaaaaaaaaaaaaaa;");
}

TEST_F(FormatTest, FunctionAnnotations) {
Expand Down Expand Up @@ -26199,10 +26192,9 @@ TEST_F(FormatTest, RemoveSemicolon) {
}

TEST_F(FormatTest, BreakAfterAttributes) {
constexpr StringRef Code("[[maybe_unused]] const int i;\n"
"[[foo([[]])]] [[maybe_unused]]\n"
"int j;\n"
"[[nodiscard]] inline int f(int &i);\n"
FormatStyle Style = getLLVMStyle();

constexpr StringRef Code("[[nodiscard]] inline int f(int &i);\n"
"[[foo([[]])]] [[nodiscard]]\n"
"int g(int &i);\n"
"[[nodiscard]]\n"
Expand All @@ -26215,14 +26207,11 @@ TEST_F(FormatTest, BreakAfterAttributes) {
" return 1;\n"
"}");

FormatStyle Style = getLLVMStyle();
EXPECT_EQ(Style.BreakAfterAttributes, FormatStyle::ABS_Leave);
verifyNoChange(Code, Style);

Style.BreakAfterAttributes = FormatStyle::ABS_Never;
verifyFormat("[[maybe_unused]] const int i;\n"
"[[foo([[]])]] [[maybe_unused]] int j;\n"
"[[nodiscard]] inline int f(int &i);\n"
verifyFormat("[[nodiscard]] inline int f(int &i);\n"
"[[foo([[]])]] [[nodiscard]] int g(int &i);\n"
"[[nodiscard]] inline int f(int &i) {\n"
" i = 1;\n"
Expand All @@ -26235,11 +26224,7 @@ TEST_F(FormatTest, BreakAfterAttributes) {
Code, Style);

Style.BreakAfterAttributes = FormatStyle::ABS_Always;
verifyFormat("[[maybe_unused]]\n"
"const int i;\n"
"[[foo([[]])]] [[maybe_unused]]\n"
"int j;\n"
"[[nodiscard]]\n"
verifyFormat("[[nodiscard]]\n"
"inline int f(int &i);\n"
"[[foo([[]])]] [[nodiscard]]\n"
"int g(int &i);\n"
Expand Down

0 comments on commit a0710e1

Please sign in to comment.