创建一个 codemod 以将新元素添加到数组
Create a codemod to add a new element to array
我一直在努力将新对象添加到 jscodeshift
的对象数组中。我的问题是在得到 VariableDeclarator
之后,我不知道如何查询数组。在插入新节点之后,我需要获取数组中的最后一个元素。这是代码:
export default function transformer(file, api) {
const j = api.jscodeshift;
const root = j(file.source);
const changeList = root.find(j.VariableDeclarator, {
id: {name: 'list'},
}).closest(j.ArrayExpression, {
elements: [""]
}).replaceWith(p => {
console.log(p);
}).toSource();
};
我正在 AST explorer
上玩
.closest
returns 最近的 ancestor 节点匹配类型。 ArrayExpression
是 后裔 ,所以你必须再次使用 .find
。这有效:
export default function transformer(file, api) {
// import jscodeshift
const j = api.jscodeshift;
// get source code
const root = j(file.source);
// find a node
return root.find(j.VariableDeclarator, {id: {name: 'list'}})
.find(j.ArrayExpression)
.forEach(p => p.get('elements').push(j.template.expression`x`))
.toSource();
};
我一直在努力将新对象添加到 jscodeshift
的对象数组中。我的问题是在得到 VariableDeclarator
之后,我不知道如何查询数组。在插入新节点之后,我需要获取数组中的最后一个元素。这是代码:
export default function transformer(file, api) {
const j = api.jscodeshift;
const root = j(file.source);
const changeList = root.find(j.VariableDeclarator, {
id: {name: 'list'},
}).closest(j.ArrayExpression, {
elements: [""]
}).replaceWith(p => {
console.log(p);
}).toSource();
};
我正在 AST explorer
上玩.closest
returns 最近的 ancestor 节点匹配类型。 ArrayExpression
是 后裔 ,所以你必须再次使用 .find
。这有效:
export default function transformer(file, api) {
// import jscodeshift
const j = api.jscodeshift;
// get source code
const root = j(file.source);
// find a node
return root.find(j.VariableDeclarator, {id: {name: 'list'}})
.find(j.ArrayExpression)
.forEach(p => p.get('elements').push(j.template.expression`x`))
.toSource();
};