Skip to content

Commit 8974fea

Browse files
authored
fix(47062): support generic arrow function with default type parameter in tsx (microsoft#47112)
* fix(47062): support generic arrow function with default type parameter in tsx * test: update test "completionListIsGlobalCompletion"
1 parent 67872a5 commit 8974fea

7 files changed

+29
-2
lines changed

src/compiler/parser.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -4433,7 +4433,7 @@ namespace ts {
44334433
return true;
44344434
}
44354435
}
4436-
else if (third === SyntaxKind.CommaToken) {
4436+
else if (third === SyntaxKind.CommaToken || third === SyntaxKind.EqualsToken) {
44374437
return true;
44384438
}
44394439
return false;

tests/baselines/reference/tsxGenericArrowFunctionParsing.errors.txt

+3
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,7 @@ tests/cases/conformance/jsx/file.tsx(24,25): error TS1382: Unexpected token. Did
3636
!!! error TS1382: Unexpected token. Did you mean `{'>'}` or `>`?
3737
x5.isElement;
3838

39+
// This is a generic function
40+
var x6 = <T = string,>() => {};
41+
x6();
3942

tests/baselines/reference/tsxGenericArrowFunctionParsing.js

+6
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ x4.isElement;
2525
var x5 = <T extends>() => {}</T>;
2626
x5.isElement;
2727

28+
// This is a generic function
29+
var x6 = <T = string,>() => {};
30+
x6();
2831

2932

3033
//// [file.jsx]
@@ -44,3 +47,6 @@ x4.isElement;
4447
// This is an element
4548
var x5 = <T extends>() => </T>;
4649
x5.isElement;
50+
// This is a generic function
51+
var x6 = function () { };
52+
x6();

tests/baselines/reference/tsxGenericArrowFunctionParsing.symbols

+7
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,11 @@ x5.isElement;
6464
>x5 : Symbol(x5, Decl(file.tsx, 23, 3))
6565
>isElement : Symbol(JSX.Element.isElement, Decl(file.tsx, 1, 20))
6666

67+
// This is a generic function
68+
var x6 = <T = string,>() => {};
69+
>x6 : Symbol(x6, Decl(file.tsx, 27, 3))
70+
>T : Symbol(T, Decl(file.tsx, 27, 10))
71+
72+
x6();
73+
>x6 : Symbol(x6, Decl(file.tsx, 27, 3))
6774

tests/baselines/reference/tsxGenericArrowFunctionParsing.types

+8
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,12 @@ x5.isElement;
6666
>x5 : JSX.Element
6767
>isElement : any
6868

69+
// This is a generic function
70+
var x6 = <T = string,>() => {};
71+
>x6 : <T = string>() => void
72+
><T = string,>() => {} : <T = string>() => void
73+
74+
x6();
75+
>x6() : void
76+
>x6 : <T = string>() => void
6977

tests/cases/conformance/jsx/tsxGenericArrowFunctionParsing.tsx

+3
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,6 @@ x4.isElement;
2626
var x5 = <T extends>() => {}</T>;
2727
x5.isElement;
2828

29+
// This is a generic function
30+
var x6 = <T = string,>() => {};
31+
x6();

tests/cases/fourslash/completionListIsGlobalCompletion.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ verify.completions(
4747
{ marker: "7", exact: completion.globalsInsideFunction(x), isGlobalCompletion: true },
4848
{ marker: "9", exact: ["x", "y"], isGlobalCompletion: false },
4949
{ marker: "10", exact: completion.classElementKeywords, isGlobalCompletion: false, isNewIdentifierLocation: true },
50-
{ marker: "13", exact: globals.filter(name => name !== 'z'), isGlobalCompletion: false },
50+
{ marker: "13", exact: globals, isGlobalCompletion: false },
5151
{ marker: "15", exact: globals.filter(name => name !== 'x'), isGlobalCompletion: true, isNewIdentifierLocation: true },
5252
{ marker: "16", unsorted: [...x, completion.globalThisEntry, ...completion.globalsVars, completion.undefinedVarEntry].filter(name => name !== 'user'), isGlobalCompletion: false },
5353
{ marker: "17", exact: completion.globalKeywords, isGlobalCompletion: false },

0 commit comments

Comments
 (0)