Skip to content

Commit 0523595

Browse files
committed
SourceKit: Include up to closing paren in object literals
rdar://problem/26451674
1 parent b9e30e5 commit 0523595

File tree

3 files changed

+18
-66
lines changed

3 files changed

+18
-66
lines changed

lib/IDE/SyntaxModel.cpp

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ SyntaxModelContext::SyntaxModelContext(SourceFile &SrcFile)
5959
std::vector<SyntaxNode> Nodes;
6060
SourceLoc AttrLoc;
6161
SourceLoc UnaryMinusLoc;
62+
auto LiteralStartLoc = Optional<SourceLoc>();
6263
for (unsigned I = 0, E = Tokens.size(); I != E; ++I) {
6364
auto &Tok = Tokens[I];
6465
SyntaxNodeKind Kind;
@@ -82,6 +83,16 @@ SyntaxModelContext::SyntaxModelContext(SourceFile &SrcFile)
8283
Loc = Tok.getLoc();
8384
Length = Tok.getLength();
8485

86+
if (LiteralStartLoc.hasValue() && Length.hasValue()) {
87+
if (Tok.getKind() != tok::r_paren)
88+
continue;
89+
Kind = SyntaxNodeKind::ObjectLiteral;
90+
Nodes.emplace_back(Kind, CharSourceRange(SM, LiteralStartLoc.getValue(),
91+
Tok.getRange().getEnd()));
92+
LiteralStartLoc = Optional<SourceLoc>();
93+
continue;
94+
}
95+
8596
switch(Tok.getKind()) {
8697
#define KEYWORD(X) case tok::kw_##X: Kind = SyntaxNodeKind::Keyword; break;
8798
#include "swift/Parse/Tokens.def"
@@ -91,8 +102,8 @@ SyntaxModelContext::SyntaxModelContext(SourceFile &SrcFile)
91102
case tok::pound_##Name:
92103
#define POUND_OBJECT_LITERAL(Name, Desc, Proto) case tok::pound_##Name:
93104
#include "swift/Parse/Tokens.def"
94-
Kind = SyntaxNodeKind::ObjectLiteral;
95-
break;
105+
LiteralStartLoc = Loc;
106+
continue;
96107

97108
#define POUND_OBJECT_LITERAL(Name, Desc, Proto)
98109
#define POUND_OLD_OBJECT_LITERAL(Name, NewName, OldArg, NewArg)

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@
44
let image = #imageLiteral(resourceName: "cloud.png")
55
let color = #colorLiteral(red: 1, blue: 0, green: 1, alpha: 1)
66
let file = #fileLiteral(resourceName: "test.txt")
7+
Lines changed: 4 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
key.offset: 0,
3-
key.length: 278,
3+
key.length: 279,
44
key.diagnostic_stage: source.diagnostic.stage.swift.parse,
55
key.syntaxmap: [
66
{
@@ -26,17 +26,7 @@
2626
{
2727
key.kind: source.lang.swift.syntaxtype.objectliteral,
2828
key.offset: 124,
29-
key.length: 13
30-
},
31-
{
32-
key.kind: source.lang.swift.syntaxtype.identifier,
33-
key.offset: 138,
34-
key.length: 12
35-
},
36-
{
37-
key.kind: source.lang.swift.syntaxtype.string,
38-
key.offset: 152,
39-
key.length: 11
29+
key.length: 40
4030
},
4131
{
4232
key.kind: source.lang.swift.syntaxtype.keyword,
@@ -51,47 +41,7 @@
5141
{
5242
key.kind: source.lang.swift.syntaxtype.objectliteral,
5343
key.offset: 177,
54-
key.length: 13
55-
},
56-
{
57-
key.kind: source.lang.swift.syntaxtype.identifier,
58-
key.offset: 191,
59-
key.length: 3
60-
},
61-
{
62-
key.kind: source.lang.swift.syntaxtype.number,
63-
key.offset: 196,
64-
key.length: 1
65-
},
66-
{
67-
key.kind: source.lang.swift.syntaxtype.identifier,
68-
key.offset: 199,
69-
key.length: 4
70-
},
71-
{
72-
key.kind: source.lang.swift.syntaxtype.number,
73-
key.offset: 205,
74-
key.length: 1
75-
},
76-
{
77-
key.kind: source.lang.swift.syntaxtype.identifier,
78-
key.offset: 208,
79-
key.length: 5
80-
},
81-
{
82-
key.kind: source.lang.swift.syntaxtype.number,
83-
key.offset: 215,
84-
key.length: 1
85-
},
86-
{
87-
key.kind: source.lang.swift.syntaxtype.identifier,
88-
key.offset: 218,
89-
key.length: 5
90-
},
91-
{
92-
key.kind: source.lang.swift.syntaxtype.number,
93-
key.offset: 225,
94-
key.length: 1
44+
key.length: 50
9545
},
9646
{
9747
key.kind: source.lang.swift.syntaxtype.keyword,
@@ -106,17 +56,7 @@
10656
{
10757
key.kind: source.lang.swift.syntaxtype.objectliteral,
10858
key.offset: 239,
109-
key.length: 12
110-
},
111-
{
112-
key.kind: source.lang.swift.syntaxtype.identifier,
113-
key.offset: 252,
114-
key.length: 12
115-
},
116-
{
117-
key.kind: source.lang.swift.syntaxtype.string,
118-
key.offset: 266,
119-
key.length: 10
59+
key.length: 38
12060
}
12161
]
12262
}

0 commit comments

Comments
 (0)