diff --git a/README.md b/README.md index 17fa3aadb5..243414f88b 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@

Travis Status - CircleCI Status + CircleCI Status Coverage Status

diff --git a/packages/babel-types/src/definitions/core.js b/packages/babel-types/src/definitions/core.js index 75e2bedb14..0b9f89fc56 100644 --- a/packages/babel-types/src/definitions/core.js +++ b/packages/babel-types/src/definitions/core.js @@ -1,12 +1,18 @@ /* @flow */ import * as t from "../index"; +import { + BINARY_OPERATORS, + LOGICAL_OPERATORS, + UNARY_OPERATORS, + UPDATE_OPERATORS +} from "../index"; import defineType, { assertValueType, assertNodeType, assertEach, chain, - assertOneOf, + assertOneOf } from "./index"; defineType("ArrayExpression", { @@ -40,7 +46,7 @@ defineType("BinaryExpression", { builder: ["operator", "left", "right"], fields: { operator: { - validate: assertValueType("string") + validate: assertOneOf(BINARY_OPERATORS) }, left: { validate: assertNodeType("Expression") @@ -310,7 +316,6 @@ defineType("IfStatement", { validate: assertNodeType("Expression") }, consequent: { - optional: true, validate: assertNodeType("Statement") }, alternate: { @@ -389,7 +394,7 @@ defineType("LogicalExpression", { aliases: ["Binary", "Expression"], fields: { operator: { - // todo + validate: assertOneOf(LOGICAL_OPERATORS) }, left: { validate: assertNodeType("Expression") @@ -555,7 +560,13 @@ defineType("SequenceExpression", { defineType("SwitchCase", { visitor: ["test", "consequent"], fields: { - // todo + test: { + validate: assertNodeType("Expression"), + optional: true + }, + consequent: { + validate: chain(assertValueType("array"), assertEach(assertNodeType("Statement"))) + } } }); @@ -563,7 +574,12 @@ defineType("SwitchStatement", { visitor: ["discriminant", "cases"], aliases: ["Statement", "BlockParent", "Scopable"], fields: { - // todo + discriminant: { + validate: assertNodeType("Expression") + }, + cases: { + validate: chain(assertValueType("array"), assertEach(assertNodeType("SwitchCase"))) + } } }); @@ -610,7 +626,7 @@ defineType("UnaryExpression", { validate: assertNodeType("Expression") }, operator: { - // todo + validate: assertOneOf(UNARY_OPERATORS) } }, visitor: ["argument"], @@ -627,7 +643,7 @@ defineType("UpdateExpression", { validate: assertNodeType("Expression") }, operator: { - // todo + validate: assertOneOf(UPDATE_OPERATORS) } }, visitor: ["argument"], diff --git a/packages/babel-types/src/definitions/es2015.js b/packages/babel-types/src/definitions/es2015.js index 99d4f33230..ee726ab95a 100644 --- a/packages/babel-types/src/definitions/es2015.js +++ b/packages/babel-types/src/definitions/es2015.js @@ -112,7 +112,9 @@ defineType("ExportAllDeclaration", { visitor: ["source"], aliases: ["Statement", "Declaration", "ModuleDeclaration", "ExportDeclaration"], fields: { - // todo + source: { + validate: assertNodeType("StringLiteral") + } } }); @@ -120,7 +122,9 @@ defineType("ExportDefaultDeclaration", { visitor: ["declaration"], aliases: ["Statement", "Declaration", "ModuleDeclaration", "ExportDeclaration"], fields: { - // todo + declaration: { + validate: assertNodeType("FunctionDeclaration", "ClassDeclaration", "Expression") + } } }); @@ -128,7 +132,17 @@ defineType("ExportNamedDeclaration", { visitor: ["declaration", "specifiers", "source"], aliases: ["Statement", "Declaration", "ModuleDeclaration", "ExportDeclaration"], fields: { - // todo + declaration: { + validate: assertNodeType("Declaration"), + optional: true + }, + specifiers: { + validate: chain(assertValueType("array"), assertEach(assertNodeType("ExportSpecifier"))) + }, + source: { + validate: assertNodeType("StringLiteral"), + optional: true + } } }); diff --git a/packages/babel-types/src/index.js b/packages/babel-types/src/index.js index 4d9c0b7973..c93d48eeb7 100644 --- a/packages/babel-types/src/index.js +++ b/packages/babel-types/src/index.js @@ -36,15 +36,20 @@ export const INHERIT_KEYS = { force: ["start", "loc", "end"] }; +export const UPDATE_OPERATORS = ["++", "--"]; +export const LOGICAL_OPERATORS = ["||", "&&"]; + export const BOOLEAN_NUMBER_BINARY_OPERATORS = [">", "<", ">=", "<="]; export const EQUALITY_BINARY_OPERATORS = ["==", "===", "!=", "!=="]; -export const COMPARISON_BINARY_OPERATORS = EQUALITY_BINARY_OPERATORS.concat(["in", "instanceof"]); -export const BOOLEAN_BINARY_OPERATORS = [].concat(COMPARISON_BINARY_OPERATORS, BOOLEAN_NUMBER_BINARY_OPERATORS); +export const COMPARISON_BINARY_OPERATORS = [...EQUALITY_BINARY_OPERATORS, "in", "instanceof"]; +export const BOOLEAN_BINARY_OPERATORS = [...COMPARISON_BINARY_OPERATORS, ...BOOLEAN_NUMBER_BINARY_OPERATORS]; export const NUMBER_BINARY_OPERATORS = ["-", "/", "*", "**", "&", "|", ">>", ">>>", "<<", "^"]; +export const BINARY_OPERATORS = ["+", ...NUMBER_BINARY_OPERATORS, ...BOOLEAN_BINARY_OPERATORS]; export const BOOLEAN_UNARY_OPERATORS = ["delete", "!"]; export const NUMBER_UNARY_OPERATORS = ["+", "-", "++", "--", "~"]; export const STRING_UNARY_OPERATORS = ["typeof"]; +export const UNARY_OPERATORS = ["void", ...BOOLEAN_UNARY_OPERATORS, ...NUMBER_UNARY_OPERATORS, ...STRING_UNARY_OPERATORS]; import "./definitions/init"; import { VISITOR_KEYS, ALIAS_KEYS, NODE_FIELDS, BUILDER_KEYS, DEPRECATED_KEYS } from "./definitions";