From 8974fead2d086224aac2c507d65be6ce84aa659d Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 15 Dec 2021 02:02:36 +0900 Subject: [PATCH] fix(47062): support generic arrow function with default type parameter in tsx (#47112) * fix(47062): support generic arrow function with default type parameter in tsx * test: update test "completionListIsGlobalCompletion" --- src/compiler/parser.ts | 2 +- .../reference/tsxGenericArrowFunctionParsing.errors.txt | 3 +++ .../baselines/reference/tsxGenericArrowFunctionParsing.js | 6 ++++++ .../reference/tsxGenericArrowFunctionParsing.symbols | 7 +++++++ .../reference/tsxGenericArrowFunctionParsing.types | 8 ++++++++ .../conformance/jsx/tsxGenericArrowFunctionParsing.tsx | 3 +++ tests/cases/fourslash/completionListIsGlobalCompletion.ts | 2 +- 7 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index a7774937f9d..420ae33d0b5 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -4433,7 +4433,7 @@ namespace ts { return true; } } - else if (third === SyntaxKind.CommaToken) { + else if (third === SyntaxKind.CommaToken || third === SyntaxKind.EqualsToken) { return true; } return false; diff --git a/tests/baselines/reference/tsxGenericArrowFunctionParsing.errors.txt b/tests/baselines/reference/tsxGenericArrowFunctionParsing.errors.txt index 9fa30916433..a85eb6b5509 100644 --- a/tests/baselines/reference/tsxGenericArrowFunctionParsing.errors.txt +++ b/tests/baselines/reference/tsxGenericArrowFunctionParsing.errors.txt @@ -36,4 +36,7 @@ tests/cases/conformance/jsx/file.tsx(24,25): error TS1382: Unexpected token. Did !!! error TS1382: Unexpected token. Did you mean `{'>'}` or `>`? x5.isElement; + // This is a generic function + var x6 = () => {}; + x6(); \ No newline at end of file diff --git a/tests/baselines/reference/tsxGenericArrowFunctionParsing.js b/tests/baselines/reference/tsxGenericArrowFunctionParsing.js index 7dbb2477db5..fd4fbd78703 100644 --- a/tests/baselines/reference/tsxGenericArrowFunctionParsing.js +++ b/tests/baselines/reference/tsxGenericArrowFunctionParsing.js @@ -25,6 +25,9 @@ x4.isElement; var x5 = () => {}; x5.isElement; +// This is a generic function +var x6 = () => {}; +x6(); //// [file.jsx] @@ -44,3 +47,6 @@ x4.isElement; // This is an element var x5 = () => ; x5.isElement; +// This is a generic function +var x6 = function () { }; +x6(); diff --git a/tests/baselines/reference/tsxGenericArrowFunctionParsing.symbols b/tests/baselines/reference/tsxGenericArrowFunctionParsing.symbols index 8b773c3b5ab..642af3c7718 100644 --- a/tests/baselines/reference/tsxGenericArrowFunctionParsing.symbols +++ b/tests/baselines/reference/tsxGenericArrowFunctionParsing.symbols @@ -64,4 +64,11 @@ x5.isElement; >x5 : Symbol(x5, Decl(file.tsx, 23, 3)) >isElement : Symbol(JSX.Element.isElement, Decl(file.tsx, 1, 20)) +// This is a generic function +var x6 = () => {}; +>x6 : Symbol(x6, Decl(file.tsx, 27, 3)) +>T : Symbol(T, Decl(file.tsx, 27, 10)) + +x6(); +>x6 : Symbol(x6, Decl(file.tsx, 27, 3)) diff --git a/tests/baselines/reference/tsxGenericArrowFunctionParsing.types b/tests/baselines/reference/tsxGenericArrowFunctionParsing.types index 5f0e67191a0..23ecda620db 100644 --- a/tests/baselines/reference/tsxGenericArrowFunctionParsing.types +++ b/tests/baselines/reference/tsxGenericArrowFunctionParsing.types @@ -66,4 +66,12 @@ x5.isElement; >x5 : JSX.Element >isElement : any +// This is a generic function +var x6 = () => {}; +>x6 : () => void +>() => {} : () => void + +x6(); +>x6() : void +>x6 : () => void diff --git a/tests/cases/conformance/jsx/tsxGenericArrowFunctionParsing.tsx b/tests/cases/conformance/jsx/tsxGenericArrowFunctionParsing.tsx index deb7ba57b5d..a2be92ebeb9 100644 --- a/tests/cases/conformance/jsx/tsxGenericArrowFunctionParsing.tsx +++ b/tests/cases/conformance/jsx/tsxGenericArrowFunctionParsing.tsx @@ -26,3 +26,6 @@ x4.isElement; var x5 = () => {}; x5.isElement; +// This is a generic function +var x6 = () => {}; +x6(); diff --git a/tests/cases/fourslash/completionListIsGlobalCompletion.ts b/tests/cases/fourslash/completionListIsGlobalCompletion.ts index b386f179831..c72d13d002e 100644 --- a/tests/cases/fourslash/completionListIsGlobalCompletion.ts +++ b/tests/cases/fourslash/completionListIsGlobalCompletion.ts @@ -47,7 +47,7 @@ verify.completions( { marker: "7", exact: completion.globalsInsideFunction(x), isGlobalCompletion: true }, { marker: "9", exact: ["x", "y"], isGlobalCompletion: false }, { marker: "10", exact: completion.classElementKeywords, isGlobalCompletion: false, isNewIdentifierLocation: true }, - { marker: "13", exact: globals.filter(name => name !== 'z'), isGlobalCompletion: false }, + { marker: "13", exact: globals, isGlobalCompletion: false }, { marker: "15", exact: globals.filter(name => name !== 'x'), isGlobalCompletion: true, isNewIdentifierLocation: true }, { marker: "16", unsorted: [...x, completion.globalThisEntry, ...completion.globalsVars, completion.undefinedVarEntry].filter(name => name !== 'user'), isGlobalCompletion: false }, { marker: "17", exact: completion.globalKeywords, isGlobalCompletion: false },