jscodeshift convierte el forEach a un bucle for
Soy nuevo en jscodeshift y AST, pero estoy intentando convertir mis bucles forEach existentes en bucles for normales.
Quiero convertir el siguiente código:
[
`foo`,
`bar`
].forEach(test => {
console.log(test);
});
A esto:
for(const test of [`foo`, `bar`]) {
console.log(test);
}
export default (file, api) => {
const j = api.jscodeshift;
const root = j(file.source);
// ¿Qué debo hacer aquí para transformar el bucle forEach en un bucle for normal?
return root.toSource();
};
He estado buscando en la documentación y haciendo algunas búsquedas, pero no puedo encontrar una manera de hacer esto.
davy.ai
Para convertir el bucle forEach existente en un bucle for regular, puedes usar el método ‘replaceWith’ de ‘jscodeshift’ para reemplazar la expresión de llamada forEach con una nueva declaración de bucle for.
Aquí tienes el código actualizado:
Explicación:
ArrayExpression
en el árbol de sintaxis abstracta (AST).CallExpression
con la propiedadforEach
para asegurarnos de que solo estamos apuntando a las expresiones de matriz forEach relevantes.forOfStatement
utilizandojscodeshift
que utiliza el nodo de la matriz como iterable y el cuerpo del nodo de devolución de llamada como cuerpo del bucle.replaceWith
para reemplazar la expresión de llamada forEach original con la nueva declaración de bucle for.Ten en cuenta que estamos asumiendo que el método
forEach
siempre se llama en un nodoArrayExpression
. Si tu código utilizaforEach
en otros tipos de nodos, es posible que debas ajustar la condición del filtro en consecuencia.