@@ -132,11 +132,20 @@ final class DeclarationTests: XCTestCase {
132
132
"""
133
133
)
134
134
assertParse (
135
- " class B <where g1️⃣ " ,
135
+ " class Bℹ️ <where g1️⃣ " ,
136
136
diagnostics: [
137
- DiagnosticSpec ( message: " expected ':' or '==' to indicate a conformance or same-type requirement " ) ,
138
- DiagnosticSpec ( message: " expected '>' to end generic parameter clause " , fixIts: [ " insert '>' " ] ) ,
139
- DiagnosticSpec ( message: " expected member block in class " , fixIts: [ " insert member block " ] ) ,
137
+ DiagnosticSpec (
138
+ message: " expected ':' or '==' to indicate a conformance or same-type requirement "
139
+ ) ,
140
+ DiagnosticSpec (
141
+ message: " expected '>' to end generic parameter clause " ,
142
+ notes: [ NoteSpec ( message: " to match this opening '<' " ) ] ,
143
+ fixIts: [ " insert '>' " ]
144
+ ) ,
145
+ DiagnosticSpec (
146
+ message: " expected member block in class " ,
147
+ fixIts: [ " insert member block " ]
148
+ ) ,
140
149
] ,
141
150
fixedSource: """
142
151
class B<where g> {
@@ -193,11 +202,23 @@ final class DeclarationTests: XCTestCase {
193
202
)
194
203
195
204
assertParse (
196
- " protocol P {1️⃣{}case2️⃣ " ,
205
+ " protocol Pℹ️ {1️⃣{}case2️⃣ " ,
197
206
diagnostics: [
198
- DiagnosticSpec ( locationMarker: " 1️⃣ " , message: " unexpected code '{}' before enum case " ) ,
199
- DiagnosticSpec ( locationMarker: " 2️⃣ " , message: " expected identifier in enum case " , fixIts: [ " insert identifier " ] ) ,
200
- DiagnosticSpec ( locationMarker: " 2️⃣ " , message: " expected '}' to end protocol " , fixIts: [ " insert '}' " ] ) ,
207
+ DiagnosticSpec (
208
+ locationMarker: " 1️⃣ " ,
209
+ message: " unexpected code '{}' before enum case "
210
+ ) ,
211
+ DiagnosticSpec (
212
+ locationMarker: " 2️⃣ " ,
213
+ message: " expected identifier in enum case " ,
214
+ fixIts: [ " insert identifier " ]
215
+ ) ,
216
+ DiagnosticSpec (
217
+ locationMarker: " 2️⃣ " ,
218
+ message: " expected '}' to end protocol " ,
219
+ notes: [ NoteSpec ( message: " to match this opening '{' " ) ] ,
220
+ fixIts: [ " insert '}' " ]
221
+ ) ,
201
222
] ,
202
223
fixedSource: """
203
224
protocol P{{}case <#identifier#>
@@ -672,9 +693,13 @@ final class DeclarationTests: XCTestCase {
672
693
673
694
func testMissingClosingParenInFunctionSignature( ) {
674
695
assertParse (
675
- " func test (first second: Int1️⃣ " ,
696
+ " func testℹ️ (first second: Int1️⃣ " ,
676
697
diagnostics: [
677
- DiagnosticSpec ( message: " expected ')' to end parameter clause " , fixIts: [ " insert ')' " ] )
698
+ DiagnosticSpec (
699
+ message: " expected ')' to end parameter clause " ,
700
+ notes: [ NoteSpec ( message: " to match this opening '(' " ) ] ,
701
+ fixIts: [ " insert ')' " ]
702
+ )
678
703
] ,
679
704
fixedSource: """
680
705
func test(first second: Int)
@@ -814,15 +839,31 @@ final class DeclarationTests: XCTestCase {
814
839
func testExpressionMember( ) {
815
840
assertParse (
816
841
"""
817
- struct S { 1️⃣
818
- /2️⃣ ###line 25 " line-directive.swift " 3️⃣
819
- 4️⃣ }
842
+ struct S 1️⃣{2️⃣
843
+ 3️⃣/4️⃣ ###line 25 " line-directive.swift " 5️⃣
844
+ 6️⃣ }
820
845
""" ,
821
846
diagnostics: [
822
- DiagnosticSpec ( locationMarker: " 1️⃣ " , message: " expected '}' to end struct " , fixIts: [ " insert '}' " ] ) ,
823
- DiagnosticSpec ( locationMarker: " 2️⃣ " , message: " bare slash regex literal may not start with space " ) ,
824
- DiagnosticSpec ( locationMarker: " 3️⃣ " , message: " expected '/' to end regex literal " , fixIts: [ " insert '/ \' " ] ) ,
825
- DiagnosticSpec ( locationMarker: " 4️⃣ " , message: " extraneous brace at top level " ) ,
847
+ DiagnosticSpec (
848
+ locationMarker: " 2️⃣ " ,
849
+ message: " expected '}' to end struct " ,
850
+ notes: [ NoteSpec ( locationMarker: " 1️⃣ " , message: " to match this opening '{' " ) ] ,
851
+ fixIts: [ " insert '}' " ]
852
+ ) ,
853
+ DiagnosticSpec (
854
+ locationMarker: " 4️⃣ " ,
855
+ message: " bare slash regex literal may not start with space "
856
+ ) ,
857
+ DiagnosticSpec (
858
+ locationMarker: " 5️⃣ " ,
859
+ message: " expected '/' to end regex literal " ,
860
+ notes: [ NoteSpec ( locationMarker: " 3️⃣ " , message: " to match this opening '/' " ) ] ,
861
+ fixIts: [ " insert '/ \' " ]
862
+ ) ,
863
+ DiagnosticSpec (
864
+ locationMarker: " 6️⃣ " ,
865
+ message: " extraneous brace at top level "
866
+ ) ,
826
867
] ,
827
868
fixedSource: """
828
869
struct S {
@@ -915,7 +956,7 @@ final class DeclarationTests: XCTestCase {
915
956
916
957
func testDontRecoverFromDeclKeyword( ) {
917
958
assertParse (
918
- " func foo (first second 1️⃣third 2️⃣struct3️⃣: Int4️⃣) {} " ,
959
+ " func fooℹ️ (first second 1️⃣third 2️⃣struct3️⃣: Int4️⃣) {} " ,
919
960
substructure: Syntax (
920
961
FunctionParameterSyntax (
921
962
firstName: . identifier( " first " ) ,
@@ -925,10 +966,26 @@ final class DeclarationTests: XCTestCase {
925
966
)
926
967
) ,
927
968
diagnostics: [
928
- DiagnosticSpec ( locationMarker: " 1️⃣ " , message: " expected ':' in parameter " , fixIts: [ " insert ':' " ] ) ,
929
- DiagnosticSpec ( locationMarker: " 2️⃣ " , message: " expected ')' to end parameter clause " , fixIts: [ " insert ')' " ] ) ,
930
- DiagnosticSpec ( locationMarker: " 3️⃣ " , message: " expected identifier in struct " , fixIts: [ " insert identifier " ] ) ,
931
- DiagnosticSpec ( locationMarker: " 4️⃣ " , message: " unexpected code ')' in struct " ) ,
969
+ DiagnosticSpec (
970
+ locationMarker: " 1️⃣ " ,
971
+ message: " expected ':' in parameter " ,
972
+ fixIts: [ " insert ':' " ]
973
+ ) ,
974
+ DiagnosticSpec (
975
+ locationMarker: " 2️⃣ " ,
976
+ message: " expected ')' to end parameter clause " ,
977
+ notes: [ NoteSpec ( message: " to match this opening '(' " ) ] ,
978
+ fixIts: [ " insert ')' " ]
979
+ ) ,
980
+ DiagnosticSpec (
981
+ locationMarker: " 3️⃣ " ,
982
+ message: " expected identifier in struct " ,
983
+ fixIts: [ " insert identifier " ]
984
+ ) ,
985
+ DiagnosticSpec (
986
+ locationMarker: " 4️⃣ " ,
987
+ message: " unexpected code ')' in struct "
988
+ ) ,
932
989
] ,
933
990
fixedSource: """
934
991
func foo(first second: third)struct <#identifier#>: Int) {}
@@ -975,9 +1032,21 @@ final class DeclarationTests: XCTestCase {
975
1032
)
976
1033
) ,
977
1034
diagnostics: [
978
- DiagnosticSpec ( locationMarker: " 1️⃣ " , message: " expected ':' in parameter " , fixIts: [ " insert ':' " ] ) ,
979
- DiagnosticSpec ( locationMarker: " 2️⃣ " , message: " expected ']' to end array type " , fixIts: [ " insert ']' " ] ) ,
980
- DiagnosticSpec ( locationMarker: " 2️⃣ " , message: " unexpected code 'fourth: Int' in parameter clause " ) ,
1035
+ DiagnosticSpec (
1036
+ locationMarker: " 1️⃣ " ,
1037
+ message: " expected ':' in parameter " ,
1038
+ fixIts: [ " insert ':' " ]
1039
+ ) ,
1040
+ DiagnosticSpec (
1041
+ locationMarker: " 2️⃣ " ,
1042
+ message: " expected ']' to end array type " ,
1043
+ notes: [ NoteSpec ( locationMarker: " 1️⃣ " , message: " to match this opening '[' " ) ] ,
1044
+ fixIts: [ " insert ']' " ]
1045
+ ) ,
1046
+ DiagnosticSpec (
1047
+ locationMarker: " 2️⃣ " ,
1048
+ message: " unexpected code 'fourth: Int' in parameter clause "
1049
+ ) ,
981
1050
] ,
982
1051
fixedSource: """
983
1052
func foo(first second: [third]fourth: Int) {}
@@ -988,7 +1057,7 @@ final class DeclarationTests: XCTestCase {
988
1057
func testDontRecoverIfNewlineIsBeforeColon( ) {
989
1058
assertParse (
990
1059
"""
991
- func foo (first second 1️⃣third2️⃣
1060
+ func fooℹ️ (first second 1️⃣third2️⃣
992
1061
3️⃣: Int) {}
993
1062
""" ,
994
1063
substructure: Syntax (
@@ -1000,9 +1069,21 @@ final class DeclarationTests: XCTestCase {
1000
1069
)
1001
1070
) ,
1002
1071
diagnostics: [
1003
- DiagnosticSpec ( locationMarker: " 1️⃣ " , message: " expected ':' in parameter " , fixIts: [ " insert ':' " ] ) ,
1004
- DiagnosticSpec ( locationMarker: " 2️⃣ " , message: " expected ')' to end parameter clause " , fixIts: [ " insert ')' " ] ) ,
1005
- DiagnosticSpec ( locationMarker: " 3️⃣ " , message: " extraneous code ': Int) {}' at top level " ) ,
1072
+ DiagnosticSpec (
1073
+ locationMarker: " 1️⃣ " ,
1074
+ message: " expected ':' in parameter " ,
1075
+ fixIts: [ " insert ':' " ]
1076
+ ) ,
1077
+ DiagnosticSpec (
1078
+ locationMarker: " 2️⃣ " ,
1079
+ message: " expected ')' to end parameter clause " ,
1080
+ notes: [ NoteSpec ( message: " to match this opening '(' " ) ] ,
1081
+ fixIts: [ " insert ')' " ]
1082
+ ) ,
1083
+ DiagnosticSpec (
1084
+ locationMarker: " 3️⃣ " ,
1085
+ message: " extraneous code ': Int) {}' at top level "
1086
+ ) ,
1006
1087
] ,
1007
1088
fixedSource: """
1008
1089
func foo(first second: third)
@@ -1261,13 +1342,30 @@ final class DeclarationTests: XCTestCase {
1261
1342
func testStandaloneAtSignInGenericParameter( ) {
1262
1343
assertParse (
1263
1344
"""
1264
- struct U<@1️⃣
1345
+ struct U1️⃣<@2️⃣
1265
1346
""" ,
1266
1347
diagnostics: [
1267
- DiagnosticSpec ( message: " expected name in attribute " , fixIts: [ " insert name " ] ) ,
1268
- DiagnosticSpec ( message: " expected name in generic parameter " , fixIts: [ " insert name " ] ) ,
1269
- DiagnosticSpec ( message: " expected '>' to end generic parameter clause " , fixIts: [ " insert '>' " ] ) ,
1270
- DiagnosticSpec ( message: " expected member block in struct " , fixIts: [ " insert member block " ] ) ,
1348
+ DiagnosticSpec (
1349
+ locationMarker: " 2️⃣ " ,
1350
+ message: " expected name in attribute " ,
1351
+ fixIts: [ " insert name " ]
1352
+ ) ,
1353
+ DiagnosticSpec (
1354
+ locationMarker: " 2️⃣ " ,
1355
+ message: " expected name in generic parameter " ,
1356
+ fixIts: [ " insert name " ]
1357
+ ) ,
1358
+ DiagnosticSpec (
1359
+ locationMarker: " 2️⃣ " ,
1360
+ message: " expected '>' to end generic parameter clause " ,
1361
+ notes: [ NoteSpec ( locationMarker: " 1️⃣ " , message: " to match this opening '<' " ) ] ,
1362
+ fixIts: [ " insert '>' " ]
1363
+ ) ,
1364
+ DiagnosticSpec (
1365
+ locationMarker: " 2️⃣ " ,
1366
+ message: " expected member block in struct " ,
1367
+ fixIts: [ " insert member block " ]
1368
+ ) ,
1271
1369
] ,
1272
1370
fixedSource: """
1273
1371
struct U<@<#type#> <#identifier#>> {
0 commit comments