[PATCH] D116314: [clang-format] Add style to separate definition blocks

Björn Schäpers via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Dec 30 14:17:09 PST 2021


HazardyKnusperkeks requested changes to this revision.
HazardyKnusperkeks added a comment.
This revision now requires changes to proceed.

Only some small changes, then it looks good to me. And I will definitely use it, once it is landed.



================
Comment at: clang/include/clang/Format/Format.h:3056
+    SDS_Leave,
+    /// Insert empty lines between definition blocks.
+    SDS_Always,
----------------
Right?


================
Comment at: clang/include/clang/Format/Format.h:4097
+                                               ArrayRef<tooling::Range> Ranges,
+                                               StringRef FileName = "<stdin>");
+
----------------
The only use of this function I found is in the tests and it sets the argument, or am I mistaken?


================
Comment at: clang/lib/Format/DefinitionBlockSeparator.cpp:33-34
+    SmallVectorImpl<AnnotatedLine *> &Lines, tooling::Replacements &Result) {
+  if (Style.SeparateDefinitionBlocks == FormatStyle::SDS_Leave)
+    return;
+  auto likelyDefinition = [this](AnnotatedLine *Line) {
----------------
It should never be instantiated with that.


================
Comment at: clang/lib/Format/DefinitionBlockSeparator.cpp:35
+    return;
+  auto likelyDefinition = [this](AnnotatedLine *Line) {
+    if (Line->MightBeFunctionDecl && Line->mightBeFunctionDefinition())
----------------



================
Comment at: clang/lib/Format/DefinitionBlockSeparator.cpp:59
+  for (unsigned I = 0; I < Lines.size(); I++) {
+    auto Line = Lines[I];
+    FormatToken *TargetToken = nullptr;
----------------



================
Comment at: clang/lib/Format/DefinitionBlockSeparator.cpp:63
+    auto OpeningLineIndex = Line->MatchingOpeningBlockLineIndex;
+    const auto insertReplacement = [&](int NewlineToInsert) {
+      assert(TargetLine);
----------------



================
Comment at: clang/lib/Format/DefinitionBlockSeparator.cpp:76
+    };
+    const auto followingOtherOpening = [&]() {
+      return OpeningLineIndex == 0 ||
----------------



================
Comment at: clang/lib/Format/DefinitionBlockSeparator.cpp:80
+    };
+    const auto hasEnumOnLine = [Line]() {
+      FormatToken *CurrentToken = Line->First;
----------------



================
Comment at: clang/lib/Format/DefinitionBlockSeparator.cpp:93
+    if (hasEnumOnLine()) {
+      // We have no scope opening/closing information for enum
+      IsDefBlock = 1;
----------------



================
Comment at: clang/lib/Format/DefinitionBlockSeparator.cpp:128
+
+    // Not the last token
+    if (IsDefBlock && I + 1 < Lines.size()) {
----------------



================
Comment at: clang/lib/Format/Format.cpp:455
+template <>
+struct ScalarEnumerationTraits<FormatStyle::SeparateDefinitionStyle> {
+  static void enumeration(IO &IO, FormatStyle::SeparateDefinitionStyle &Value) {
----------------
Please try to find a better place, regarding sorting (yeah the are some mismatches).


================
Comment at: clang/lib/Format/Format.cpp:783
     IO.mapOptional("ShortNamespaceLines", Style.ShortNamespaceLines);
+    IO.mapOptional("SeparateDefinitionBlocks", Style.SeparateDefinitionBlocks);
     IO.mapOptional("SortIncludes", Style.SortIncludes);
----------------
Please sort before ShortNamespaceLines


================
Comment at: clang/lib/Format/Format.cpp:3059
 
+  if (Style.SeparateDefinitionBlocks)
+    Passes.emplace_back([&](const Environment &Env) {
----------------



================
Comment at: clang/lib/Format/WhitespaceManager.h:48
 
+  /// Infers whether the input is using CRLF
+  static bool inputUsesCRLF(StringRef Text, bool DefaultToCRLF);
----------------



CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116314/new/

https://reviews.llvm.org/D116314



More information about the cfe-commits mailing list