From 436874dac8ff2f2a703930e3bfc672e87b700e20 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Thu, 30 Jul 2015 23:44:36 +0100 Subject: [PATCH] add support for boolean flow literals - fixes #2127 --- packages/babel/src/generation/generators/flow.js | 8 ++++++++ packages/babel/src/types/definitions/flow.js | 4 ++++ .../generation/flow/boolean-literal-types/actual.js | 2 ++ .../generation/flow/boolean-literal-types/expected.js | 2 ++ packages/babylon/src/plugins/flow.js | 5 +++++ .../fixtures/flow/literal-types/boolean-false/actual.js | 1 + .../fixtures/flow/literal-types/boolean-true/actual.js | 1 + .../4 => literal-types/number-binary}/actual.js | 0 .../4 => literal-types/number-binary}/expected.json | 0 .../2 => literal-types/number-float}/actual.js | 0 .../2 => literal-types/number-float}/expected.json | 0 .../1 => literal-types/number-integer}/actual.js | 0 .../1 => literal-types/number-integer}/expected.json | 0 .../5 => literal-types/number-octal-2}/actual.js | 0 .../5 => literal-types/number-octal-2}/expected.json | 0 .../3 => literal-types/number-octal}/actual.js | 0 .../3 => literal-types/number-octal}/expected.json | 0 .../1 => literal-types/string-double}/actual.js | 0 .../1 => literal-types/string-double}/expected.json | 0 .../2 => literal-types/string-single}/actual.js | 0 .../2 => literal-types/string-single}/expected.json | 0 21 files changed, 23 insertions(+) create mode 100644 packages/babel/test/fixtures/generation/flow/boolean-literal-types/actual.js create mode 100644 packages/babel/test/fixtures/generation/flow/boolean-literal-types/expected.js create mode 100644 packages/babylon/test/fixtures/flow/literal-types/boolean-false/actual.js create mode 100644 packages/babylon/test/fixtures/flow/literal-types/boolean-true/actual.js rename packages/babylon/test/fixtures/flow/{number-literal-types/4 => literal-types/number-binary}/actual.js (100%) rename packages/babylon/test/fixtures/flow/{number-literal-types/4 => literal-types/number-binary}/expected.json (100%) rename packages/babylon/test/fixtures/flow/{number-literal-types/2 => literal-types/number-float}/actual.js (100%) rename packages/babylon/test/fixtures/flow/{number-literal-types/2 => literal-types/number-float}/expected.json (100%) rename packages/babylon/test/fixtures/flow/{number-literal-types/1 => literal-types/number-integer}/actual.js (100%) rename packages/babylon/test/fixtures/flow/{number-literal-types/1 => literal-types/number-integer}/expected.json (100%) rename packages/babylon/test/fixtures/flow/{number-literal-types/5 => literal-types/number-octal-2}/actual.js (100%) rename packages/babylon/test/fixtures/flow/{number-literal-types/5 => literal-types/number-octal-2}/expected.json (100%) rename packages/babylon/test/fixtures/flow/{number-literal-types/3 => literal-types/number-octal}/actual.js (100%) rename packages/babylon/test/fixtures/flow/{number-literal-types/3 => literal-types/number-octal}/expected.json (100%) rename packages/babylon/test/fixtures/flow/{string-literal-types/1 => literal-types/string-double}/actual.js (100%) rename packages/babylon/test/fixtures/flow/{string-literal-types/1 => literal-types/string-double}/expected.json (100%) rename packages/babylon/test/fixtures/flow/{string-literal-types/2 => literal-types/string-single}/actual.js (100%) rename packages/babylon/test/fixtures/flow/{string-literal-types/2 => literal-types/string-single}/expected.json (100%) diff --git a/packages/babel/src/generation/generators/flow.js b/packages/babel/src/generation/generators/flow.js index 2721a84bfb..e750a6dc1f 100644 --- a/packages/babel/src/generation/generators/flow.js +++ b/packages/babel/src/generation/generators/flow.js @@ -26,6 +26,14 @@ export function BooleanTypeAnnotation(node) { this.push("bool"); } +/** + * Prints BooleanLiteralTypeAnnotation. + */ + +export function BooleanLiteralTypeAnnotation(node) { + this.push(node.value ? "true" : "false"); +} + /** * Prints DeclareClass, prints node. */ diff --git a/packages/babel/src/types/definitions/flow.js b/packages/babel/src/types/definitions/flow.js index 4380f13cf6..2cfcc3e3e1 100644 --- a/packages/babel/src/types/definitions/flow.js +++ b/packages/babel/src/types/definitions/flow.js @@ -13,6 +13,10 @@ define("BooleanTypeAnnotation", { aliases: ["Flow", "FlowBaseAnnotation"] }); +define("BooleanLiteralTypeAnnotation", { + aliases: ["Flow"] +}); + define("ClassImplements", { visitor: ["id", "typeParameters"], aliases: ["Flow"] diff --git a/packages/babel/test/fixtures/generation/flow/boolean-literal-types/actual.js b/packages/babel/test/fixtures/generation/flow/boolean-literal-types/actual.js new file mode 100644 index 0000000000..8573e6b69e --- /dev/null +++ b/packages/babel/test/fixtures/generation/flow/boolean-literal-types/actual.js @@ -0,0 +1,2 @@ +var foo: true; +var bar: false; diff --git a/packages/babel/test/fixtures/generation/flow/boolean-literal-types/expected.js b/packages/babel/test/fixtures/generation/flow/boolean-literal-types/expected.js new file mode 100644 index 0000000000..8573e6b69e --- /dev/null +++ b/packages/babel/test/fixtures/generation/flow/boolean-literal-types/expected.js @@ -0,0 +1,2 @@ +var foo: true; +var bar: false; diff --git a/packages/babylon/src/plugins/flow.js b/packages/babylon/src/plugins/flow.js index 52df63b5c0..4eb8851c73 100644 --- a/packages/babylon/src/plugins/flow.js +++ b/packages/babylon/src/plugins/flow.js @@ -493,6 +493,11 @@ pp.flowParsePrimaryType = function () { this.next(); return this.finishNode(node, "StringLiteralTypeAnnotation"); + case tt._true: case tt._false: + node.value = this.match(tt._true) + this.next(); + return this.finishNode(node, "BooleanLiteralTypeAnnotation"); + case tt.num: node.rawValue = node.value = this.state.value; node.raw = this.input.slice(this.state.start, this.state.end); diff --git a/packages/babylon/test/fixtures/flow/literal-types/boolean-false/actual.js b/packages/babylon/test/fixtures/flow/literal-types/boolean-false/actual.js new file mode 100644 index 0000000000..ffc1f7ecb6 --- /dev/null +++ b/packages/babylon/test/fixtures/flow/literal-types/boolean-false/actual.js @@ -0,0 +1 @@ +var foo: true diff --git a/packages/babylon/test/fixtures/flow/literal-types/boolean-true/actual.js b/packages/babylon/test/fixtures/flow/literal-types/boolean-true/actual.js new file mode 100644 index 0000000000..146ef4bc4d --- /dev/null +++ b/packages/babylon/test/fixtures/flow/literal-types/boolean-true/actual.js @@ -0,0 +1 @@ +var foo: false diff --git a/packages/babylon/test/fixtures/flow/number-literal-types/4/actual.js b/packages/babylon/test/fixtures/flow/literal-types/number-binary/actual.js similarity index 100% rename from packages/babylon/test/fixtures/flow/number-literal-types/4/actual.js rename to packages/babylon/test/fixtures/flow/literal-types/number-binary/actual.js diff --git a/packages/babylon/test/fixtures/flow/number-literal-types/4/expected.json b/packages/babylon/test/fixtures/flow/literal-types/number-binary/expected.json similarity index 100% rename from packages/babylon/test/fixtures/flow/number-literal-types/4/expected.json rename to packages/babylon/test/fixtures/flow/literal-types/number-binary/expected.json diff --git a/packages/babylon/test/fixtures/flow/number-literal-types/2/actual.js b/packages/babylon/test/fixtures/flow/literal-types/number-float/actual.js similarity index 100% rename from packages/babylon/test/fixtures/flow/number-literal-types/2/actual.js rename to packages/babylon/test/fixtures/flow/literal-types/number-float/actual.js diff --git a/packages/babylon/test/fixtures/flow/number-literal-types/2/expected.json b/packages/babylon/test/fixtures/flow/literal-types/number-float/expected.json similarity index 100% rename from packages/babylon/test/fixtures/flow/number-literal-types/2/expected.json rename to packages/babylon/test/fixtures/flow/literal-types/number-float/expected.json diff --git a/packages/babylon/test/fixtures/flow/number-literal-types/1/actual.js b/packages/babylon/test/fixtures/flow/literal-types/number-integer/actual.js similarity index 100% rename from packages/babylon/test/fixtures/flow/number-literal-types/1/actual.js rename to packages/babylon/test/fixtures/flow/literal-types/number-integer/actual.js diff --git a/packages/babylon/test/fixtures/flow/number-literal-types/1/expected.json b/packages/babylon/test/fixtures/flow/literal-types/number-integer/expected.json similarity index 100% rename from packages/babylon/test/fixtures/flow/number-literal-types/1/expected.json rename to packages/babylon/test/fixtures/flow/literal-types/number-integer/expected.json diff --git a/packages/babylon/test/fixtures/flow/number-literal-types/5/actual.js b/packages/babylon/test/fixtures/flow/literal-types/number-octal-2/actual.js similarity index 100% rename from packages/babylon/test/fixtures/flow/number-literal-types/5/actual.js rename to packages/babylon/test/fixtures/flow/literal-types/number-octal-2/actual.js diff --git a/packages/babylon/test/fixtures/flow/number-literal-types/5/expected.json b/packages/babylon/test/fixtures/flow/literal-types/number-octal-2/expected.json similarity index 100% rename from packages/babylon/test/fixtures/flow/number-literal-types/5/expected.json rename to packages/babylon/test/fixtures/flow/literal-types/number-octal-2/expected.json diff --git a/packages/babylon/test/fixtures/flow/number-literal-types/3/actual.js b/packages/babylon/test/fixtures/flow/literal-types/number-octal/actual.js similarity index 100% rename from packages/babylon/test/fixtures/flow/number-literal-types/3/actual.js rename to packages/babylon/test/fixtures/flow/literal-types/number-octal/actual.js diff --git a/packages/babylon/test/fixtures/flow/number-literal-types/3/expected.json b/packages/babylon/test/fixtures/flow/literal-types/number-octal/expected.json similarity index 100% rename from packages/babylon/test/fixtures/flow/number-literal-types/3/expected.json rename to packages/babylon/test/fixtures/flow/literal-types/number-octal/expected.json diff --git a/packages/babylon/test/fixtures/flow/string-literal-types/1/actual.js b/packages/babylon/test/fixtures/flow/literal-types/string-double/actual.js similarity index 100% rename from packages/babylon/test/fixtures/flow/string-literal-types/1/actual.js rename to packages/babylon/test/fixtures/flow/literal-types/string-double/actual.js diff --git a/packages/babylon/test/fixtures/flow/string-literal-types/1/expected.json b/packages/babylon/test/fixtures/flow/literal-types/string-double/expected.json similarity index 100% rename from packages/babylon/test/fixtures/flow/string-literal-types/1/expected.json rename to packages/babylon/test/fixtures/flow/literal-types/string-double/expected.json diff --git a/packages/babylon/test/fixtures/flow/string-literal-types/2/actual.js b/packages/babylon/test/fixtures/flow/literal-types/string-single/actual.js similarity index 100% rename from packages/babylon/test/fixtures/flow/string-literal-types/2/actual.js rename to packages/babylon/test/fixtures/flow/literal-types/string-single/actual.js diff --git a/packages/babylon/test/fixtures/flow/string-literal-types/2/expected.json b/packages/babylon/test/fixtures/flow/literal-types/string-single/expected.json similarity index 100% rename from packages/babylon/test/fixtures/flow/string-literal-types/2/expected.json rename to packages/babylon/test/fixtures/flow/literal-types/string-single/expected.json