From ebe9ee29b0db4aa3dd86a19ece2dca0d7404f217 Mon Sep 17 00:00:00 2001 From: poteboy Date: Wed, 31 Jul 2024 23:36:14 +0900 Subject: [PATCH 1/2] feat: Fix parsing of generic type parameters in arrow functions with JSX syntax --- src/compiler/parser.ts | 9 +++++++++ .../reference/jsxGenericArrowFunction.symbols | 10 ++++++++++ .../reference/jsxGenericArrowFunction.types | 13 +++++++++++++ tests/cases/compiler/jsxGenericArrowFunction.tsx | 5 +++++ 4 files changed, 37 insertions(+) create mode 100644 tests/baselines/reference/jsxGenericArrowFunction.symbols create mode 100644 tests/baselines/reference/jsxGenericArrowFunction.types create mode 100644 tests/cases/compiler/jsxGenericArrowFunction.tsx diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index b20d4b8b8b52e..09ee76a8e9258 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -5352,6 +5352,15 @@ namespace Parser { return Tristate.True; } + const isNextTokenGreater = lookAhead(function () { + var third = nextToken(); + return third === SyntaxKind.GreaterThanToken; + }); + + if (isNextTokenGreater) { + return Tristate.Unknown; + } + return Tristate.False; } diff --git a/tests/baselines/reference/jsxGenericArrowFunction.symbols b/tests/baselines/reference/jsxGenericArrowFunction.symbols new file mode 100644 index 0000000000000..f24a510b4be75 --- /dev/null +++ b/tests/baselines/reference/jsxGenericArrowFunction.symbols @@ -0,0 +1,10 @@ +//// [tests/cases/compiler/jsxGenericArrowFunction.tsx] //// + +=== jsxGenericArrowFunction.tsx === +const a = (b: T) => b +>a : Symbol(a, Decl(jsxGenericArrowFunction.tsx, 0, 5)) +>T : Symbol(T, Decl(jsxGenericArrowFunction.tsx, 0, 11)) +>b : Symbol(b, Decl(jsxGenericArrowFunction.tsx, 0, 14)) +>T : Symbol(T, Decl(jsxGenericArrowFunction.tsx, 0, 11)) +>b : Symbol(b, Decl(jsxGenericArrowFunction.tsx, 0, 14)) + diff --git a/tests/baselines/reference/jsxGenericArrowFunction.types b/tests/baselines/reference/jsxGenericArrowFunction.types new file mode 100644 index 0000000000000..507ba00c7dc7b --- /dev/null +++ b/tests/baselines/reference/jsxGenericArrowFunction.types @@ -0,0 +1,13 @@ +//// [tests/cases/compiler/jsxGenericArrowFunction.tsx] //// + +=== jsxGenericArrowFunction.tsx === +const a = (b: T) => b +>a : (b: T) => T +> : ^ ^^ ^^ ^^^^^^ +>(b: T) => b : (b: T) => T +> : ^ ^^ ^^ ^^^^^^ +>b : T +> : ^ +>b : T +> : ^ + diff --git a/tests/cases/compiler/jsxGenericArrowFunction.tsx b/tests/cases/compiler/jsxGenericArrowFunction.tsx new file mode 100644 index 0000000000000..0ac51630b5995 --- /dev/null +++ b/tests/cases/compiler/jsxGenericArrowFunction.tsx @@ -0,0 +1,5 @@ +// @strict: true +// @noEmit: true +// @jsx: preserve + +const a = (b: T) => b \ No newline at end of file From c6057c0b97bf16572fd371dbead00676dc9685df Mon Sep 17 00:00:00 2001 From: poteboy Date: Wed, 31 Jul 2024 23:53:45 +0900 Subject: [PATCH 2/2] chore: Run lint --- src/compiler/parser.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 09ee76a8e9258..a7bddf7ef93ec 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -5352,8 +5352,8 @@ namespace Parser { return Tristate.True; } - const isNextTokenGreater = lookAhead(function () { - var third = nextToken(); + const isNextTokenGreater = lookAhead(() => { + const third = nextToken(); return third === SyntaxKind.GreaterThanToken; });