Skip to content

Commit

Permalink
Enable the BABEL_TYPES_8_BREAKING flag in @babel/types
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolo-ribaudo committed Mar 22, 2020
1 parent 5f50131 commit 6863db5
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 109 deletions.
92 changes: 16 additions & 76 deletions packages/babel-types/src/definitions/core.js
Expand Up @@ -30,7 +30,6 @@ defineType("ArrayExpression", {
assertNodeOrValueType("null", "Expression", "SpreadElement"),
),
),
default: !process.env.BABEL_TYPES_8_BREAKING ? [] : undefined,
},
},
visitor: ["elements"],
Expand All @@ -41,10 +40,6 @@ defineType("AssignmentExpression", {
fields: {
operator: {
validate: (function() {
if (!process.env.BABEL_TYPES_8_BREAKING) {
return assertValueType("string");
}

const identifier = assertOneOf(...ASSIGNMENT_OPERATORS);
const pattern = assertOneOf("=");

Expand All @@ -55,14 +50,12 @@ defineType("AssignmentExpression", {
})(),
},
left: {
validate: !process.env.BABEL_TYPES_8_BREAKING
? assertNodeType("LVal")
: assertNodeType(
"Identifier",
"MemberExpression",
"ArrayPattern",
"ObjectPattern",
),
validate: assertNodeType(
"Identifier",
"MemberExpression",
"ArrayPattern",
"ObjectPattern",
),
},
right: {
validate: assertNodeType("Expression"),
Expand Down Expand Up @@ -170,14 +163,6 @@ defineType("CallExpression", {
),
),
},
...(!process.env.BABEL_TYPES_8_BREAKING
? {
optional: {
validate: assertOneOf(true, false),
optional: true,
},
}
: {}),
typeArguments: {
validate: assertNodeType("TypeParameterInstantiation"),
optional: true,
Expand Down Expand Up @@ -283,15 +268,13 @@ defineType("ForInStatement", {
],
fields: {
left: {
validate: !process.env.BABEL_TYPES_8_BREAKING
? assertNodeType("VariableDeclaration", "LVal")
: assertNodeType(
"VariableDeclaration",
"Identifier",
"MemberExpression",
"ArrayPattern",
"ObjectPattern",
),
validate: assertNodeType(
"VariableDeclaration",
"Identifier",
"MemberExpression",
"ArrayPattern",
"ObjectPattern",
),
},
right: {
validate: assertNodeType("Expression"),
Expand Down Expand Up @@ -393,8 +376,6 @@ defineType("FunctionDeclaration", {
"Declaration",
],
validate: (function() {
if (!process.env.BABEL_TYPES_8_BREAKING) return () => {};

const identifier = assertNodeType("Identifier");

return function(parent, key, node) {
Expand Down Expand Up @@ -450,8 +431,6 @@ defineType("Identifier", {
...patternLikeCommon,
name: {
validate: chain(assertValueType("string"), function(node, key, val) {
if (!process.env.BABEL_TYPES_8_BREAKING) return;

if (!isValidIdentifier(val, false)) {
throw new TypeError(`"${val}" is not a valid identifier name`);
}
Expand All @@ -463,8 +442,6 @@ defineType("Identifier", {
},
},
validate(parent, key, node) {
if (!process.env.BABEL_TYPES_8_BREAKING) return;

const match = /\.(\w+)$/.exec(key);
if (!match) return;

Expand Down Expand Up @@ -576,8 +553,6 @@ defineType("RegExpLiteral", {
},
flags: {
validate: chain(assertValueType("string"), function(node, key, val) {
if (!process.env.BABEL_TYPES_8_BREAKING) return;

const invalid = /[^gimsuy]/.exec(val);
if (invalid) {
throw new TypeError(`"${invalid[0]}" is not a valid RegExp flag`);
Expand Down Expand Up @@ -627,14 +602,6 @@ defineType("MemberExpression", {
computed: {
default: false,
},
...(!process.env.BABEL_TYPES_8_BREAKING
? {
optional: {
validate: assertOneOf(true, false),
optional: true,
},
}
: {}),
},
});

Expand Down Expand Up @@ -697,7 +664,6 @@ defineType("ObjectMethod", {
...functionTypeAnnotationCommon,
kind: {
validate: assertOneOf("method", "get", "set"),
...(!process.env.BABEL_TYPES_8_BREAKING ? { default: "method" } : {}),
},
computed: {
default: false,
Expand Down Expand Up @@ -748,13 +714,7 @@ defineType("ObjectMethod", {
});

defineType("ObjectProperty", {
builder: [
"key",
"value",
"computed",
"shorthand",
...(!process.env.BABEL_TYPES_8_BREAKING ? ["decorators"] : []),
],
builder: ["key", "value", "computed", "shorthand"],
fields: {
computed: {
default: false,
Expand Down Expand Up @@ -783,17 +743,13 @@ defineType("ObjectProperty", {
validate: chain(
assertValueType("boolean"),
function(node, key, val) {
if (!process.env.BABEL_TYPES_8_BREAKING) return;

if (val && node.computed) {
throw new TypeError(
"Property shorthand of ObjectProperty cannot be true if computed is true",
);
}
},
function(node, key, val) {
if (!process.env.BABEL_TYPES_8_BREAKING) return;

if (val && !is("Identifier", node.key)) {
throw new TypeError(
"Property shorthand of ObjectProperty cannot be true if key is not an Identifier",
Expand All @@ -818,8 +774,6 @@ defineType("ObjectProperty", {
const expression = assertNodeType("Expression");

return function(parent, key, node) {
if (!process.env.BABEL_TYPES_8_BREAKING) return;

const validator = is("ObjectPattern", parent) ? pattern : expression;
validator(node, "value", node.value);
};
Expand All @@ -834,14 +788,10 @@ defineType("RestElement", {
fields: {
...patternLikeCommon,
argument: {
validate: !process.env.BABEL_TYPES_8_BREAKING
? assertNodeType("LVal")
: assertNodeType("Identifier", "Pattern", "MemberExpression"),
validate: assertNodeType("Identifier", "Pattern", "MemberExpression"),
},
},
validate(parent, key) {
if (!process.env.BABEL_TYPES_8_BREAKING) return;

const match = /(\w+)\[(\d+)\]/.exec(key);
if (!match) throw new Error("Internal Babel error: malformed key.");

Expand Down Expand Up @@ -938,8 +888,6 @@ defineType("TryStatement", {
fields: {
block: {
validate: chain(assertNodeType("BlockStatement"), function(node) {
if (!process.env.BABEL_TYPES_8_BREAKING) return;

// This validator isn't put at the top level because we can run it
// even if this node doesn't have a parent.

Expand Down Expand Up @@ -985,9 +933,7 @@ defineType("UpdateExpression", {
default: false,
},
argument: {
validate: !process.env.BABEL_TYPES_8_BREAKING
? assertNodeType("Expression")
: assertNodeType("Identifier", "MemberExpression"),
validate: assertNodeType("Identifier", "MemberExpression"),
},
operator: {
validate: assertOneOf(...UPDATE_OPERATORS),
Expand Down Expand Up @@ -1017,8 +963,6 @@ defineType("VariableDeclaration", {
},
},
validate(parent, key, node) {
if (!process.env.BABEL_TYPES_8_BREAKING) return;

if (!is("ForXStatement", parent, { left: node })) return;
if (node.declarations.length !== 1) {
throw new TypeError(
Expand All @@ -1033,10 +977,6 @@ defineType("VariableDeclarator", {
fields: {
id: {
validate: (function() {
if (!process.env.BABEL_TYPES_8_BREAKING) {
return assertNodeType("LVal");
}

const normal = assertNodeType(
"Identifier",
"ArrayPattern",
Expand Down
16 changes: 0 additions & 16 deletions packages/babel-types/src/definitions/es2015.js
Expand Up @@ -190,8 +190,6 @@ defineType("ClassDeclaration", {
const identifier = assertNodeType("Identifier");

return function(parent, key, node) {
if (!process.env.BABEL_TYPES_8_BREAKING) return;

if (!is("ExportDefaultDeclaration", parent)) {
identifier(node, "id", node.id);
}
Expand Down Expand Up @@ -248,8 +246,6 @@ defineType("ExportNamedDeclaration", {
validate: chain(
assertNodeType("Declaration"),
function(node, key, val) {
if (!process.env.BABEL_TYPES_8_BREAKING) return;

// This validator isn't put at the top level because we can run it
// even if this node doesn't have a parent.

Expand All @@ -260,8 +256,6 @@ defineType("ExportNamedDeclaration", {
}
},
function(node, key, val) {
if (!process.env.BABEL_TYPES_8_BREAKING) return;

// This validator isn't put at the top level because we can run it
// even if this node doesn't have a parent.

Expand All @@ -284,8 +278,6 @@ defineType("ExportNamedDeclaration", {
);
const sourceless = assertNodeType("ExportSpecifier");

if (!process.env.BABEL_TYPES_8_BREAKING) return sourced;

return function(node, key, val) {
const validator = node.source ? sourced : sourceless;
validator(node, key, val);
Expand Down Expand Up @@ -329,10 +321,6 @@ defineType("ForOfStatement", {
fields: {
left: {
validate: (function() {
if (!process.env.BABEL_TYPES_8_BREAKING) {
return assertNodeType("VariableDeclaration", "LVal");
}

const declaration = assertNodeType("VariableDeclaration");
const lval = assertNodeType(
"Identifier",
Expand Down Expand Up @@ -434,8 +422,6 @@ defineType("MetaProperty", {
fields: {
meta: {
validate: chain(assertNodeType("Identifier"), function(node, key, val) {
if (!process.env.BABEL_TYPES_8_BREAKING) return;

let property;
switch (val.name) {
case "function":
Expand Down Expand Up @@ -665,8 +651,6 @@ defineType("YieldExpression", {
fields: {
delegate: {
validate: chain(assertValueType("boolean"), function(node, key, val) {
if (!process.env.BABEL_TYPES_8_BREAKING) return;

if (val && !node.argument) {
throw new TypeError(
"Property delegate of YieldExpression cannot be true if there is no argument",
Expand Down
26 changes: 10 additions & 16 deletions packages/babel-types/src/definitions/experimental.js
Expand Up @@ -28,16 +28,14 @@ defineType("AwaitExpression", {
defineType("BindExpression", {
visitor: ["object", "callee"],
aliases: ["Expression"],
fields: !process.env.BABEL_TYPES_8_BREAKING
? {}
: {
object: {
validate: assertNodeType("Expression"),
},
callee: {
validate: assertNodeType("Expression"),
},
},
fields: {
object: {
validate: assertNodeType("Expression"),
},
callee: {
validate: assertNodeType("Expression"),
},
},
});

defineType("ClassProperty", {
Expand Down Expand Up @@ -106,9 +104,7 @@ defineType("OptionalMemberExpression", {
default: false,
},
optional: {
validate: !process.env.BABEL_TYPES_8_BREAKING
? assertValueType("boolean")
: chain(assertValueType("boolean"), assertOptionalChainStart()),
validate: chain(assertValueType("boolean"), assertOptionalChainStart()),
},
},
});
Expand Down Expand Up @@ -154,9 +150,7 @@ defineType("OptionalCallExpression", {
),
},
optional: {
validate: !process.env.BABEL_TYPES_8_BREAKING
? assertValueType("boolean")
: chain(assertValueType("boolean"), assertOptionalChainStart()),
validate: chain(assertValueType("boolean"), assertOptionalChainStart()),
},
typeArguments: {
validate: assertNodeType("TypeParameterInstantiation"),
Expand Down
2 changes: 1 addition & 1 deletion packages/babel-types/src/definitions/utils.js
Expand Up @@ -73,7 +73,7 @@ export function assertEach(callback: Validator): Validator {
const subkey = `${key}[${i}]`;
const v = val[i];
callback(node, subkey, v);
if (process.env.BABEL_TYPES_8_BREAKING) validateChild(node, subkey, v);
validateChild(node, subkey, v);
}
}
validator.each = callback;
Expand Down

0 comments on commit 6863db5

Please sign in to comment.