Allow trailing comma after rest parameter in TSDeclareFunction (#13101)

* fix(ts): allow trailing comma after rest parameter in `TSDeclareFunction`

* Apply code review changes

Co-Authored-By: Nicolò Ribaudo <7000710+nicolo-ribaudo@users.noreply.github.com>
This commit is contained in:
Federico Ciardi 2021-04-06 18:36:17 +02:00 committed by GitHub
parent 6b57145d38
commit 42e630e8a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 61 additions and 0 deletions

View File

@ -2789,6 +2789,18 @@ export default (superClass: Class<Parser>): Class<Parser> =>
return super.parseMaybeDecoratorArguments(expr); return super.parseMaybeDecoratorArguments(expr);
} }
checkCommaAfterRest(close) {
if (
this.state.isDeclareContext &&
this.match(tt.comma) &&
this.lookaheadCharCode() === close
) {
this.next();
} else {
super.checkCommaAfterRest(close);
}
}
// === === === === === === === === === === === === === === === === // === === === === === === === === === === === === === === === ===
// Note: All below methods are duplicates of something in flow.js. // Note: All below methods are duplicates of something in flow.js.
// Not sure what the best way to combine these is. // Not sure what the best way to combine these is.

View File

@ -0,0 +1 @@
declare function foo(...args: any[], )

View File

@ -0,0 +1,48 @@
{
"type": "File",
"start":0,"end":38,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":38}},
"program": {
"type": "Program",
"start":0,"end":38,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":38}},
"sourceType": "module",
"interpreter": null,
"body": [
{
"type": "TSDeclareFunction",
"start":0,"end":38,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":38}},
"declare": true,
"id": {
"type": "Identifier",
"start":17,"end":20,"loc":{"start":{"line":1,"column":17},"end":{"line":1,"column":20},"identifierName":"foo"},
"name": "foo"
},
"generator": false,
"async": false,
"params": [
{
"type": "RestElement",
"start":21,"end":35,"loc":{"start":{"line":1,"column":21},"end":{"line":1,"column":35}},
"argument": {
"type": "Identifier",
"start":24,"end":28,"loc":{"start":{"line":1,"column":24},"end":{"line":1,"column":28},"identifierName":"args"},
"name": "args"
},
"typeAnnotation": {
"type": "TSTypeAnnotation",
"start":28,"end":35,"loc":{"start":{"line":1,"column":28},"end":{"line":1,"column":35}},
"typeAnnotation": {
"type": "TSArrayType",
"start":30,"end":35,"loc":{"start":{"line":1,"column":30},"end":{"line":1,"column":35}},
"elementType": {
"type": "TSAnyKeyword",
"start":30,"end":33,"loc":{"start":{"line":1,"column":30},"end":{"line":1,"column":33}}
}
}
}
}
]
}
],
"directives": []
}
}