Babel/Parser生成AST后,立即使用Babel/Generator输出,结果不一致。
创始人
2024-11-19 20:30:41
0

需要在 AST 上执行一些转换,使其具有标准化的结构,并确保输出的代码始终遵循一致的格式。以下是一个示例:

const babel = require("@babel/core");
const code = `const foo = (a, b) => a + b;`;

// 使用 Babel/Parser 生成 AST
const ast = babel.parse(code);

// 执行标准化的转换
babel.traverse(ast, {
  ArrowFunctionExpression(path) {
    const { params, body } = path.node;
    // 确保只有一个参数,加上括号
    if (params.length !== 1) return;
    if (params[0].type !== "Identifier") return;
    path.node.params = [babel.types.ObjectPattern([babel.types.objectProperty(params[0], params[0], false, true)])];
    // 确保是返回语句,加上括号
    if (body.type !== "BinaryExpression") return;
    path.node.body = babel.types.BlockStatement([babel.types.returnStatement(body)]);
  },
});

// 使用 Babel/Generator 输出
const result = babel.generate(ast, { retainLines: true });

console.log(result.code);
// 输出:const foo = ({ a } = {}, { b } = {}) => { return a + b; };

这个示例展示了如何将箭头函数的参数转换为解构对象,以及将函数体转换为块级语句和返回语句。使用标准化的转换后,再使用 Babel/Generator 输出的代码始终保持一致。

相关内容

热门资讯

为了进一步!随意玩房卡辅助器透... 为了进一步!随意玩房卡辅助器透视!切实真的是有辅助平台(有挂透明挂)-哔哩哔哩1、不需要AI权限,帮...
事发当天!水鱼天下脚本!竟然是... 您好,水鱼天下脚本这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多玩家在...
现场直击!微信小程序辅助器(免... 现场直击!微信小程序辅助器(免费)!其实有挂辅助下载(有挂透明挂)-哔哩哔哩现场直击!微信小程序辅助...
一直以来!纳祥游戏脚本!果然是... 一直以来!纳祥游戏脚本!果然是有辅助插件(存在有挂)-哔哩哔哩1、不需要AI权限,帮助你快速的进行纳...
为切实保障!余干中至五十k有挂... 为切实保障!余干中至五十k有挂装吗!一直有挂辅助器(有挂技巧)-哔哩哔哩余干中至五十k有挂装吗辅助器...
为了进一步!浙江宝宝游戏辅助!... 您好,浙江宝宝游戏辅助这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多玩...
迎来新发展!如何下载微信小程序... 迎来新发展!如何下载微信小程序雀神挂件!都是真的有辅助插件(有挂解密)-哔哩哔哩如何下载微信小程序雀...
据统计!湖北逍遥卡五星辅助!本... 据统计!湖北逍遥卡五星辅助!本来是有辅助app(有挂技巧)-哔哩哔哩1、进入到湖北逍遥卡五星辅助是否...
更值得关注的是!微乐小程序辅助... 更值得关注的是!微乐小程序辅助器脚本!竟然是有辅助平台(发现有挂)-哔哩哔哩1、任何微乐小程序辅助器...
据目击者称!拼三张自建房软件!... 据目击者称!拼三张自建房软件!本来有挂辅助挂(真是有挂)-哔哩哔哩1、每一步都需要思考,不同水平的挑...