Skip to content

Commit 589d9a8

Browse files
committed
CodeFormat: Avoid indenting the close bracket of a closure if the closure is on the RHS of an assignment expression. rdar://24507930
1 parent 822a6ab commit 589d9a8

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

lib/IDE/Formatting.cpp

+8-2
Original file line numberDiff line numberDiff line change
@@ -373,8 +373,7 @@ class FormatContext {
373373
if (SubExpr && SubExpr == AtExprEnd &&
374374
SM.getLineAndColumn(Paren->getEndLoc()).first == Line)
375375
return false;
376-
}
377-
else if (auto *Tuple = dyn_cast_or_null<TupleExpr>(Cursor->getAsExpr())) {
376+
} else if (auto *Tuple = dyn_cast_or_null<TupleExpr>(Cursor->getAsExpr())) {
378377
auto SubExprs = Tuple->getElements();
379378
if (!SubExprs.empty() && SubExprs.back() == AtExprEnd &&
380379
SM.getLineAndColumn(Tuple->getEndLoc()).first == Line) {
@@ -385,6 +384,13 @@ class FormatContext {
385384
if (Loc.isValid() && SM.getLineNumber(Loc) == Line) {
386385
return false;
387386
}
387+
} else if(auto *Seq = dyn_cast_or_null<SequenceExpr>(Cursor->getAsExpr())) {
388+
ArrayRef<Expr*> Elements = Seq->getElements();
389+
if (Elements.size() == 3 &&
390+
Elements[1]->getKind() == ExprKind::Assign &&
391+
SM.getLineAndColumn(Elements[2]->getEndLoc()).first == Line) {
392+
return false;
393+
}
388394
}
389395
}
390396

test/SourceKit/CodeFormat/indent-closure.swift

+24
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,15 @@ func foo3() {
2323
}
2424
}
2525

26+
func foo4() {
27+
test = {
28+
return 0
29+
}()
30+
let test = {
31+
return 0
32+
}()
33+
}
34+
2635
// RUN: %sourcekitd-test -req=format -line=3 -length=1 %s >%t.response
2736
// RUN: %sourcekitd-test -req=format -line=4 -length=1 %s >>%t.response
2837
// RUN: %sourcekitd-test -req=format -line=5 -length=1 %s >>%t.response
@@ -31,6 +40,12 @@ func foo3() {
3140
// RUN: %sourcekitd-test -req=format -line=8 -length=1 %s >>%t.response
3241
// RUN: %sourcekitd-test -req=format -line=14 -length=1 %s >>%t.response
3342
// RUN: %sourcekitd-test -req=format -line=22 -length=1 %s >>%t.response
43+
// RUN: %sourcekitd-test -req=format -line=27 -length=1 %s >>%t.response
44+
// RUN: %sourcekitd-test -req=format -line=28 -length=1 %s >>%t.response
45+
// RUN: %sourcekitd-test -req=format -line=29 -length=1 %s >>%t.response
46+
// RUN: %sourcekitd-test -req=format -line=30 -length=1 %s >>%t.response
47+
// RUN: %sourcekitd-test -req=format -line=31 -length=1 %s >>%t.response
48+
// RUN: %sourcekitd-test -req=format -line=32 -length=1 %s >>%t.response
3449
// RUN: FileCheck --strict-whitespace %s <%t.response
3550

3651
// CHECK: key.sourcetext: " var abc = 1"
@@ -44,3 +59,12 @@ func foo3() {
4459
// CHECK: key.sourcetext: " }()"
4560
// " foo1(1)"
4661
// CHECK: key.sourcetext: " {"
62+
63+
// CHECK: key.sourcetext: " test = {"
64+
// CHECK: key.sourcetext: " return 0"
65+
// CHECK: key.sourcetext: " }()"
66+
67+
68+
// CHECK: key.sourcetext: " let test = {"
69+
// CHECK: key.sourcetext: " return 0"
70+
// CHECK: key.sourcetext: " }()"

0 commit comments

Comments
 (0)