You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jscodeshift为CallExpression末尾添加参数

如何用jscodeshift在指定函数调用末尾插入参数?

你有如下函数调用代码:

myFunc(param1, param2);

想要在myFunc的调用末尾插入insert_here_param_3参数,现有的jscodeshift初始代码如下,不知道后续如何编写:

export default function transformer(file, api) {
  const j = api.jscodeshift;

  return j(file.source)
    .find(j.Identifier)
    .forEach(path => {
      if(path.node.name === "myFunc") {
        // j(path). ???
      }
    })
    .toSource();
}

修改后的完整解决方案代码

export default function transformer(file, api) {
  const j = api.jscodeshift;

  return j(file.source)
    // 直接定位函数调用表达式,而非单个标识符
    .find(j.CallExpression)
    .forEach(path => {
      // 判断当前调用的函数是否为目标myFunc
      if (path.node.callee.name === "myFunc") {
        // 创建要插入的参数节点(这里是标识符类型,若需其他类型可替换:字符串用j.stringLiteral,数值用j.numericLiteral)
        const newParam = j.identifier('insert_here_param_3');
        // 将新参数追加到函数调用的参数列表末尾
        path.node.arguments.push(newParam);
      }
    })
    .toSource();
}

关键改动说明

  • 替换查找目标:把j.Identifier改为j.CallExpression,直接定位函数调用语句,避免匹配到其他场景下的myFunc标识符(比如变量声明)。
  • 精准判断目标函数:通过path.node.callee.name判断被调用的函数是否为myFunc,callee属性是函数调用表达式中指向被调用函数的部分。
  • 动态创建参数节点:根据你要插入的参数类型选择对应的创建方法,确保生成符合语法的AST节点。
  • 直接操作参数列表:函数调用的参数存储在arguments数组中,直接push新节点即可完成末尾插入。

内容的提问来源于stack exchange,提问作者inux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:25:20