Skip to content

Commit 500fdd2

Browse files
authored
[Syntax] Avoid highlighting keyword-like labels in call arguments as … (#3369)
* [Syntax] Avoid highlighting keyword-like labels in call arguments as keywords. rdar://24460689 * [test] Update test for SourceKit.
1 parent a0f1a53 commit 500fdd2

File tree

3 files changed

+33
-3
lines changed

3 files changed

+33
-3
lines changed

lib/IDE/SyntaxModel.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,9 +448,15 @@ std::pair<bool, Expr *> ModelASTWalker::walkToExprPre(Expr *E) {
448448
SN.Kind = SyntaxStructureKind::Parameter;
449449
SN.NameRange = NR;
450450
SN.BodyRange = charSourceRangeFromSourceRange(SM, E->getSourceRange());
451-
if (NR.isValid())
451+
if (NR.isValid()) {
452452
SN.Range = charSourceRangeFromSourceRange(SM, SourceRange(NR.getStart(),
453453
E->getEndLoc()));
454+
passTokenNodesUntil(NR.getStart(),
455+
PassNodesBehavior::ExcludeNodeAtLocation);
456+
if (!TokenNodes.empty())
457+
const_cast<SyntaxNode&>(TokenNodes.front()).Kind = SyntaxNodeKind::
458+
Identifier;
459+
}
454460
else
455461
SN.Range = SN.BodyRange;
456462

@@ -515,6 +521,17 @@ std::pair<bool, Expr *> ModelASTWalker::walkToExprPre(Expr *E) {
515521
}
516522
SN.BodyRange = innerCharSourceRangeFromSourceRange(SM, E->getSourceRange());
517523
pushStructureNode(SN, E);
524+
} else if (auto *Tup = dyn_cast<TupleExpr>(E)) {
525+
for (unsigned I = 0; I < Tup->getNumElements(); ++ I) {
526+
SourceLoc NameLoc = Tup->getElementNameLoc(I);
527+
if (NameLoc.isValid()) {
528+
passTokenNodesUntil(NameLoc, PassNodesBehavior::ExcludeNodeAtLocation);
529+
if (!TokenNodes.empty()) {
530+
const_cast<SyntaxNode&>(TokenNodes.front()).Kind = SyntaxNodeKind::
531+
Identifier;
532+
}
533+
}
534+
}
518535
}
519536

520537
return { true, E };

test/IDE/coloring.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,19 @@ let black = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
490490
"--\"\(x) --"
491491
// CHECK: <str>"--\"</str>\<anchor>(</anchor>x<anchor>)</anchor><str> --"</str>
492492

493+
func keywordAsLabel1(in: Int) {}
494+
// CHECK: <kw>func</kw> keywordAsLabel1(in: <type>Int</type>) {}
495+
func keywordAsLabel2(for: Int) {}
496+
// CHECK: <kw>func</kw> keywordAsLabel2(for: <type>Int</type>) {}
497+
498+
func foo1() {
499+
// CHECK: <kw>func</kw> foo1() {
500+
keywordAsLabel1(in: 1)
501+
// CHECK: keywordAsLabel1(in: <int>1</int>)
502+
keywordAsLabel2(for: 1)
503+
// CHECK: keywordAsLabel2(for: <int>1</int>)
504+
}
505+
493506
// Keep this as the last test
494507
/**
495508
Trailing off ...

test/SourceKit/SyntaxMapData/syntaxmap-object-literals.swift.response

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
key.length: 40
3030
},
3131
{
32-
key.kind: source.lang.swift.syntaxtype.keyword,
32+
key.kind: source.lang.swift.syntaxtype.identifier,
3333
key.offset: 165,
3434
key.length: 3
3535
},
@@ -44,7 +44,7 @@
4444
key.length: 50
4545
},
4646
{
47-
key.kind: source.lang.swift.syntaxtype.keyword,
47+
key.kind: source.lang.swift.syntaxtype.identifier,
4848
key.offset: 228,
4949
key.length: 3
5050
},

0 commit comments

Comments
 (0)