Skip to content

Commit 5bd6f80

Browse files
authored
Merge pull request #38646 from hamishknight/annotate-unlabelled-unary-args
2 parents 33764b8 + 470cb26 commit 5bd6f80

File tree

5 files changed

+51
-21
lines changed

5 files changed

+51
-21
lines changed

lib/IDE/SyntaxModel.cpp

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -484,8 +484,12 @@ CharSourceRange innerCharSourceRangeFromSourceRange(const SourceManager &SM,
484484
return CharSourceRange(SM, SRS, (SR.End != SR.Start) ? SR.End : SRS);
485485
}
486486

487-
CharSourceRange parameterNameRangeOfCallArg(const TupleExpr *TE,
487+
CharSourceRange parameterNameRangeOfCallArg(const Expr *ArgListExpr,
488488
const Expr *Arg) {
489+
if (isa<ParenExpr>(ArgListExpr))
490+
return CharSourceRange();
491+
492+
auto *TE = cast<TupleExpr>(ArgListExpr);
489493
if (!TE->hasElementNameLocs() || !TE->hasElementNames())
490494
return CharSourceRange();
491495

@@ -547,12 +551,11 @@ std::pair<bool, Expr *> ModelASTWalker::walkToExprPre(Expr *E) {
547551
if (isVisitedBefore(E))
548552
return {false, E};
549553

550-
auto addCallArgExpr = [&](Expr *Elem, TupleExpr *ParentTupleExpr) {
551-
if (isa<DefaultArgumentExpr>(Elem) ||
552-
!isCurrentCallArgExpr(ParentTupleExpr))
554+
auto addCallArgExpr = [&](Expr *Elem, Expr *ArgListExpr) {
555+
if (isa<DefaultArgumentExpr>(Elem) || !isCurrentCallArgExpr(ArgListExpr))
553556
return;
554557

555-
CharSourceRange NR = parameterNameRangeOfCallArg(ParentTupleExpr, Elem);
558+
CharSourceRange NR = parameterNameRangeOfCallArg(ArgListExpr, Elem);
556559
SyntaxStructureNode SN;
557560
SN.Kind = SyntaxStructureKind::Argument;
558561
SN.NameRange = NR;
@@ -568,15 +571,9 @@ std::pair<bool, Expr *> ModelASTWalker::walkToExprPre(Expr *E) {
568571
pushStructureNode(SN, Elem);
569572
};
570573

571-
if (auto *ParentTupleExpr = dyn_cast_or_null<TupleExpr>(Parent.getAsExpr())) {
572-
// the argument value is a tuple expression already, we can just extract it
573-
addCallArgExpr(E, ParentTupleExpr);
574-
} else if (auto *ParentOptionalExpr = dyn_cast_or_null<OptionalEvaluationExpr>(Parent.getAsExpr())) {
575-
// if an argument value is an optional expression, we should extract the
576-
// argument from the subexpression
577-
if (auto *ParentTupleExpr = dyn_cast_or_null<TupleExpr>(ParentOptionalExpr->getSubExpr())) {
578-
addCallArgExpr(E, ParentTupleExpr);
579-
}
574+
if (auto *ParentExpr = Parent.getAsExpr()) {
575+
if (isa<TupleExpr>(ParentExpr) || isa<ParenExpr>(ParentExpr))
576+
addCallArgExpr(E, ParentExpr);
580577
}
581578

582579
if (E->isImplicit())

test/IDE/structure.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ class SubscriptTest {
221221
// CHECK: return 0
222222
// CHECK: }
223223
// CHECK: set(<param>value</param>) {
224-
// CHECK: <call><name>print</name>(value)</call>
224+
// CHECK: <call><name>print</name>(<arg>value</arg>)</call>
225225
// CHECK: }</subscript>
226226
}
227227

@@ -319,16 +319,16 @@ thirdCall("""
319319
}())
320320
""")
321321
""")
322-
// CHECK: <call><name>thirdCall</name>("""
322+
// CHECK: <call><name>thirdCall</name>(<arg>"""
323323
// CHECK-NEXT: \("""
324324
// CHECK-NEXT: \(<call><name><closure><brace>{
325325
// CHECK-NEXT: return <call><name>a</name>()</call>
326326
// CHECK-NEXT: }</brace></closure></name>()</call>)
327327
// CHECK-NEXT: """)
328-
// CHECK-NEXT: """)</call>
328+
// CHECK-NEXT: """</arg>)</call>
329329

330330
fourthCall(a: @escaping () -> Int)
331331
// CHECK: <call><name>fourthCall</name>(<arg><name>a</name>: @escaping () -> Int</arg>)</call>
332332

333-
// CHECK: <call><name>foo</name> <closure><brace>{ [unowned <lvar><name>self</name></lvar>, <lvar><name>x</name></lvar>] in _ }</brace></closure></call>
333+
// CHECK: <call><name>foo</name> <arg><closure><brace>{ [unowned <lvar><name>self</name></lvar>, <lvar><name>x</name></lvar>] in _ }</brace></closure></arg></call>
334334
foo { [unowned self, x] in _ }

test/SourceKit/DocumentStructure/structure.swift.empty.response

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1643,7 +1643,18 @@
16431643
key.nameoffset: 2669,
16441644
key.namelength: 5,
16451645
key.bodyoffset: 2675,
1646-
key.bodylength: 8
1646+
key.bodylength: 8,
1647+
key.substructure: [
1648+
{
1649+
key.kind: source.lang.swift.expr.argument,
1650+
key.offset: 2675,
1651+
key.length: 8,
1652+
key.nameoffset: 0,
1653+
key.namelength: 0,
1654+
key.bodyoffset: 2675,
1655+
key.bodylength: 8
1656+
}
1657+
]
16471658
},
16481659
{
16491660
key.kind: source.lang.swift.decl.protocol,

test/SourceKit/DocumentStructure/structure.swift.foobar.response

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1643,7 +1643,18 @@
16431643
key.nameoffset: 2669,
16441644
key.namelength: 5,
16451645
key.bodyoffset: 2675,
1646-
key.bodylength: 8
1646+
key.bodylength: 8,
1647+
key.substructure: [
1648+
{
1649+
key.kind: source.lang.swift.expr.argument,
1650+
key.offset: 2675,
1651+
key.length: 8,
1652+
key.nameoffset: 0,
1653+
key.namelength: 0,
1654+
key.bodyoffset: 2675,
1655+
key.bodylength: 8
1656+
}
1657+
]
16471658
},
16481659
{
16491660
key.kind: source.lang.swift.decl.protocol,

test/SourceKit/DocumentStructure/structure.swift.response

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1643,7 +1643,18 @@
16431643
key.nameoffset: 2669,
16441644
key.namelength: 5,
16451645
key.bodyoffset: 2675,
1646-
key.bodylength: 8
1646+
key.bodylength: 8,
1647+
key.substructure: [
1648+
{
1649+
key.kind: source.lang.swift.expr.argument,
1650+
key.offset: 2675,
1651+
key.length: 8,
1652+
key.nameoffset: 0,
1653+
key.namelength: 0,
1654+
key.bodyoffset: 2675,
1655+
key.bodylength: 8
1656+
}
1657+
]
16471658
},
16481659
{
16491660
key.kind: source.lang.swift.decl.protocol,

0 commit comments

Comments
 (0)