Quoting Daniel Jasper <[email protected]>:

On Tue, Oct 8, 2013 at 1:19 PM, Roman Himmes <[email protected]> wrote:

Hi,

at work we have a project with a different style where the * or & is
placed between the type and the variable. An example is: "const std::string
& str". To make clang-format to recognize that kind of formatting I created
a small patch, see below.

I removed the old boolean setting "PointerBindsToType" and replaced it
with a "PointerBinding" option with the three settings: Left, Middle and
Right.

Modified:
    include/clang/Format/Format.h
    lib/Format/Format.cpp
    unittests/Format/FormatTest.cpp
    lib/Format/TokenAnnotator.cpp

What do you think of this patch?


- This would break everybody who already has a .clang-format file
somewhere. We really need to make changes to the configuration options in a
backwards compatible fashion if at all possible. We probably can change the
type of the configuration variable, but we need to adapt the config file
reader to still accept PointerBindsToType and set PointerBinding
appropriately.

Thank you very much for your feedback. I am going to make it backwards compatible.


- This would need a lot of additional tests to verify that we actually
format the different cases correctly (duplicate at least a few tests from
UnderstandsUsesOfStarAndAmp).

ok, I am going to add unit tests as well.

-- snip

 template <>

+struct ScalarEnumerationTraits<clang::format::FormatStyle::PointerBindingKind> {

+  static void enumeration(IO &IO,

+ clang::format::FormatStyle::PointerBindingKind &Value) {

+    IO.enumCase(Value, "Left",   clang::format::FormatStyle::PB_Left);

+    IO.enumCase(Value, "Middle", clang::format::FormatStyle::PB_Middle);

+    IO.enumCase(Value, "Right",  clang::format::FormatStyle::PB_Right);


While this alignment might seem nice, I don't think it adds a lot of value.
I'd rather keep this file clang-format clean.

At first I thought that this alignment is quite exotic, but entering "const std::sting & str" into goole I found that there are a few libraries out there using this alignment.
Poco for example. So I see only 2 choices to support this style:
Either have a config option like in this patch, or removing that explicit option and have that Middle style only auto detected.


-- snip

 @@ -980,9 +990,9 @@

     }

     if (Style.DerivePointerBinding) {

       if (CountBoundToType > CountBoundToVariable)

-        Style.PointerBindsToType = true;

+        Style.PointerBinding = FormatStyle::PB_Left;

       else if (CountBoundToType < CountBoundToVariable)

-        Style.PointerBindsToType = false;

+        Style.PointerBinding = FormatStyle::PB_Right;


Wouldn't we want to detect all three kinds of bindings.


Ok, right. I am going to implement this.


Best regards,

Roman Himmes



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to