================
@@ -871,13 +871,81 @@ struct FormatStyle {
     ///   void f() { bar(); }
     /// \endcode
     SFS_All,
+    /// Configure merge behavior using AllowShortFunctionsOnASingleLineOptions
+    SFS_Custom,
   };
 
   /// Dependent on the value, ``int f() { return 0; }`` can be put on a
   /// single line.
   /// \version 3.5
   ShortFunctionStyle AllowShortFunctionsOnASingleLine;
 
+  /// Precise control over merging short functions
+  /// \code
+  ///   # Should be declared this way:
+  ///   AllowShortFunctionsOnASingleLine: Custom
+  ///   AllowShortFunctionsOnASingleLineOptions:
+  ///     Empty: false
+  ///     Inline: true
+  ///     All: false
+  /// \endcode
+  struct ShortFunctionMergeFlags {
+    /// Only merge empty functions.
+    /// \code
+    ///   void f() {}
+    ///   void f2() {
+    ///     bar2();
+    ///   }
+    /// \endcode
+    bool Empty;
+    /// Only merge functions defined inside a class.
+    /// \code
+    ///   class Foo {
+    ///     void f() { foo(); }
+    ///   };
+    ///   void f() {
+    ///     foo();
+    ///   }
+    ///   void f() {}
+    /// \endcode
+    bool Inline;
+    /// Merge all functions fitting on a single line.
+    /// \code
+    ///   class Foo {
+    ///     void f() { foo(); }
+    ///   };
+    ///   void f() { bar(); }
+    /// \endcode
+    bool All;
----------------
irymarchyk wrote:

That was my understanding too, but I have to set only 'All/Other' to true when 
SFS_All was specified to pass unit tests. 
There seems to be JS dependency on SFS_Inline/SFS_InlineOnly:
https://github.com/llvm/llvm-project/blob/78905ce6cbd3fa8f8b467e7cad0e9a093c1b1c44/clang/lib/Format/TokenAnnotator.cpp#L5697
(in my PR it was changed a little bit)

And this is unit test which fails if I set every boolean to true when SFS_All 
is set:
https://github.com/llvm/llvm-project/blob/78905ce6cbd3fa8f8b467e7cad0e9a093c1b1c44/clang/unittests/Format/FormatTestJS.cpp#L1141

Seems like the code only works for Inline cases, but not for SFS_All case... So 
I have to set Inline to false when SFS_All (and Empty too to be consistent).
```
/Users/irymarchyk/dev/llvm-project/clang/unittests/Format/FormatTestJS.cpp:51: 
Failure
Expected equality of these values:
  Code.str()
    Which is: "var func = function() { return 1; };"
  format(Code, Style)
    Which is: "var func = function() {\n  return 1;\n};"
With diff:
@@ -1,1 +1,3 @@
-var func = function() { return 1; };
+var func = function() {
+  return 1;
+};

Expected code is not stable

/Users/irymarchyk/dev/llvm-project/clang/unittests/Format/FormatTestJS.cpp:53: 
Failure
Expected equality of these values:
  Code.str()
    Which is: "var func = function() { return 1; };"
  Result
    Which is: "var func = function() {\n  return 1;\n};"
With diff:
@@ -1,1 +1,3 @@
-var func = function() { return 1; };
+var func = function() {
+  return 1;
+};

Formatted:
var func = function() {
  return 1;
};

/Users/irymarchyk/dev/llvm-project/clang/unittests/Format/FormatTestJS.cpp:51: 
Failure
Expected equality of these values:
  Code.str()
    Which is: "var outer = function() { var inner = function() { return 1; } };"
  format(Code, Style)
    Which is: "var outer = function() {\n  var inner = function() { return 1; 
}\n};"
With diff:
@@ -1,1 +1,3 @@
-var outer = function() { var inner = function() { return 1; } };
+var outer = function() {
+  var inner = function() { return 1; }
+};

Expected code is not stable

/Users/irymarchyk/dev/llvm-project/clang/unittests/Format/FormatTestJS.cpp:53: 
Failure
Expected equality of these values:
  Code.str()
    Which is: "var outer = function() { var inner = function() { return 1; } };"
  Result
    Which is: "var outer = function() {\n  var inner = function() { return 1; 
}\n};"
With diff:
@@ -1,1 +1,3 @@
-var outer = function() { var inner = function() { return 1; } };
+var outer = function() {
+  var inner = function() { return 1; }
+};

Formatted:
var outer = function() {
  var inner = function() { return 1; }
};

[  FAILED  ] FormatTestJS.InliningFunctionLiterals (24 ms)

```

https://github.com/llvm/llvm-project/pull/134337
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to