From ded62d35394a096baac7d7e4ce5f246e8f4fdc75 Mon Sep 17 00:00:00 2001 From: Sam Zhou Date: Mon, 30 Sep 2024 19:08:24 -0700 Subject: [PATCH] Allow trailing comma after rest param for component types Summary: Similar to D63488906, this diff does the same for component types. Changelog: [parser] Trailing comma is now allowed after rest parameter in component type. Reviewed By: alexmckenley Differential Revision: D63661834 fbshipit-source-id: 5a1b80d186316bd24521a2fe79024171c1c41973 --- .../flow/components/component_type_params.js | 2 + .../component_type_params.tree.json | 47 ++++++++++++++++++- lib/Parser/JSParserImpl-flow.cpp | 2 + 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/external/flowtest/test/flow/components/component_type_params.js b/external/flowtest/test/flow/components/component_type_params.js index a502bea5766..53ec77bf6d5 100644 --- a/external/flowtest/test/flow/components/component_type_params.js +++ b/external/flowtest/test/flow/components/component_type_params.js @@ -1,3 +1,5 @@ type Comp1 = component(p1: Tp1, 'p2': Tp2); type Comp2 = component(...Rest); + +type Comp3 = component(...Rest,); diff --git a/external/flowtest/test/flow/components/component_type_params.tree.json b/external/flowtest/test/flow/components/component_type_params.tree.json index 670612b6717..ccd19432792 100644 --- a/external/flowtest/test/flow/components/component_type_params.tree.json +++ b/external/flowtest/test/flow/components/component_type_params.tree.json @@ -1,7 +1,7 @@ { "type":"Program", - "loc":{"source":null,"start":{"line":1,"column":0},"end":{"line":3,"column":32}}, - "range":[0,77], + "loc":{"source":null,"start":{"line":1,"column":0},"end":{"line":5,"column":33}}, + "range":[0,112], "body":[ { "type":"TypeAlias", @@ -124,6 +124,49 @@ "rendersType":null, "typeParameters":null } + }, + { + "type":"TypeAlias", + "loc":{"source":null,"start":{"line":5,"column":0},"end":{"line":5,"column":33}}, + "range":[79,112], + "id":{ + "type":"Identifier", + "loc":{"source":null,"start":{"line":5,"column":5},"end":{"line":5,"column":10}}, + "range":[84,89], + "name":"Comp3", + "typeAnnotation":null, + "optional":false + }, + "typeParameters":null, + "right":{ + "type":"ComponentTypeAnnotation", + "loc":{"source":null,"start":{"line":5,"column":13},"end":{"line":5,"column":32}}, + "range":[92,111], + "params":[], + "rest":{ + "type":"ComponentTypeParameter", + "loc":{"source":null,"start":{"line":5,"column":23},"end":{"line":5,"column":31}}, + "range":[102,110], + "name":null, + "typeAnnotation":{ + "type":"GenericTypeAnnotation", + "loc":{"source":null,"start":{"line":5,"column":26},"end":{"line":5,"column":30}}, + "range":[105,109], + "id":{ + "type":"Identifier", + "loc":{"source":null,"start":{"line":5,"column":26},"end":{"line":5,"column":30}}, + "range":[105,109], + "name":"Rest", + "typeAnnotation":null, + "optional":false + }, + "typeParameters":null + }, + "optional":false + }, + "rendersType":null, + "typeParameters":null + } } ], "comments":[] diff --git a/lib/Parser/JSParserImpl-flow.cpp b/lib/Parser/JSParserImpl-flow.cpp index 18ffee07c71..7e2e02722d1 100644 --- a/lib/Parser/JSParserImpl-flow.cpp +++ b/lib/Parser/JSParserImpl-flow.cpp @@ -618,6 +618,8 @@ Optional JSParserImpl::parseComponentTypeRestParameterFlow( typeAnnotation = *optLeft; } + checkAndEat(TokenKind::comma, JSLexer::GrammarContext::Type); + return setLocation( start, getPrevTokenEndLoc(),