Pregunta:
Me gustaría crear algunas rutinas para manipular argumentos de función en búferes, lo que, por supuesto, requiere que primero ubique los argumentos. Supongamos que estoy operando en un búfer con un lenguaje de programación con una sintaxis similar a C, entonces podría buscar las comas para delimitar argumentos. La dificultad surge cuando tienes argumentos que son llamadas a otras funciones, porque también pueden incluir comas que no quisiera considerar, como en el siguiente ejemplo (las zanahorias apuntan a las comas que quiero encontrar).
somefun(w, f(x1, g(y1, y2)), h(z1, z2))
^ ^
Suponiendo que ya ubiqué el inicio de la lista de argumentos, mi plan actual es usar repetidamente forward-sexp
para avanzar más allá de los elementos anidados en el árbol de sintaxis y luego verificar si el siguiente carácter que no es un espacio en blanco es una coma. Pero, ¿hay una forma más robusta o idiomática de abordar esto?
Respuesta:
Existe la regla general de que cualquier lenguaje de programación ampliamente utilizado, como R, tiene un modo de lenguaje Emacs y esos modos también tienen funciones que analizan los argumentos de las funciones. Para R existe el enorme paquete Emacs Speaks Statistics .
Hay un analizador sintáctico ess-r . El comentario lo marca como "aún no estable". Pero hay 4 personas trabajando en ello, incluidos científicos experimentados. Así que supongo que es mejor que el homebrew.
También tenga en cuenta que ya hay comandos que van al comienzo de la definición de función ess-goto-beginning-of-function-or-para
y que completan los argumentos de la función . Por lo tanto, el análisis de los argumentos de la función ya debe estar integrado.