Estoy trabajando con JavaScript AST generado por acornjs . Lo he normalizado de tal manera que cada expresión binaria se asigna a una variable temporal para aplanarla, y todas las variables se definen una por línea, cosas así. No es del todo relevante para la pregunta, sino solo algo de contexto. Estoy escribiendo un transpiler de JS a un lenguaje de programación personalizado. Ahora me gustaría anotar las variables en el idioma de destino si son mutables o no, algo así como en Rust.
¿Cómo puedo/debo hacer para resolver esto programáticamente? ¿Cómo identifico cada variable mutable e inmutable y las marco apropiadamente? ¿Cuál es el enfoque general? Parece abrumadoramente complicado al principio, pero no estoy seguro si me estoy perdiendo algo simple/obvio.
Yo pensaría algo como:
AssignmentExpression , donde el left es un Identifier . Marque ese identificador como inmutable si solo está en la posición left de una asignación una vez en todo el AST (después de atravesar/visitar cada nodo).MemberExpression , vea si la propiedad del objeto está reasignada.¿Tengo esto sobre la derecha? ¿Cómo puedo hacer esto correctamente? Cualquier ayuda sería apreciada.