Skip to content

Commit 78444bb

Browse files
committed
improve test case
1 parent 268dbfe commit 78444bb

8 files changed

+46
-13
lines changed

src/compiler/parser.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,8 +1093,8 @@ namespace ts {
10931093
return currentToken = scanner.reScanTemplateToken();
10941094
}
10951095

1096-
function reScanLessThanToken(): SyntaxKind {
1097-
return currentToken = scanner.reScanLessThanToken();
1096+
function reScanLesserToken(): SyntaxKind {
1097+
return currentToken = scanner.reScanLesserToken();
10981098
}
10991099

11001100
function scanJsxIdentifier(): SyntaxKind {
@@ -2267,7 +2267,7 @@ namespace ts {
22672267
function parseTypeReference(): TypeReferenceNode {
22682268
const node = <TypeReferenceNode>createNode(SyntaxKind.TypeReference);
22692269
node.typeName = parseEntityName(/*allowReservedWords*/ true, Diagnostics.Type_expected);
2270-
if (!scanner.hasPrecedingLineBreak() && reScanLessThanToken() === SyntaxKind.LessThanToken) {
2270+
if (!scanner.hasPrecedingLineBreak() && reScanLesserToken() === SyntaxKind.LessThanToken) {
22712271
node.typeArguments = parseBracketedList(ParsingContext.TypeArguments, parseType, SyntaxKind.LessThanToken, SyntaxKind.GreaterThanToken);
22722272
}
22732273
return finishNode(node);
@@ -4506,7 +4506,8 @@ namespace ts {
45064506
function parseCallExpressionRest(expression: LeftHandSideExpression): LeftHandSideExpression {
45074507
while (true) {
45084508
expression = parseMemberExpressionRest(expression);
4509-
if (token() === SyntaxKind.LessThanToken) {
4509+
// handle 'foo<<T>()'
4510+
if (token() === SyntaxKind.LessThanToken || token() === SyntaxKind.LessThanLessThanToken) {
45104511
// See if this is the start of a generic invocation. If so, consume it and
45114512
// keep checking for postfix expressions. Otherwise, it's just a '<' that's
45124513
// part of an arithmetic expression. Break out so we consume it higher in the
@@ -4548,9 +4549,10 @@ namespace ts {
45484549
}
45494550

45504551
function parseTypeArgumentsInExpression() {
4551-
if (!parseOptional(SyntaxKind.LessThanToken)) {
4552+
if (reScanLesserToken() !== SyntaxKind.LessThanToken) {
45524553
return undefined;
45534554
}
4555+
nextToken();
45544556

45554557
const typeArguments = parseDelimitedList(ParsingContext.TypeArguments, parseType);
45564558
if (!parseExpected(SyntaxKind.GreaterThanToken)) {

src/compiler/scanner.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ namespace ts {
3131
scanJsxIdentifier(): SyntaxKind;
3232
scanJsxAttributeValue(): SyntaxKind;
3333
reScanJsxToken(): JsxTokenSyntaxKind;
34-
reScanLessThanToken(): SyntaxKind;
34+
reScanLesserToken(): SyntaxKind;
3535
scanJsxToken(): JsxTokenSyntaxKind;
3636
scanJSDocToken(): JsDocSyntaxKind;
3737
scan(): SyntaxKind;
@@ -846,7 +846,7 @@ namespace ts {
846846
scanJsxIdentifier,
847847
scanJsxAttributeValue,
848848
reScanJsxToken,
849-
reScanLessThanToken,
849+
reScanLesserToken,
850850
scanJsxToken,
851851
scanJSDocToken,
852852
scan,
@@ -1842,7 +1842,7 @@ namespace ts {
18421842
return token = scanJsxToken();
18431843
}
18441844

1845-
function reScanLessThanToken(): SyntaxKind {
1845+
function reScanLesserToken(): SyntaxKind {
18461846
if (token === SyntaxKind.LessThanLessThanToken) {
18471847
pos = tokenPos + 1;
18481848
return token = SyntaxKind.LessThanToken;

tests/baselines/reference/api/tsserverlibrary.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3071,7 +3071,7 @@ declare namespace ts {
30713071
scanJsxIdentifier(): SyntaxKind;
30723072
scanJsxAttributeValue(): SyntaxKind;
30733073
reScanJsxToken(): JsxTokenSyntaxKind;
3074-
reScanLessThanToken(): SyntaxKind;
3074+
reScanLesserToken(): SyntaxKind;
30753075
scanJsxToken(): JsxTokenSyntaxKind;
30763076
scanJSDocToken(): JsDocSyntaxKind;
30773077
scan(): SyntaxKind;

tests/baselines/reference/api/typescript.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3071,7 +3071,7 @@ declare namespace ts {
30713071
scanJsxIdentifier(): SyntaxKind;
30723072
scanJsxAttributeValue(): SyntaxKind;
30733073
reScanJsxToken(): JsxTokenSyntaxKind;
3074-
reScanLessThanToken(): SyntaxKind;
3074+
reScanLesserToken(): SyntaxKind;
30753075
scanJsxToken(): JsxTokenSyntaxKind;
30763076
scanJSDocToken(): JsDocSyntaxKind;
30773077
scan(): SyntaxKind;
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
//// [parseGenericArrowRatherThanLeftShift.ts]
22
type Bar = ReturnType<<T>(x: T) => number>;
3-
43
declare const a: Bar;
4+
5+
function foo<T>(_x: T) {}
6+
const b = foo<<T>(x: T) => number>(() => 1);
57

68

79
//// [parseGenericArrowRatherThanLeftShift.js]
10+
function foo(_x) { }
11+
var b = foo(function () { return 1; });

tests/baselines/reference/parseGenericArrowRatherThanLeftShift.symbols

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,19 @@ type Bar = ReturnType<<T>(x: T) => number>;
77
>T : Symbol(T, Decl(parseGenericArrowRatherThanLeftShift.ts, 0, 23))
88

99
declare const a: Bar;
10-
>a : Symbol(a, Decl(parseGenericArrowRatherThanLeftShift.ts, 2, 13))
10+
>a : Symbol(a, Decl(parseGenericArrowRatherThanLeftShift.ts, 1, 13))
1111
>Bar : Symbol(Bar, Decl(parseGenericArrowRatherThanLeftShift.ts, 0, 0))
1212

13+
function foo<T>(_x: T) {}
14+
>foo : Symbol(foo, Decl(parseGenericArrowRatherThanLeftShift.ts, 1, 21))
15+
>T : Symbol(T, Decl(parseGenericArrowRatherThanLeftShift.ts, 3, 13))
16+
>_x : Symbol(_x, Decl(parseGenericArrowRatherThanLeftShift.ts, 3, 16))
17+
>T : Symbol(T, Decl(parseGenericArrowRatherThanLeftShift.ts, 3, 13))
18+
19+
const b = foo<<T>(x: T) => number>(() => 1);
20+
>b : Symbol(b, Decl(parseGenericArrowRatherThanLeftShift.ts, 4, 5))
21+
>foo : Symbol(foo, Decl(parseGenericArrowRatherThanLeftShift.ts, 1, 21))
22+
>T : Symbol(T, Decl(parseGenericArrowRatherThanLeftShift.ts, 4, 15))
23+
>x : Symbol(x, Decl(parseGenericArrowRatherThanLeftShift.ts, 4, 18))
24+
>T : Symbol(T, Decl(parseGenericArrowRatherThanLeftShift.ts, 4, 15))
25+

tests/baselines/reference/parseGenericArrowRatherThanLeftShift.types

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,15 @@ type Bar = ReturnType<<T>(x: T) => number>;
66
declare const a: Bar;
77
>a : number
88

9+
function foo<T>(_x: T) {}
10+
>foo : <T>(_x: T) => void
11+
>_x : T
12+
13+
const b = foo<<T>(x: T) => number>(() => 1);
14+
>b : void
15+
>foo<<T>(x: T) => number>(() => 1) : void
16+
>foo : <T>(_x: T) => void
17+
>x : T
18+
>() => 1 : () => number
19+
>1 : 1
20+
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
type Bar = ReturnType<<T>(x: T) => number>;
2-
32
declare const a: Bar;
3+
4+
function foo<T>(_x: T) {}
5+
const b = foo<<T>(x: T) => number>(() => 1);

0 commit comments

Comments
 (0)