jolesiak added a comment. First of all, thanks, Arnaud, for looking into this.
Let's address the mentioned bug first. Let's assume that we use `IndentReference = Relative`. I think that this particular formatting bug is local (i.e. can be solved while processing a `@protocol` block). Look at this example: if (true) { int a = 42; int b = 42; int c = 42; } int d = 42; When we run `clang-format -lines=4:4` we get: if (true) { int a = 42; int b = 42; int c = 42; } int d = 42; Please note that neither `}` nor `int d = 42` is indented. But this is a different behavior from what we see after running `clang-format -lines=3:3` on: @protocol A @optional // comment - (void)f; @end MACRO the output is: @protocol A @optional // comment - (void)f; @end MACRO Please note that `@end` is indented (has different indentation than `@protocol`; `MACRO` is indented as well). To clarify why this is undesired, `@end` ends `@protocol`, not `@optional`. By the way, `clang-format` doesn't think that `@end` should match `@optional`, check the output of an extended example: @protocol A @optional // comment - (void)f; @end MACRO @end Second `@end` still doesn't match the `@protocol`. I think it's perfectly fine to allow users to have custom indentations if they so choose. In this particular example, though, `clang-format` should stop indenting when it reaches `@end`, giving the following output: @protocol A @optional // comment - (void)f; @end MACRO Moving to the general case, I must say that introducing `IndentReference = Relative/Absolute` is a very interesting approach. I can imagine situations when somebody actually want to use `IndentReference = Absolute`. However, adding an additional option comes at quite big cost and I think that in this case it outweighs the benefits. I think that a very good outcome could be to comment what is happening next to `IndentTracker.adjustToUnmodifiedLine(TheLine);` line. E.g. "We adjust an indentation to match the existing code to give users flexibility (instead of ignoring it). It's their responsibility to provide a correct formatting of lines they didn't initially change if these lines break formatting.". https://reviews.llvm.org/D49580 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits