djasper added a comment. In https://reviews.llvm.org/D43183#1008784, @Typz wrote:
> A user can create an error by reasoning like this, after the code has been > formatted this way (a long time ago) : "oh, I need to make an extra function > call, but in all cases.... ah, here is the end of the switch, let's put my > function call here". And then trying to format it with clang-format they'll be immediately thrown off because clang-format gets the indentation wrong :). But I don't want to argue this to death. I understand what you are saying. I just don't think any of your suggested formats make this situation better. > I am not saying it happens often, I am just saying it breaks indentation : > i.e. that two nested blocks should not close at the same depth. Breaking such > things makes code harder to read/understand, and when you don't properly get > the code you can more easily make a mistake. Obviously it should be caught in > testing, but it is not always. > > That said, I am not trying to say in any way that my approach is better. I > think both `CaseBlockIndent = Block` or your variant (with the extra line > break before opening brace; but applying it all the time) will indeed be > consistent with the code and not break indentation; keeping the current > behavior when `IndentCaseLabels = true` is also not a problem IMHO. An extra thing to consider is that my approach is also consistent with having something before this block: case A: { f(); g(); } h(); break; case B: f(); { g(); } h(); break; >> And to me (but this is obviously objective), your suggestions hide the >> structure of the code even more as they lead to a state where the closing >> brace is not aligned with the start of the line/statement that contains the >> opening braces. That looks like a bug to me more than anything else and I >> don't think there is another situation where clang-format would do that. > > The exact same thing happens for functions blocks, class blocks and control > statements, depending on BraceWrapping modes. Actually, IMO wrapping the > opening brace should probably be done according to > `BraceWrapping.AfterControlStatement` flag. > > // BraceWrapping.AfterControlStatement = false > switch (x) { > case 0: { > foo(); > break; > } > } > // BraceWrapping.AfterControlStatement = true > switch (x) > { > case 0: > { > foo(); > break; > } > } > > But I agree the `CaseBlockIndent = ClosingBrace` mode is definitely not > consistent with the code. I think it is clearer this way, but that is > definitely my own subjective opinion: in this case, I accept to lose the > extra indent for the sake of compactness and to somehow mimic the "regular" > case blocks (e.g. which do not include an actual block), but that is indeed > really my personnal way to read code. I don't agree that that's the same thing. The closing brace is still neatly aligned with the line of the opening brace (which happens to be just the opening brace). Repository: rC Clang https://reviews.llvm.org/D43183 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits