Skip to content

Commit

Permalink
Enable the BABEL_TYPES_8_BREAKING flag in @babel/types (#11172)
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolo-ribaudo committed Jul 5, 2020
1 parent fb1f9c8 commit e26d360
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 135 deletions.
99 changes: 16 additions & 83 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 @@ -181,14 +174,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 @@ -307,15 +292,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 @@ -417,8 +400,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 @@ -477,8 +458,6 @@ defineType("Identifier", {
assertValueType("string"),
Object.assign(
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 @@ -493,8 +472,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 @@ -609,8 +586,6 @@ defineType("RegExpLiteral", {
assertValueType("string"),
Object.assign(
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 @@ -666,14 +641,6 @@ defineType("MemberExpression", {
computed: {
default: false,
},
...(!process.env.BABEL_TYPES_8_BREAKING
? {
optional: {
validate: assertOneOf(true, false),
optional: true,
},
}
: {}),
},
});

Expand Down Expand Up @@ -736,7 +703,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 @@ -795,13 +761,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 @@ -839,8 +799,6 @@ defineType("ObjectProperty", {
assertValueType("boolean"),
Object.assign(
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",
Expand All @@ -849,15 +807,6 @@ defineType("ObjectProperty", {
},
{ type: "boolean" },
),
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",
);
}
},
),
default: false,
},
Expand All @@ -876,8 +825,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 @@ -892,14 +839,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 @@ -999,8 +942,6 @@ defineType("TryStatement", {
assertNodeType("BlockStatement"),
Object.assign(
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 @@ -1051,9 +992,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 @@ -1083,8 +1022,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 @@ -1099,10 +1036,6 @@ defineType("VariableDeclarator", {
fields: {
id: {
validate: (function () {
if (!process.env.BABEL_TYPES_8_BREAKING) {
return assertNodeType("LVal");
}

const normal = assertNodeType(
"Identifier",
"ArrayPattern",
Expand Down
28 changes: 4 additions & 24 deletions packages/babel-types/src/definitions/es2015.js
Expand Up @@ -239,8 +239,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 @@ -298,8 +296,6 @@ defineType("ExportNamedDeclaration", {
assertNodeType("Declaration"),
Object.assign(
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 @@ -308,19 +304,13 @@ defineType("ExportNamedDeclaration", {
"Only declaration or specifiers is allowed on ExportNamedDeclaration",
);
}

if (val && node.source) {
throw new TypeError("Cannot export a declaration from a source");
}
},
{ oneOfNodeTypes: ["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.

if (val && node.source) {
throw new TypeError("Cannot export a declaration from a source");
}
},
),
},
specifiers: {
Expand All @@ -336,8 +326,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 @@ -381,10 +369,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 @@ -489,8 +473,6 @@ defineType("MetaProperty", {
assertNodeType("Identifier"),
Object.assign(
function (node, key, val) {
if (!process.env.BABEL_TYPES_8_BREAKING) return;

let property;
switch (val.name) {
case "function":
Expand Down Expand Up @@ -727,8 +709,6 @@ defineType("YieldExpression", {
assertValueType("boolean"),
Object.assign(
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
37 changes: 10 additions & 27 deletions packages/babel-types/src/definitions/experimental.js
Expand Up @@ -28,27 +28,14 @@ defineType("AwaitExpression", {
defineType("BindExpression", {
visitor: ["object", "callee"],
aliases: ["Expression"],
fields: !process.env.BABEL_TYPES_8_BREAKING
? {
object: {
validate: Object.assign(() => {}, {
oneOfNodeTypes: ["Expression"],
}),
},
callee: {
validate: Object.assign(() => {}, {
oneOfNodeTypes: ["Expression"],
}),
},
}
: {
object: {
validate: assertNodeType("Expression"),
},
callee: {
validate: assertNodeType("Expression"),
},
},
fields: {
object: {
validate: assertNodeType("Expression"),
},
callee: {
validate: assertNodeType("Expression"),
},
},
});

defineType("ClassProperty", {
Expand Down Expand Up @@ -120,9 +107,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 @@ -168,9 +153,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 e26d360

Please sign in to comment.