Skip to content

Commit cf11388

Browse files
authored
Merge pull request #16504 from ahoppen/namelength-4.2
4.2: [SourceKit] Make the NameLength of EnumElements take argument labels into account.
2 parents d5e1b13 + cbe1f0f commit cf11388

File tree

4 files changed

+99
-4
lines changed

4 files changed

+99
-4
lines changed

lib/IDE/SyntaxModel.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "swift/AST/Decl.h"
1717
#include "swift/AST/Expr.h"
1818
#include "swift/AST/Pattern.h"
19+
#include "swift/AST/ParameterList.h"
1920
#include "swift/AST/Module.h"
2021
#include "swift/AST/Stmt.h"
2122
#include "swift/AST/TypeRepr.h"
@@ -875,8 +876,15 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
875876
SN.Kind = SyntaxStructureKind::EnumElement;
876877
SN.Range = charSourceRangeFromSourceRange(SM,
877878
EnumElemD->getSourceRange());
878-
SN.NameRange = CharSourceRange(EnumElemD->getNameLoc(),
879-
EnumElemD->getName().getLength());
879+
if (auto ParamList = EnumElemD->getParameterList()) {
880+
SourceRange NameRange = SourceRange(EnumElemD->getNameLoc(),
881+
ParamList->getSourceRange().End);
882+
SN.NameRange = charSourceRangeFromSourceRange(SM, NameRange);
883+
} else {
884+
SN.NameRange = CharSourceRange(EnumElemD->getNameLoc(),
885+
EnumElemD->getName().getLength());
886+
}
887+
880888
if (auto *E = EnumElemD->getRawValueExpr()) {
881889
SourceRange ElemRange = E->getSourceRange();
882890
SN.Elements.emplace_back(SyntaxStructureElementKind::InitExpr,

test/IDE/structure.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ func test1() {
142142
// CHECK: <enum>enum <name>SomeEnum</name> {
143143
// CHECK: <enum-case>case <enum-elem><name>North</name></enum-elem></enum-case>
144144
// CHECK: <enum-case>case <enum-elem><name>South</name></enum-elem>, <enum-elem><name>East</name></enum-elem></enum-case>
145-
// CHECK: <enum-case>case <enum-elem><name>QRCode</name>(<param><type>String</type></param>)</enum-elem></enum-case>
145+
// CHECK: <enum-case>case <enum-elem><name>QRCode(<param><type>String</type></param>)</name></enum-elem></enum-case>
146146
// CHECK: <enum-case>case</enum-case>
147147
// CHECK: }</enum>
148148
enum SomeEnum {

test/SourceKit/DocumentStructure/Inputs/main.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,12 @@ class C {
118118
var // comment
119119
`$` = 1
120120
func /* comment */`foo`(x: Int) {}
121+
122+
// rdar://40085232
123+
enum MyEnum {
124+
case Bar(arg: Int)
125+
}
126+
127+
enum MySecondEnum {
128+
case One = 1
129+
}

test/SourceKit/DocumentStructure/structure.swift.response

Lines changed: 79 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
key.offset: 0,
3-
key.length: 1970,
3+
key.length: 2065,
44
key.diagnostic_stage: source.diagnostic.stage.swift.parse,
55
key.substructure: [
66
{
@@ -1208,6 +1208,84 @@
12081208
key.namelength: 1
12091209
}
12101210
]
1211+
},
1212+
{
1213+
key.kind: source.lang.swift.decl.enum,
1214+
key.accessibility: source.lang.swift.accessibility.internal,
1215+
key.name: "MyEnum",
1216+
key.offset: 1990,
1217+
key.length: 36,
1218+
key.nameoffset: 1995,
1219+
key.namelength: 6,
1220+
key.bodyoffset: 2003,
1221+
key.bodylength: 22,
1222+
key.substructure: [
1223+
{
1224+
key.kind: source.lang.swift.decl.enumcase,
1225+
key.offset: 2006,
1226+
key.length: 18,
1227+
key.nameoffset: 0,
1228+
key.namelength: 0,
1229+
key.substructure: [
1230+
{
1231+
key.kind: source.lang.swift.decl.enumelement,
1232+
key.accessibility: source.lang.swift.accessibility.internal,
1233+
key.name: "Bar(arg:)",
1234+
key.offset: 2011,
1235+
key.length: 13,
1236+
key.nameoffset: 2011,
1237+
key.namelength: 13
1238+
}
1239+
]
1240+
},
1241+
{
1242+
key.kind: source.lang.swift.decl.var.parameter,
1243+
key.name: "arg",
1244+
key.offset: 2015,
1245+
key.length: 8,
1246+
key.typename: "Int",
1247+
key.nameoffset: 2015,
1248+
key.namelength: 3
1249+
}
1250+
]
1251+
},
1252+
{
1253+
key.kind: source.lang.swift.decl.enum,
1254+
key.accessibility: source.lang.swift.accessibility.internal,
1255+
key.name: "MySecondEnum",
1256+
key.offset: 2028,
1257+
key.length: 36,
1258+
key.nameoffset: 2033,
1259+
key.namelength: 12,
1260+
key.bodyoffset: 2047,
1261+
key.bodylength: 16,
1262+
key.substructure: [
1263+
{
1264+
key.kind: source.lang.swift.decl.enumcase,
1265+
key.offset: 2050,
1266+
key.length: 12,
1267+
key.nameoffset: 0,
1268+
key.namelength: 0,
1269+
key.substructure: [
1270+
{
1271+
key.kind: source.lang.swift.decl.enumelement,
1272+
key.accessibility: source.lang.swift.accessibility.internal,
1273+
key.name: "One",
1274+
key.offset: 2055,
1275+
key.length: 7,
1276+
key.nameoffset: 2055,
1277+
key.namelength: 3,
1278+
key.elements: [
1279+
{
1280+
key.kind: source.lang.swift.structure.elem.init_expr,
1281+
key.offset: 2061,
1282+
key.length: 1
1283+
}
1284+
]
1285+
}
1286+
]
1287+
}
1288+
]
12111289
}
12121290
],
12131291
key.diagnostics: [

0 commit comments

Comments
 (0)