[babel 8] Remove the Noop node type (#12361)

Co-authored-by: Nicolò Ribaudo <nicolo.ribaudo@gmail.com>
This commit is contained in:
Siddhant N Trivedi 2021-02-22 02:29:53 +05:30 committed by GitHub
parent 03d7911be6
commit 507ad63140
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 65 additions and 33 deletions

View File

@ -46,8 +46,6 @@ export function BlockStatement(this: Printer, node: t.BlockStatement) {
}
}
export function Noop(this: Printer) {}
export function Directive(this: Printer, node: t.Directive) {
this.print(node.value, node);
this.semicolon();

View File

@ -56,7 +56,7 @@ export function DeclareFunction(
this.word("function");
this.space();
this.print(node.id, node);
// @ts-expect-error todo(flow->ts) typeAnnotation does not exist on Noop
// @ts-ignore TODO(Babel 8) Remove this comment, since we'll remove the Noop node
this.print(node.id.typeAnnotation.typeAnnotation, node);
if (node.predicate) {

View File

@ -680,6 +680,11 @@ class Printer {
// Expose the node type functions and helpers on the prototype for easy usage.
Object.assign(Printer.prototype, generatorFunctions);
if (!process.env.BABEL_8_BREAKING) {
// @ts-ignore
Printer.prototype.Noop = function Noop(this: Printer) {};
}
type GeneratorFunctions = typeof generatorFunctions;
interface Printer extends GeneratorFunctions {}
export default Printer;

View File

@ -373,11 +373,15 @@ export const functionCommon = {
export const functionTypeAnnotationCommon = {
returnType: {
validate: assertNodeType("TypeAnnotation", "TSTypeAnnotation", "Noop"),
validate: process.env.BABEL_8_BREAKING
? assertNodeType("TypeAnnotation", "TSTypeAnnotation")
: assertNodeType("TypeAnnotation", "TSTypeAnnotation", "Noop"),
optional: true,
},
typeParameters: {
validate: assertNodeType(
validate: process.env.BABEL_8_BREAKING
? assertNodeType("TypeParameterDeclaration", "TSTypeParameterDeclaration")
: assertNodeType(
"TypeParameterDeclaration",
"TSTypeParameterDeclaration",
"Noop",
@ -455,8 +459,9 @@ defineType("FunctionExpression", {
export const patternLikeCommon = {
typeAnnotation: {
// TODO: @babel/plugin-transform-flow-comments puts a Noop here, is there a better way?
validate: assertNodeType("TypeAnnotation", "TSTypeAnnotation", "Noop"),
validate: process.env.BABEL_8_BREAKING
? assertNodeType("TypeAnnotation", "TSTypeAnnotation")
: assertNodeType("TypeAnnotation", "TSTypeAnnotation", "Noop"),
optional: true,
},
decorators: {
@ -1272,7 +1277,12 @@ defineType("ClassExpression", {
optional: true,
},
typeParameters: {
validate: assertNodeType(
validate: process.env.BABEL_8_BREAKING
? assertNodeType(
"TypeParameterDeclaration",
"TSTypeParameterDeclaration",
)
: assertNodeType(
"TypeParameterDeclaration",
"TSTypeParameterDeclaration",
"Noop",
@ -1324,7 +1334,12 @@ defineType("ClassDeclaration", {
validate: assertNodeType("Identifier"),
},
typeParameters: {
validate: assertNodeType(
validate: process.env.BABEL_8_BREAKING
? assertNodeType(
"TypeParameterDeclaration",
"TSTypeParameterDeclaration",
)
: assertNodeType(
"TypeParameterDeclaration",
"TSTypeParameterDeclaration",
"Noop",

View File

@ -60,7 +60,9 @@ defineType("ClassProperty", {
optional: true,
},
typeAnnotation: {
validate: assertNodeType("TypeAnnotation", "TSTypeAnnotation", "Noop"),
validate: process.env.BABEL_8_BREAKING
? assertNodeType("TypeAnnotation", "TSTypeAnnotation")
: assertNodeType("TypeAnnotation", "TSTypeAnnotation", "Noop"),
optional: true,
},
decorators: {
@ -118,7 +120,9 @@ defineType("ClassPrivateProperty", {
optional: true,
},
typeAnnotation: {
validate: assertNodeType("TypeAnnotation", "TSTypeAnnotation", "Noop"),
validate: process.env.BABEL_8_BREAKING
? assertNodeType("TypeAnnotation", "TSTypeAnnotation")
: assertNodeType("TypeAnnotation", "TSTypeAnnotation", "Noop"),
optional: true,
},
decorators: {

View File

@ -5,9 +5,11 @@ import defineType, {
} from "./utils";
import { PLACEHOLDERS } from "./placeholders";
defineType("Noop", {
if (!process.env.BABEL_8_BREAKING) {
defineType("Noop", {
visitor: [],
});
});
}
defineType("Placeholder", {
visitor: [],

View File

@ -20,11 +20,15 @@ const bool = assertValueType("boolean");
const tSFunctionTypeAnnotationCommon = {
returnType: {
validate: assertNodeType("TSTypeAnnotation", "Noop"),
validate: process.env.BABEL_8_BREAKING
? assertNodeType("TSTypeAnnotation")
: assertNodeType("TSTypeAnnotation", "Noop"),
optional: true,
},
typeParameters: {
validate: assertNodeType("TSTypeParameterDeclaration", "Noop"),
validate: process.env.BABEL_8_BREAKING
? assertNodeType("TSTypeParameterDeclaration")
: assertNodeType("TSTypeParameterDeclaration", "Noop"),
optional: true,
},
};

View File

@ -37,14 +37,18 @@ python --version
# TEST #
#==============================================================================#
if [ "$BABEL_8_BREAKING" = true ] ; then
# This option is removed in Babel 8
sed -i 's/allowDeclareFields: true,\?/\/* allowDeclareFields: true *\//g' babel.config.js
fi
startLocalRegistry "$root"/verdaccio-config.yml
yarn install
yarn dedupe '@babel/*'
if [ "$BABEL_8_BREAKING" = true ] ; then
# This option is removed in Babel 8
sed -i 's/allowDeclareFields: true,\?/\/* allowDeclareFields: true *\//g' babel.config.js
# Jest depends on @types/babel__traverse for Babel 7, and they contain the removed Noop node
sed -i 's/t.Noop/any/g' node_modules/@types/babel__traverse/index.d.ts
fi
yarn build
# The full test suite takes about 20mins on CircleCI. We run only a few of them