diff --git a/packages/babel-generator/src/generators/types.js b/packages/babel-generator/src/generators/types.js index fdd090dd4113..4b86d8ea442c 100644 --- a/packages/babel-generator/src/generators/types.js +++ b/packages/babel-generator/src/generators/types.js @@ -156,6 +156,10 @@ export function BigIntLiteral(node: Object) { this.token(node.value); } +export function PipelineBody(node: Object) { + this.print(node.body, node); +} + export function PipelineTopicExpression(node: Object) { this.print(node.expression, node); } diff --git a/packages/babel-plugin-proposal-pipeline-operator/test/fixtures/fsharp/arrow-functions-parenless/exec.js b/packages/babel-plugin-proposal-pipeline-operator/test/fixtures/fsharp/arrow-functions-parenless/exec.js index 7589e2fbe3c3..1ff62e57a0bb 100644 --- a/packages/babel-plugin-proposal-pipeline-operator/test/fixtures/fsharp/arrow-functions-parenless/exec.js +++ b/packages/babel-plugin-proposal-pipeline-operator/test/fixtures/fsharp/arrow-functions-parenless/exec.js @@ -1,6 +1,7 @@ const y = 2; -const f = (x) => x - |> (y) => y + 1 +// parenthised until parser is fixed +const f = (x) => (x + |> (y) => y + 1) |> (z) => z * y const g = (x) => x @@ -10,8 +11,6 @@ const g = (x) => x } ) -// bug: scope for the pipelinebody (???) does not consider the third y as a reference to the first - const h = (x) => x |> (y => ( y + 1 @@ -27,4 +26,4 @@ const i = (x) => x expect(f(1)).toBe(4); expect(g(1)).toBe(2); expect(h(1)).toBe(2); -// expect(i(1)).toBe(2); +expect(i(1)).toBe(2); diff --git a/packages/babel-types/src/asserts/generated/index.js b/packages/babel-types/src/asserts/generated/index.js index 3a4e81d34700..b38b118194ed 100644 --- a/packages/babel-types/src/asserts/generated/index.js +++ b/packages/babel-types/src/asserts/generated/index.js @@ -702,6 +702,9 @@ export function assertPipelinePrimaryTopicReference( ): void { assert("PipelinePrimaryTopicReference", node, opts); } +export function assertPipelineBody(node: Object, opts?: Object = {}): void { + assert("PipelineBody", node, opts); +} export function assertOptionalCallExpression( node: Object, opts?: Object = {}, diff --git a/packages/babel-types/src/builders/generated/index.js b/packages/babel-types/src/builders/generated/index.js index e4ca375762cc..82a16a2adb5c 100644 --- a/packages/babel-types/src/builders/generated/index.js +++ b/packages/babel-types/src/builders/generated/index.js @@ -632,6 +632,10 @@ export function PipelinePrimaryTopicReference(...args: Array): Object { return builder("PipelinePrimaryTopicReference", ...args); } export { PipelinePrimaryTopicReference as pipelinePrimaryTopicReference }; +export function PipelineBody(...args: Array): Object { + return builder("PipelineBody", ...args); +} +export { PipelineBody as pipelineBody }; export function OptionalCallExpression(...args: Array): Object { return builder("OptionalCallExpression", ...args); } diff --git a/packages/babel-types/src/definitions/experimental.js b/packages/babel-types/src/definitions/experimental.js index ed088af74bd6..b91ec7451595 100644 --- a/packages/babel-types/src/definitions/experimental.js +++ b/packages/babel-types/src/definitions/experimental.js @@ -115,6 +115,10 @@ defineType("PipelinePrimaryTopicReference", { aliases: ["Expression"], }); +defineType("PipelineBody", { + visitor: ["body"], +}); + defineType("OptionalCallExpression", { visitor: ["callee", "arguments", "typeParameters", "typeArguments"], builder: ["callee", "arguments", "optional"], diff --git a/packages/babel-types/src/validators/generated/index.js b/packages/babel-types/src/validators/generated/index.js index 890999e5d0e1..986994a2b15d 100644 --- a/packages/babel-types/src/validators/generated/index.js +++ b/packages/babel-types/src/validators/generated/index.js @@ -2228,6 +2228,20 @@ export function isPipelinePrimaryTopicReference( return false; } +export function isPipelineBody(node: ?Object, opts?: Object): boolean { + if (!node) return false; + + const nodeType = node.type; + if (nodeType === "PipelineBody") { + if (typeof opts === "undefined") { + return true; + } else { + return shallowEqual(node, opts); + } + } + + return false; +} export function isOptionalCallExpression( node: ?Object, opts?: Object,