@@ -2414,99 +2414,22 @@ namespace ts {
2414
2414
2415
2415
export function getOperatorPrecedence ( nodeKind : SyntaxKind , operatorKind : SyntaxKind , hasArguments ?: boolean ) {
2416
2416
switch ( nodeKind ) {
2417
- case SyntaxKind . ThisKeyword :
2418
- case SyntaxKind . SuperKeyword :
2419
- case SyntaxKind . Identifier :
2420
- case SyntaxKind . NullKeyword :
2421
- case SyntaxKind . TrueKeyword :
2422
- case SyntaxKind . FalseKeyword :
2423
- case SyntaxKind . NumericLiteral :
2424
- case SyntaxKind . StringLiteral :
2425
- case SyntaxKind . ArrayLiteralExpression :
2426
- case SyntaxKind . ObjectLiteralExpression :
2427
- case SyntaxKind . FunctionExpression :
2428
- case SyntaxKind . ArrowFunction :
2429
- case SyntaxKind . ClassExpression :
2430
- case SyntaxKind . JsxElement :
2431
- case SyntaxKind . JsxSelfClosingElement :
2432
- case SyntaxKind . JsxFragment :
2433
- case SyntaxKind . RegularExpressionLiteral :
2434
- case SyntaxKind . NoSubstitutionTemplateLiteral :
2435
- case SyntaxKind . TemplateExpression :
2436
- case SyntaxKind . ParenthesizedExpression :
2437
- case SyntaxKind . OmittedExpression :
2438
- return 19 ;
2439
-
2440
- case SyntaxKind . TaggedTemplateExpression :
2441
- case SyntaxKind . PropertyAccessExpression :
2442
- case SyntaxKind . ElementAccessExpression :
2443
- return 18 ;
2444
-
2445
- case SyntaxKind . NewExpression :
2446
- return hasArguments ? 18 : 17 ;
2417
+ case SyntaxKind . CommaListExpression :
2418
+ return 0 ;
2447
2419
2448
- case SyntaxKind . CallExpression :
2449
- return 17 ;
2420
+ case SyntaxKind . SpreadElement :
2421
+ return 1 ;
2450
2422
2451
- case SyntaxKind . PostfixUnaryExpression :
2452
- return 16 ;
2423
+ case SyntaxKind . YieldExpression :
2424
+ return 2 ;
2453
2425
2454
- case SyntaxKind . PrefixUnaryExpression :
2455
- case SyntaxKind . TypeOfExpression :
2456
- case SyntaxKind . VoidExpression :
2457
- case SyntaxKind . DeleteExpression :
2458
- case SyntaxKind . AwaitExpression :
2459
- return 15 ;
2426
+ case SyntaxKind . ConditionalExpression :
2427
+ return 4 ;
2460
2428
2461
2429
case SyntaxKind . BinaryExpression :
2462
2430
switch ( operatorKind ) {
2463
- case SyntaxKind . ExclamationToken :
2464
- case SyntaxKind . TildeToken :
2465
- return 15 ;
2466
-
2467
- case SyntaxKind . AsteriskAsteriskToken :
2468
- case SyntaxKind . AsteriskToken :
2469
- case SyntaxKind . SlashToken :
2470
- case SyntaxKind . PercentToken :
2471
- return 14 ;
2472
-
2473
- case SyntaxKind . PlusToken :
2474
- case SyntaxKind . MinusToken :
2475
- return 13 ;
2476
-
2477
- case SyntaxKind . LessThanLessThanToken :
2478
- case SyntaxKind . GreaterThanGreaterThanToken :
2479
- case SyntaxKind . GreaterThanGreaterThanGreaterThanToken :
2480
- return 12 ;
2481
-
2482
- case SyntaxKind . LessThanToken :
2483
- case SyntaxKind . LessThanEqualsToken :
2484
- case SyntaxKind . GreaterThanToken :
2485
- case SyntaxKind . GreaterThanEqualsToken :
2486
- case SyntaxKind . InKeyword :
2487
- case SyntaxKind . InstanceOfKeyword :
2488
- return 11 ;
2489
-
2490
- case SyntaxKind . EqualsEqualsToken :
2491
- case SyntaxKind . EqualsEqualsEqualsToken :
2492
- case SyntaxKind . ExclamationEqualsToken :
2493
- case SyntaxKind . ExclamationEqualsEqualsToken :
2494
- return 10 ;
2495
-
2496
- case SyntaxKind . AmpersandToken :
2497
- return 9 ;
2498
-
2499
- case SyntaxKind . CaretToken :
2500
- return 8 ;
2501
-
2502
- case SyntaxKind . BarToken :
2503
- return 7 ;
2504
-
2505
- case SyntaxKind . AmpersandAmpersandToken :
2506
- return 6 ;
2507
-
2508
- case SyntaxKind . BarBarToken :
2509
- return 5 ;
2431
+ case SyntaxKind . CommaToken :
2432
+ return 0 ;
2510
2433
2511
2434
case SyntaxKind . EqualsToken :
2512
2435
case SyntaxKind . PlusEqualsToken :
@@ -2523,30 +2446,105 @@ namespace ts {
2523
2446
case SyntaxKind . BarEqualsToken :
2524
2447
return 3 ;
2525
2448
2526
- case SyntaxKind . CommaToken :
2527
- return 0 ;
2528
-
2529
2449
default :
2530
- return - 1 ;
2450
+ return getBinaryOperatorPrecedence ( operatorKind ) ;
2531
2451
}
2532
2452
2533
- case SyntaxKind . ConditionalExpression :
2534
- return 4 ;
2453
+ case SyntaxKind . PrefixUnaryExpression :
2454
+ case SyntaxKind . TypeOfExpression :
2455
+ case SyntaxKind . VoidExpression :
2456
+ case SyntaxKind . DeleteExpression :
2457
+ case SyntaxKind . AwaitExpression :
2458
+ return 16 ;
2535
2459
2536
- case SyntaxKind . YieldExpression :
2537
- return 2 ;
2460
+ case SyntaxKind . PostfixUnaryExpression :
2461
+ return 17 ;
2538
2462
2539
- case SyntaxKind . SpreadElement :
2540
- return 1 ;
2463
+ case SyntaxKind . CallExpression :
2464
+ return 18 ;
2541
2465
2542
- case SyntaxKind . CommaListExpression :
2543
- return 0 ;
2466
+ case SyntaxKind . NewExpression :
2467
+ return hasArguments ? 19 : 18 ;
2468
+
2469
+ case SyntaxKind . TaggedTemplateExpression :
2470
+ case SyntaxKind . PropertyAccessExpression :
2471
+ case SyntaxKind . ElementAccessExpression :
2472
+ return 19 ;
2473
+
2474
+ case SyntaxKind . ThisKeyword :
2475
+ case SyntaxKind . SuperKeyword :
2476
+ case SyntaxKind . Identifier :
2477
+ case SyntaxKind . NullKeyword :
2478
+ case SyntaxKind . TrueKeyword :
2479
+ case SyntaxKind . FalseKeyword :
2480
+ case SyntaxKind . NumericLiteral :
2481
+ case SyntaxKind . StringLiteral :
2482
+ case SyntaxKind . ArrayLiteralExpression :
2483
+ case SyntaxKind . ObjectLiteralExpression :
2484
+ case SyntaxKind . FunctionExpression :
2485
+ case SyntaxKind . ArrowFunction :
2486
+ case SyntaxKind . ClassExpression :
2487
+ case SyntaxKind . JsxElement :
2488
+ case SyntaxKind . JsxSelfClosingElement :
2489
+ case SyntaxKind . JsxFragment :
2490
+ case SyntaxKind . RegularExpressionLiteral :
2491
+ case SyntaxKind . NoSubstitutionTemplateLiteral :
2492
+ case SyntaxKind . TemplateExpression :
2493
+ case SyntaxKind . ParenthesizedExpression :
2494
+ case SyntaxKind . OmittedExpression :
2495
+ return 20 ;
2544
2496
2545
2497
default :
2546
2498
return - 1 ;
2547
2499
}
2548
2500
}
2549
2501
2502
+ /* @internal */
2503
+ export function getBinaryOperatorPrecedence ( kind : SyntaxKind ) : number {
2504
+ switch ( kind ) {
2505
+ case SyntaxKind . BarBarToken :
2506
+ return 5 ;
2507
+ case SyntaxKind . AmpersandAmpersandToken :
2508
+ return 6 ;
2509
+ case SyntaxKind . BarToken :
2510
+ return 7 ;
2511
+ case SyntaxKind . CaretToken :
2512
+ return 8 ;
2513
+ case SyntaxKind . AmpersandToken :
2514
+ return 9 ;
2515
+ case SyntaxKind . EqualsEqualsToken :
2516
+ case SyntaxKind . ExclamationEqualsToken :
2517
+ case SyntaxKind . EqualsEqualsEqualsToken :
2518
+ case SyntaxKind . ExclamationEqualsEqualsToken :
2519
+ return 10 ;
2520
+ case SyntaxKind . LessThanToken :
2521
+ case SyntaxKind . GreaterThanToken :
2522
+ case SyntaxKind . LessThanEqualsToken :
2523
+ case SyntaxKind . GreaterThanEqualsToken :
2524
+ case SyntaxKind . InstanceOfKeyword :
2525
+ case SyntaxKind . InKeyword :
2526
+ case SyntaxKind . AsKeyword :
2527
+ return 11 ;
2528
+ case SyntaxKind . LessThanLessThanToken :
2529
+ case SyntaxKind . GreaterThanGreaterThanToken :
2530
+ case SyntaxKind . GreaterThanGreaterThanGreaterThanToken :
2531
+ return 12 ;
2532
+ case SyntaxKind . PlusToken :
2533
+ case SyntaxKind . MinusToken :
2534
+ return 13 ;
2535
+ case SyntaxKind . AsteriskToken :
2536
+ case SyntaxKind . SlashToken :
2537
+ case SyntaxKind . PercentToken :
2538
+ return 14 ;
2539
+ case SyntaxKind . AsteriskAsteriskToken :
2540
+ return 15 ;
2541
+ }
2542
+
2543
+ // -1 is lower than all other precedences. Returning it will cause binary expression
2544
+ // parsing to stop.
2545
+ return - 1 ;
2546
+ }
2547
+
2550
2548
export function createDiagnosticCollection ( ) : DiagnosticCollection {
2551
2549
let nonFileDiagnostics = [ ] as SortedArray < Diagnostic > ;
2552
2550
const filesWithDiagnostics = [ ] as SortedArray < string > ;
0 commit comments