Skip to content

Commit 61e7a9a

Browse files
authored
Merge pull request #25342 from nkcsgexi/indent-chain-call
SourceKit/Indentation: align function names in chained trailing closures
2 parents fdd7fc8 + c7cf966 commit 61e7a9a

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

lib/IDE/Formatting.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,24 @@ class FormatContext {
481481
}
482482
}
483483

484+
// Chained trailing closures shouldn't require additional indentation.
485+
// a.map {
486+
// ...
487+
// }.filter { <--- No indentation here.
488+
// ...
489+
// }.map { <--- No indentation here.
490+
// ...
491+
// }
492+
if (AtExprEnd && AtCursorExpr && isa<CallExpr>(AtExprEnd)) {
493+
if (auto *UDE = dyn_cast<UnresolvedDotExpr>(AtCursorExpr)) {
494+
if (auto *Base = UDE->getBase()) {
495+
if (exprEndAtLine(Base, Line))
496+
return false;
497+
}
498+
}
499+
}
500+
501+
484502
// Indent another level from the outer context by default.
485503
return true;
486504
}

test/SourceKit/CodeFormat/indent-closure.swift

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,16 @@ func foo8() {
5252
})
5353
}
5454

55+
func foo9(input: [Int]){
56+
input.map { (ele) in
57+
ele + 1
58+
}.filter{(ele) in
59+
return ele > 10
60+
}.map {(ele) in
61+
return ele + 1
62+
}
63+
}
64+
5565
// RUN: %sourcekitd-test -req=format -line=3 -length=1 %s >%t.response
5666
// RUN: %sourcekitd-test -req=format -line=4 -length=1 %s >>%t.response
5767
// RUN: %sourcekitd-test -req=format -line=5 -length=1 %s >>%t.response
@@ -68,6 +78,17 @@ func foo8() {
6878
// RUN: %sourcekitd-test -req=format -line=32 -length=1 %s >>%t.response
6979
// RUN: %sourcekitd-test -req=format -line=42 -length=1 %s >>%t.response
7080
// RUN: %sourcekitd-test -req=format -line=50 -length=1 %s >>%t.response
81+
82+
// RUN: %sourcekitd-test -req=format -line=55 -length=1 %s >>%t.response
83+
// RUN: %sourcekitd-test -req=format -line=56 -length=1 %s >>%t.response
84+
// RUN: %sourcekitd-test -req=format -line=57 -length=1 %s >>%t.response
85+
// RUN: %sourcekitd-test -req=format -line=58 -length=1 %s >>%t.response
86+
// RUN: %sourcekitd-test -req=format -line=59 -length=1 %s >>%t.response
87+
// RUN: %sourcekitd-test -req=format -line=60 -length=1 %s >>%t.response
88+
// RUN: %sourcekitd-test -req=format -line=61 -length=1 %s >>%t.response
89+
// RUN: %sourcekitd-test -req=format -line=62 -length=1 %s >>%t.response
90+
// RUN: %sourcekitd-test -req=format -line=63 -length=1 %s >>%t.response
91+
7192
// RUN: %FileCheck --strict-whitespace %s <%t.response
7293

7394
// CHECK: key.sourcetext: " var abc = 1"
@@ -94,3 +115,13 @@ func foo8() {
94115
// CHECK: key.sourcetext: " })"
95116

96117
// CHECK: key.sourcetext: " }, B: {"
118+
119+
// CHECK: key.sourcetext: "func foo9(input: [Int]){"
120+
// CHECK: key.sourcetext: " input.map { (ele) in"
121+
// CHECK: key.sourcetext: " ele + 1"
122+
// CHECK: key.sourcetext: " }.filter{(ele) in"
123+
// CHECK: key.sourcetext: " return ele > 10"
124+
// CHECK: key.sourcetext: " }.map {(ele) in"
125+
// CHECK: key.sourcetext: " return ele + 1"
126+
// CHECK: key.sourcetext: " }"
127+
// CHECK: key.sourcetext: "}"

0 commit comments

Comments
 (0)