krasimir added a comment.

Unfortunately this introduced a bad regression with ObjC method expressions in 
`if` bodies:

  if (argc > 5) [obj func:arg];

is now formatted as:

  if (argc > 5)[obj func:arg]
    ;

It seems that at this stage of processing it would be non-trivial to 
distinguish between general annotations and Objective-C call expressions; the 
general heuristics are at a later stage of clang-format's pipeline, in 
TokenAnnotator: 
https://github.com/llvm/llvm-project/blob/7c298c104bfe725d4315926a656263e8a5ac3054/clang/lib/Format/TokenAnnotator.cpp#L174.

The problem is that these two cases fundamentally require look ahead: we need 
to keep `[[likely]]` on the same unwrapped line as the `if (argc > 5)`, but we 
need to put the `[pbj func:arg]` on a new unwrapped line.

Maybe we can try manually parsing forward looking for a `[[identifier]]` 
pattern, and if we don't find it, reset the token position, reset the token 
sequence to the point before the first left square brace; similarly to 
https://github.com/llvm/llvm-project/blob/7c298c104bfe725d4315926a656263e8a5ac3054/clang/lib/Format/UnwrappedLineParser.cpp#L1496.

I know that we didn't have a test for this in ObjC land, but the regression 
seems severe enough to revert this, add a regression test and work on adding if 
[[likely]]/[[unlikely]] support compatible with ObjC method expressions as a 
follow-up.

WDYT?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D80144



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to