mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-28 02:37:37 +00:00
[clang-format] restore indent in conditionals when AlignOperands is DontAlign
Summary:
After D50078, we're experiencing unexpected un-indent using a style combining `AlignOperands: DontAlign` with `BreakBeforeTernaryOperators: false`, such as Google's JavaScript style:
```
% bin/clang-format -style=google ~/test.js
aaaaaaaaaaa = bbbbbbbb ? cccccccccccccccccc() :
dddddddddd ? eeeeeeeeeeeeee :
fffff;
```
The issue lies with the interaction of `AlignOperands: DontAlign` and the edited code section in ContinuationIndenter.cpp, which de-dents the intent by `Style.ContinuationIndentWidth`. From [[ ac3e5c4d93/clang/include/clang/Format/Format.h (L170)
| the documentation ]] of AlignOperands: DontAlign:
> The wrapped lines are indented `ContinuationIndentWidth` spaces from the start of the line.
So the de-dent effectively erases the necessary `ContinuationIndentWidth` in that case.
This patch restores the `AlignOperands: DontAlign` behavior, producing:
```
% bin/clang-format -style=google ~/test.js
aaaaaaaaaaa = bbbbbbbb ? cccccccccccccccccc() :
dddddddddd ? eeeeeeeeeeeeee :
fffff;
```
Reviewers: sammccall
Reviewed By: sammccall
Subscribers: cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D82199
This commit is contained in:
parent
31fe8c2763
commit
0fad648b65
@ -1041,8 +1041,10 @@ unsigned ContinuationIndenter::getNewLineColumn(const LineState &State) {
|
||||
// * not remove the 'lead' ContinuationIndentWidth
|
||||
// * always un-indent by the operator when
|
||||
// BreakBeforeTernaryOperators=true
|
||||
unsigned Indent =
|
||||
State.Stack.back().Indent - Style.ContinuationIndentWidth;
|
||||
unsigned Indent = State.Stack.back().Indent;
|
||||
if (Style.AlignOperands != FormatStyle::OAS_DontAlign) {
|
||||
Indent -= Style.ContinuationIndentWidth;
|
||||
}
|
||||
if (Style.BreakBeforeTernaryOperators &&
|
||||
State.Stack.back().UnindentOperator)
|
||||
Indent -= 2;
|
||||
|
@ -6281,6 +6281,17 @@ TEST_F(FormatTest, BreaksConditionalExpressions) {
|
||||
" : bbbbbbbbbbbbbbbbbbbbbbb ? 2222222222222222\n"
|
||||
" : 3333333333333333;",
|
||||
Style);
|
||||
|
||||
Style.AlignOperands = FormatStyle::OAS_DontAlign;
|
||||
Style.BreakBeforeTernaryOperators = false;
|
||||
// FIXME: Aligning the question marks is weird given DontAlign.
|
||||
// Consider disabling this alignment in this case. Also check whether this
|
||||
// will render the adjustment from https://reviews.llvm.org/D82199
|
||||
// unnecessary.
|
||||
verifyFormat("int x = aaaaaaaaaaaaaaa ? aaaaaaaaaaaaaaaaaa :\n"
|
||||
" bbbb ? cccccccccccccccccc :\n"
|
||||
" ddddd;\n",
|
||||
Style);
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, BreaksConditionalExpressionsAfterOperator) {
|
||||
|
Loading…
Reference in New Issue
Block a user