@@ -2414,99 +2414,22 @@ namespace ts {
24142414
24152415 export function getOperatorPrecedence ( nodeKind : SyntaxKind , operatorKind : SyntaxKind , hasArguments ?: boolean ) {
24162416 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 ;
24472419
2448- case SyntaxKind . CallExpression :
2449- return 17 ;
2420+ case SyntaxKind . SpreadElement :
2421+ return 1 ;
24502422
2451- case SyntaxKind . PostfixUnaryExpression :
2452- return 16 ;
2423+ case SyntaxKind . YieldExpression :
2424+ return 2 ;
24532425
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 ;
24602428
24612429 case SyntaxKind . BinaryExpression :
24622430 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 ;
25102433
25112434 case SyntaxKind . EqualsToken :
25122435 case SyntaxKind . PlusEqualsToken :
@@ -2523,30 +2446,105 @@ namespace ts {
25232446 case SyntaxKind . BarEqualsToken :
25242447 return 3 ;
25252448
2526- case SyntaxKind . CommaToken :
2527- return 0 ;
2528-
25292449 default :
2530- return - 1 ;
2450+ return getBinaryOperatorPrecedence ( operatorKind ) ;
25312451 }
25322452
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 ;
25352459
2536- case SyntaxKind . YieldExpression :
2537- return 2 ;
2460+ case SyntaxKind . PostfixUnaryExpression :
2461+ return 17 ;
25382462
2539- case SyntaxKind . SpreadElement :
2540- return 1 ;
2463+ case SyntaxKind . CallExpression :
2464+ return 18 ;
25412465
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 ;
25442496
25452497 default :
25462498 return - 1 ;
25472499 }
25482500 }
25492501
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+
25502548 export function createDiagnosticCollection ( ) : DiagnosticCollection {
25512549 let nonFileDiagnostics = [ ] as SortedArray < Diagnostic > ;
25522550 const filesWithDiagnostics = [ ] as SortedArray < string > ;
0 commit comments