<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/69591>69591</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            clang-format. SeparateDefinitionBlocks inserts spaces after attribute like macro
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang-format
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          yrHeTaTeJlb
      </td>
    </tr>
</table>

<pre>
    My [previous issue](https://github.com/llvm/llvm-project/issues/66759) was closed with incorrect resolution. 

The problem is taht `SeparateDefinitionBlocks: Always` treats attribute-like macro incorrectly. USTRUCT(), UCLASS(), UPROPERTY() and UENUM() are not definitions, and clang format *should not insert* an emty line after them.
```
$ cat .clang-format
SeparateDefinitionBlocks: Always
BreakBeforeBraces: Allman

$ cat test.cpp
UENUM()
enum class EEnum
{
 Foo,
    Bar,
};
USTRUCT()
struct FStruct
{
 UPROPERTY()
    int baz = 0;
    UFUNCTION()
    int quux(){}
};
UCLASS()
class FClass
{
    void foo(){}
 void bar(){}
};

$ clang-format.exe --version
clang-format version 17.0.1 (git://code.qt.io/clang/llvm-project.git 1eee682c1df3ce22d1c53c36f9c44cb4bf3df615)

$ clang-format.exe test.cpp
UENUM()
enum class EEnum
{
  Foo,
 Bar,
};
USTRUCT()

struct FStruct
{
  UPROPERTY()
  int baz = 0;
  UFUNCTION()

  int quux() {}
};
UCLASS()

class FClass
{
  void foo() {}

 void bar() {}
};

$ cat expected.cpp
UENUM()
enum class EEnum
{
  Foo,
  Bar,
};

USTRUCT()
struct FStruct
{
  UPROPERTY()
  int baz = 0;

  UFUNCTION()
  int quux() {}
};

UCLASS()
class FClass
{
  void foo() {}

  void bar() {}
};
```

MaxEmptyLinesToKeep has nothing to do there. I neither want my code to get squashed into single block, nor to align everything manually.
            
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVltzqzYQ_jXyy04YkDE2Dzz4Ek9Pe26T2A99FGIBNUIikkji_vqOwPGtSepzTj0eQKu9afdb7TJrRaUQMzJZkMlqxDpXa5PtzG-4YRv8XeajXBe77MsOyGTRGnwSurMgrO2QTFaEzmrnWkvGc0LXhK4r4eouD7huCF1L-fT6ummN_gu5I3Tdy1pC10kynaSEpvDMLHCpLRbwLFwNQnFtDHIHBq2WnRNaBUDCFQnnw3NTI7RG5xIbEBYcqx2QJLzHlhnmcIWlUMKLLaTmD949mMtntrMkCcEZZM4Cc86IvHN4I8UDQsO40UfTchfA9n5zt11uCJ0RmhK6hO3y8_z-_mT9_e7b99u7zZ8DCZgqYHv7dfvldW0QlHZQHPyxXsyzcclUBaU2DXNA6NzWupNFzy2UReMInQNTgI3bgRQKgZUODbgam2AfiiTc_4cljYEzB0Gv-mZQPWxdEZeeb2GQPSyw1AYXhnHcM8iGqdPov1pyaF3A23agnhx8IKDqGn9Oa-H2VnXNXni6GD5grTWhy_0CABbMHNZkuiLjPeN5GnqSdabjDtb3_ftS8UVajhaEcpCzv4GMVxAe9Pud7Xr7dbn59O3rWyKPXfeyp08X3rN_u3gKjJ4ynHu99K9L_wDgSYsCSh-AS7XDVu5j8ZHFk0ycpDvAF4Sbmyc0Vmh18OSwD_sdiKZBGERA6KwS7lC9XBcYPLpAaL_wchflG1TCQYSIyYzyqCjHHCktIj4Z83FSpjyOeR7n5bgok2hyiMUHvv4ihM4x9AMAugZG7-HoPRS9iaFToSOO4HogXQGnczCd634LU-9aPy9vfGmROyz-t_y8m6CfrPMfS9CHabo6QT9V7_-doKszdHHn988v7OW2ad3us1BoN_oPxBZqZn0zqYWqwGkotO8cBgP4BAqF_4Znphw0O_BV73kqdGAfO2ZrLHw4NFihKomQ-2bhG5fSxjMyKSoF-IRmNxhomOqYlLvgeMG9_kZFNi7SccpGmEVJOp1GcUqTUZ1F0TQs02QSpTyKeRnGcRLTlE8TNs35pAhHIqMhHUdhlEYRncVJkLOQ4wzDnEUhZdOYxCE2TMjA31CBNtWoHy2yJJ2k0UiyHKXt5xpKz1oipX7SMVl_seVdZUkcSmGdPSpywknMzm4reK-J7vu1Bdv6lrnv04fpAo7TxagzMvuFecmf658AAAD__1QIxlc">