parser: Fix testing for missing list (#25411)

* parser: Fix testing for missing list

* Fix return type
This commit is contained in:
Andy 2018-07-03 12:37:20 -07:00 committed by GitHub
parent cb4cb7a75f
commit 76a4694bd4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 35 additions and 4 deletions

View file

@ -2090,8 +2090,18 @@ namespace ts {
return result;
}
function createMissingList<T extends Node>(): NodeArray<T> {
return createNodeArray<T>([], getNodePos());
interface MissingList<T extends Node> extends NodeArray<T> {
isMissingList: true;
}
function createMissingList<T extends Node>(): MissingList<T> {
const list = createNodeArray<T>([], getNodePos()) as MissingList<T>;
list.isMissingList = true;
return list;
}
function isMissingList(arr: NodeArray<Node>): boolean {
return !!(arr as MissingList<Node>).isMissingList;
}
function parseBracketedList<T extends Node>(kind: ParsingContext, parseElement: () => T, open: SyntaxKind, close: SyntaxKind): NodeArray<T> {
@ -2260,8 +2270,7 @@ namespace ts {
case SyntaxKind.FunctionType:
case SyntaxKind.ConstructorType: {
const { parameters, type } = node as FunctionOrConstructorTypeNode;
// parameters.pos === parameters.end only if we used parseMissingList, else should contain at least `()`
return parameters.pos === parameters.end || typeHasArrowFunctionBlockingParseError(type);
return isMissingList(parameters) || typeHasArrowFunctionBlockingParseError(type);
}
case SyntaxKind.ParenthesizedType:
return typeHasArrowFunctionBlockingParseError((node as ParenthesizedTypeNode).type);

View file

@ -0,0 +1,6 @@
//// [parseArrowFunctionWithFunctionReturnType.ts]
const fn = <T>(): (() => T) => null as any;
//// [parseArrowFunctionWithFunctionReturnType.js]
var fn = function () { return null; };

View file

@ -0,0 +1,6 @@
=== tests/cases/compiler/parseArrowFunctionWithFunctionReturnType.ts ===
const fn = <T>(): (() => T) => null as any;
>fn : Symbol(fn, Decl(parseArrowFunctionWithFunctionReturnType.ts, 0, 5))
>T : Symbol(T, Decl(parseArrowFunctionWithFunctionReturnType.ts, 0, 12))
>T : Symbol(T, Decl(parseArrowFunctionWithFunctionReturnType.ts, 0, 12))

View file

@ -0,0 +1,9 @@
=== tests/cases/compiler/parseArrowFunctionWithFunctionReturnType.ts ===
const fn = <T>(): (() => T) => null as any;
>fn : <T>() => () => T
><T>(): (() => T) => null as any : <T>() => () => T
>T : T
>T : T
>null as any : any
>null : null

View file

@ -0,0 +1 @@
const fn = <T>(): (() => T) => null as any;