@@ -142,7 +142,7 @@ final class OperatorDeclTests: XCTestCase {
142
142
prefix operator1️⃣
143
143
""" ,
144
144
diagnostics: [
145
- DiagnosticSpec ( message: " expected name in operator " )
145
+ DiagnosticSpec ( message: " expected name in operator declaration " )
146
146
]
147
147
)
148
148
}
@@ -154,7 +154,7 @@ final class OperatorDeclTests: XCTestCase {
154
154
prefix operator %%+
155
155
""" ,
156
156
diagnostics: [
157
- DiagnosticSpec ( message: " unexpected code before operator " ) ,
157
+ DiagnosticSpec ( message: " unexpected code before operator declaration " ) ,
158
158
]
159
159
)
160
160
}
@@ -208,7 +208,6 @@ final class OperatorDeclTests: XCTestCase {
208
208
infix operator --1️⃣aa
209
209
""" ,
210
210
diagnostics: [
211
- // TODO: Old parser expected error on line 1: 'aa' is considered an identifier and must not appear within an operator name
212
211
DiagnosticSpec ( message: " 'aa' is considered an identifier and must not appear within an operator name " , fixIts: [ " remove 'aa' " ] )
213
212
] , fixedSource: " infix operator -- "
214
213
)
@@ -220,7 +219,6 @@ final class OperatorDeclTests: XCTestCase {
220
219
infix operator 1️⃣aa--: A
221
220
""" ,
222
221
diagnostics: [
223
- // TODO: Old parser expected error on line 1: 'aa' is considered an identifier and must not appear within an operator name
224
222
DiagnosticSpec ( message: " 'aa' is considered an identifier and must not appear within an operator name " , highlight: " aa " , fixIts: [ " remove 'aa' " ] ) ,
225
223
] , fixedSource: " infix operator --: A "
226
224
)
@@ -302,51 +300,91 @@ final class OperatorDeclTests: XCTestCase {
302
300
infix operator --- : 1️⃣;
303
301
""" ,
304
302
diagnostics: [
305
- // TODO: Old parser expected error on line 3: expected precedence group name after ':' in operator declaration
306
- DiagnosticSpec ( message: " expected identifier in operator " ) ,
303
+ DiagnosticSpec ( message: " expected precedence group in operator declaration " ) ,
307
304
]
308
305
)
309
306
}
310
307
311
- func testOperatorDecl15 ( ) {
308
+ func testOperatorDecl15a ( ) {
312
309
AssertParse (
313
310
"""
314
311
precedencegroup 1️⃣{
315
312
associativity: right
316
313
}
314
+ """ ,
315
+ diagnostics: [
316
+ DiagnosticSpec ( message: " expected name in precedencegroup " ) ,
317
+ ]
318
+ )
319
+ }
320
+
321
+ func testOperatorDecl15b( ) {
322
+ AssertParse (
323
+ """
317
324
precedencegroup A {
318
- associativity 2️⃣right
325
+ associativity 1️⃣right
319
326
}
327
+ """ ,
328
+ diagnostics: [
329
+ DiagnosticSpec ( message: " expected ':' in 'associativity' property of precedencegroup " ) ,
330
+ ]
331
+ )
332
+ }
333
+
334
+
335
+ func testOperatorDecl15c( ) {
336
+ AssertParse (
337
+ """
320
338
precedencegroup B {
321
- 3️⃣precedence 123
339
+ 1️⃣precedence 123
322
340
}
341
+ """ ,
342
+ diagnostics: [
343
+ DiagnosticSpec ( message: " unexpected code 'precedence 123' in precedencegroup " ) ,
344
+ ]
345
+ )
346
+ }
347
+
348
+
349
+ func testOperatorDecl15d( ) {
350
+ AssertParse (
351
+ """
323
352
precedencegroup C {
324
- associativity: sinister
353
+ associativity: sinister
325
354
}
355
+ """
356
+ )
357
+ }
358
+
359
+
360
+ func testOperatorDecl15e( ) {
361
+ AssertParse (
362
+ """
326
363
precedencegroup D {
327
- assignment: 4️⃣no
364
+ assignment: 1️⃣no
328
365
}
366
+ """ ,
367
+ diagnostics: [
368
+ DiagnosticSpec ( message: " expected 'true' or 'false' after 'assignment' " ) ,
369
+ ]
370
+ )
371
+ }
372
+
373
+
374
+ func testOperatorDecl15( ) {
375
+ AssertParse (
376
+ """
329
377
precedencegroup E {
330
- higherThan:5️⃣
378
+ higherThan:1️⃣
331
379
}
332
380
""" ,
333
381
diagnostics: [
334
- // TODO: Old parser expected error on line 1: expected identifier after 'precedencegroup'
335
- DiagnosticSpec ( locationMarker: " 1️⃣ " , message: " expected name in precedencegroup " ) ,
336
- // TODO: Old parser expected error on line 5: expected colon after attribute name in precedence group
337
- DiagnosticSpec ( locationMarker: " 2️⃣ " , message: " expected ':' in 'associativity' property of precedencegroup " ) ,
338
- // TODO: Old parser expected error on line 8: 'precedence' is not a valid precedence group attribute
339
- DiagnosticSpec ( locationMarker: " 3️⃣ " , message: " unexpected code 'precedence 123' in precedencegroup " ) ,
340
- // TODO: Old parser expected error on line 11: expected 'none', 'left', or 'right' after 'associativity'
341
- // TODO: Old parser expected error on line 14: expected 'true' or 'false' after 'assignment'
342
- DiagnosticSpec ( locationMarker: " 4️⃣ " , message: " expected 'true' in 'assignment' property of precedencegroup " ) ,
343
- DiagnosticSpec ( locationMarker: " 4️⃣ " , message: " unexpected code 'no' in precedencegroup " ) ,
344
- DiagnosticSpec ( locationMarker: " 5️⃣ " , message: " expected name in 'relation' property of precedencegroup " ) ,
345
- // TODO: Old parser expected error on line 18: expected name of related precedence group after 'higherThan'
382
+ DiagnosticSpec ( message: " expected name in 'relation' property of precedencegroup " ) ,
346
383
]
347
384
)
348
385
}
349
386
387
+
350
388
func testOperatorDecl16( ) {
351
389
AssertParse (
352
390
"""
@@ -364,10 +402,7 @@ final class OperatorDeclTests: XCTestCase {
364
402
associativity: none
365
403
associativity: left
366
404
}
367
- """ ,
368
- diagnostics: [
369
- // TODO: Old parser expected error on line 3: 'associativity' attribute for precedence group declared multiple times
370
- ]
405
+ """
371
406
)
372
407
}
373
408
@@ -378,10 +413,7 @@ final class OperatorDeclTests: XCTestCase {
378
413
assignment: true
379
414
assignment: false
380
415
}
381
- """ ,
382
- diagnostics: [
383
- // TODO: Old parser expected error on line 3: 'assignment' attribute for precedence group declared multiple times
384
- ]
416
+ """
385
417
)
386
418
}
387
419
@@ -391,34 +423,25 @@ final class OperatorDeclTests: XCTestCase {
391
423
class Foo {
392
424
infix operator |||
393
425
}
394
- """ ,
395
- diagnostics: [
396
- // TODO: Old parser expected error on line 2: 'operator' may only be declared at file scope
397
- ]
426
+ """
398
427
)
399
428
}
400
429
401
430
func testOperatorDecl20( ) {
402
431
AssertParse (
403
432
"""
404
433
infix operator **<< : UndeclaredPrecedenceGroup
405
- """ ,
406
- diagnostics: [
407
- // TODO: Old parser expected error on line 1: unknown precedence group 'UndeclaredPrecedenceGroup'
408
- ]
434
+ """
409
435
)
410
436
}
411
437
412
438
func testOperatorDecl21( ) {
439
+ // TODO: We should not allow specification of multiple precedence groups
413
440
AssertParse (
414
441
"""
415
442
protocol Proto {}
416
443
infix operator *<*< : F, Proto
417
- """ ,
418
- diagnostics: [
419
- // TODO: Old parser expected error on line 2: consecutive statements on a line must be separated by ';'
420
- // TODO: Old parser expected error on line 2: expected expression
421
- ]
444
+ """
422
445
)
423
446
}
424
447
@@ -436,9 +459,7 @@ final class OperatorDeclTests: XCTestCase {
436
459
postfix operator ++:1️⃣
437
460
""" ,
438
461
diagnostics: [
439
- // TODO: Old parser expected error on line 1: only infix operators may declare a precedence, Fix-It replacements: 20 - 21 = ''
440
- DiagnosticSpec ( message: " expected identifier in operator " ) ,
441
- // TODO: Old parser expected error on line 2: expected precedence group name after ':' in operator declaration
462
+ DiagnosticSpec ( message: " expected precedence group in operator declaration " ) ,
442
463
]
443
464
)
444
465
}
0 commit comments