[cfe-dev] clang-format behavior for Obj-C methods with block parameters

Daniel Jasper via cfe-dev cfe-dev at lists.llvm.org
Sun Dec 13 10:15:48 PST 2015


On Sun, Dec 13, 2015 at 6:53 PM, Yavuz Nuzumlalı <manuyavuz at gmail.com>
wrote:

> Thanks for the response Daniel,
>
> Could you guide me on where can I look inside clang-format implementation
> to see how clang-format currently handles lambdas in other languages, so
> that I may try to implement the same functionality for Objective-C case?
>

Not really, it is all in ContinuationIndenter.cpp. However, this is among
the most complex code of clang-format and giving you details on how to do
this probably would take me longer than looking at this myself. If you
still want to try and take a look, feel free. I am happy to answer any
specific questions you might have.


>
> Besides that, I have one more question, which is somewhat related to topic.
>
> When I try to use clang-format to format the following simple code:
>
> - (void)asdf {
> [UIView animateasdfasdf:0 animations:^{ }];
> [UIView animations:^{ } done:YES];
> [UIView animations:^{ } completion:^{ }];
> [UIView testasdfasdfsd:YES animations:^{ } completion:^{ }];
> [UIView animations:^{ } tessd:YES completion:^{ }];
> }
>
> Output is the following:
>
> - (void)asdf {
>   [UIView animateasdfasdf:0
>                animations:^{
>                }];
>   [UIView animations:^{
>   }
>                 done:YES];
>   [UIView animations:^{
>   }
>       completion:^{
>       }];
>   [UIView testasdfasdfsd:YES
>       animations:^{
>       }
>       completion:^{
>       }];
>   [UIView animations:^{
>   }
>       tessd:YES
>       completion:^{
>       }];
> }
>
> I think clang-format somehow decides to not use colon alignment but align
> using `ContinuationIndentWidth` where there are more than one block
> parameters.
> Is this an intended behavior? Seems like a bug to me.
>

It is intentional. Column alignment with more than one internal block
doesn't really work. And this is also explicitly written in Google's style
guide: https://google.github.io/styleguide/objcguide.xml#Blocks

Independent of that some of you examples look like there are still other
bugs in there.

PS : I'm using the default LLVM configuration for the above case.
>
> On 13 Dec 2015, at 16:42, Daniel Jasper <djasper at google.com> wrote:
>
> Nope, this behavior isn't currently implemented. I agree that it might
> make sense, as it is similar to how clang-format treats lambdas at the end
> of several other parameters.
>
> On Fri, Dec 11, 2015 at 4:08 PM, Yavuz Nuzumlalı <cfe-dev at lists.llvm.org
> > wrote:
> Hi everyone,
>
> I'm experiencing a problem with clang-format for my code.
>
> I'm using ColumnLimit as 120. When I write some code like this:
>
> [self testMethod:15 withBlock:^{
> NSLog(@"asdfasdf");
> NSLog(@"asdfasdf");
> NSLog(@"asdfasdf");
> NSLog(@"asdfasdf");
> }];
>
> This code would be converted to this by clang-format:
>
> [self testMethod:15
>        withBlock:^{
>        NSLog(@"asdfasdf");
>        NSLog(@"asdfasdf");
>        NSLog(@"asdfasdf");
>        NSLog(@"asdfasdf");
>    }];
>
> That seems wrong to me because the method call before block variable
> actually fits in width of 120. I guess this is because clang-format behaves
> above code as a single method call and assumes it as one line. But I really
> want to not split the method like this because it feels weird.
>
> Is there a way to accomplish this with current system?
>
> I put my configuration file as an attachment.
>
> Best
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20151213/406f7a66/attachment.html>


More information about the cfe-dev mailing list