Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

133
Visualizações
Reemplace todas las instancias de una importación específica a través de jscodeshift

bien, entonces tengo un código que se ve así:

 import { wait } from "@testing-library/react"; describe("MyTest", () => { it("should wait", async () => { await wait(() => { console.log("Done"); }); }); });

Quiero cambiar la wait del miembro de importación para que sea waitFor . Puedo cambiarlo en el AST así:

 source .find(j.ImportDeclaration) .filter((path) => path.node.source.value === "@testing-library/react") .find(j.ImportSpecifier) .filter((path) => path.node.imported.name === "wait") .replaceWith(j.importSpecifier(j.identifier("waitFor"))) .toSource()

Sin embargo, el código de salida tendrá el siguiente aspecto:

 import { waitFor } from "@testing-library/react"; describe("MyTest", () => { it("should wait", async () => { await wait(() => { console.log("Done"); }); }); });

Estoy buscando una manera de cambiar todos los usos posteriores de esa importación para que coincida con el nuevo nombre

¿Es esto posible con jscodeshift?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Puede hacerlo visitando todos los nodos de CallExpression , filtrando aquellos con el nombre al que se dirige ("esperar") y reemplazándolos con nuevos nodos.

Para encontrar los nodos relevantes, puede recorrer la colección devuelta por el método find() de jscodeshift y agregar su lógica allí, o puede darle a find() un segundo argumento. Este debería ser un predicado usado para filtrar:

 const isWaitExpression = (node) => node.callee && node.callee.name === "wait"; // I've used "root" where you used "source" root .find(j.CallExpression, isWaitExpression)

Luego puede reemplazar esos nodos con replaceWith() :

 const replaceExpression = (path, j) => j.callExpression(j.identifier("waitFor"), path.node.arguments); root .find(j.CallExpression, isWaitExpression) .replaceWith((path) => replaceExpression(path, j));

Puede parecer un poco confuso, pero para crear un nodo CallExpression , llame al método callExpression() desde la API. Tenga en cuenta la carcasa de camello allí.

En conjunto, un transformador que cambia el nombre de "esperar" de RTL a "esperar", tanto la declaración de importación nombrada como cada instancia en la que se llama en el archivo, se puede hacer así:

 const isWaitExpression = (node) => node.callee && node.callee.name === "wait"; const replaceExpression = (path, j) => j.callExpression(j.identifier("waitFor"), path.node.arguments); export default function transformer(file, api) { const j = api.jscodeshift; const root = j(file.source); root .find(j.ImportDeclaration) .filter((path) => path.node.source.value === "@testing-library/react") .find(j.ImportSpecifier) .filter((path) => path.node.imported.name === "wait") .replaceWith(j.importSpecifier(j.identifier("waitFor"))); root .find(j.CallExpression, isWaitExpression) .replaceWith((path) => replaceExpression(path, j)); return root.toSource(); }

Y aquí hay un enlace a él en AST explorer

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda