Support flow function type annotation with no parent (#14014)

This commit is contained in:
Kyle Rosenberg 2021-12-02 19:16:19 -06:00 committed by GitHub
parent f4236f43a1
commit 4079ee519f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 4 deletions

View File

@ -290,7 +290,7 @@ export function ExistsTypeAnnotation(this: Printer) {
export function FunctionTypeAnnotation(
this: Printer,
node: t.FunctionTypeAnnotation,
parent: any,
parent: t.Node | void,
) {
this.print(node.typeParameters, node);
this.token("(");
@ -321,9 +321,10 @@ export function FunctionTypeAnnotation(
// this node type is overloaded, not sure why but it makes it EXTREMELY annoying
if (
parent.type === "ObjectTypeCallProperty" ||
parent.type === "DeclareFunction" ||
(parent.type === "ObjectTypeProperty" && parent.method)
parent &&
(parent.type === "ObjectTypeCallProperty" ||
parent.type === "DeclareFunction" ||
(parent.type === "ObjectTypeProperty" && parent.method))
) {
this.token(":");
} else {

View File

@ -497,6 +497,17 @@ describe("programmatic generation", function () {
expect(output).toBe("interface A {}");
});
it("flow function type annotation with no parent", () => {
const functionTypeAnnotation = t.functionTypeAnnotation(
null,
[],
null,
t.voidTypeAnnotation(),
);
const output = generate(functionTypeAnnotation).code;
expect(output).toBe("() => void");
});
describe("directives", function () {
it("preserves escapes", function () {
const directive = t.directive(