Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable the BABEL_TYPES_8_BREAKING flag in @babel/types #11172

Merged
merged 1 commit into from Jun 25, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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 @@ -303,15 +288,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 @@ -413,8 +396,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 @@ -473,8 +454,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 @@ -489,8 +468,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 @@ -605,8 +582,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 @@ -662,14 +637,6 @@ defineType("MemberExpression", {
computed: {
default: false,
},
...(!process.env.BABEL_TYPES_8_BREAKING
? {
optional: {
validate: assertOneOf(true, false),
optional: true,
},
}
: {}),
},
});

Expand Down Expand Up @@ -732,7 +699,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 @@ -791,13 +757,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 @@ -835,8 +795,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 @@ -845,15 +803,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 @@ -872,8 +821,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 @@ -888,14 +835,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 @@ -995,8 +938,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 @@ -1047,9 +988,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 @@ -1079,8 +1018,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 @@ -1095,10 +1032,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 @@ -29,27 +29,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 @@ -121,9 +108,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 @@ -169,9 +154,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