Estoy tratando de escribir un complemento Prettier y ya tengo varias piezas de la lógica para reconstruir el código del AST y algunos bits de formato funcionan. Sin embargo, en este momento me está costando mucho entender cómo manejar los comentarios, y parece que no puedo darme cuenta de lo que estoy haciendo mal.
El analizador que estoy usando no conserva los comentarios, así que estoy usando una versión modificada de esta máquina de estado para extraer y adjuntar los comentarios manualmente.
Mi mayor problema es que, si bien los comentarios aparentemente se adjuntan correctamente a los nodos AST según core.js::attachComments() , dicho método también elimina la matriz de comments del nodo raíz AST. Sin embargo, más adelante en comments.js::printCommentsSeparately() , el código verifica si la raíz AST pasada tiene una matriz de comments , y si no, omite cualquier lógica de impresión.
En contexto, eso tiene sentido (en el sentido de "¿por qué intentar imprimir cosas que no están ahí?"), pero mirando el flujo del programa que he rastreado hasta ahora, no entiendo por qué sucede esto o qué puedo hacer. hacer para que mis comentarios se mantengan y lleguen al código de impresión real. En este momento, todo lo que recibo es "Comment xyz was not printed. Please report this error!" excepciones
El orden de llamada que he estado ejecutando:
core.js::coreFormat() > core.js::attachComments() // removes ast.comments > ast-to-doc.js::printAstToDoc() > ast-to-doc.js::mainPrint() > ast-to-doc.js::mainPrintInternal() > ast-to-doc.js::callPluginPrintFunction() > comments.js::printComments() > comments.js::printCommentsSeparately() // checks for ast.comments¿Qué me estoy perdiendo? La documentación para el desarrollo de complementos no está exactamente detallada, y no he encontrado ninguna discusión o tema útil en mis búsquedas.