Skip to content

Commit

Permalink
Support flow function type annotation with no parent (#14014)
Browse files Browse the repository at this point in the history
  • Loading branch information
krosenberg committed Dec 3, 2021
1 parent f4236f4 commit 4079ee5
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 4 deletions.
9 changes: 5 additions & 4 deletions packages/babel-generator/src/generators/flow.ts
Expand Up @@ -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("(");
Expand Down Expand Up @@ -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 {
Expand Down
11 changes: 11 additions & 0 deletions packages/babel-generator/test/index.js
Expand Up @@ -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(
Expand Down

0 comments on commit 4079ee5

Please sign in to comment.