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(),