studio sintaxis programación programacion lenguaje herramienta estadistica español ejemplos curso r refactoring automated-refactoring

sintaxis - ¿Herramientas de reformateo/refactorización de código de lenguaje R?



lenguaje r sintaxis (2)

Como esto todavía parece relevante, pensé en mencionar al styler que reformatea el código según el estilo tidyverse .

Marque algunas de sus casillas, por ejemplo, el formato básico, pero no cambia el nombre de las variables (aunque al menos el lintr puede mostrarlas).

Styler viene como un paquete R con funciones para aceptar el código (por ejemplo, style_text() , pero también se puede usar en la línea de comandos:

por ejemplo este código en tmp.r

a <-c(1,2,3) if(foo) { b=2 } myVar=2

y corriendo:

Rscript -e ''styler::style_file("tmp.r")''

sobrescribiría tmp.r en esto:

a <- c(1, 2, 3) if (foo) { b <- 2 } myVar <- 2

Recientemente me encontré trabajando con el código R que se encuentra en todo el mapa en términos de estilo de codificación: varios autores y autores individuales que no son rigurosos en cuanto a adherirse a una sola estructura. Hay ciertas tareas que me gustaría automatizar mejor de lo que lo hago actualmente.

Estoy buscando una herramienta (o herramientas) que administre las siguientes tareas: enumeradas en orden creciente de deseo pero también algo en orden creciente de escepticismo de existencia.

  • Formateo básico. Cosas como convertir "if (foo)" a "if (foo)" y lograr la uniformidad en términos de ubicación de corsé y ese tipo de cosas.

  • Convertir "foo $ blah" a "foo [[" blah "]]" para el acceso a la lista. Lo ideal sería poder al menos adivinar si un objeto era realmente una lista y no un cuadro de datos y solo convertir listas.

  • Convertir ''='' en ''<-''. Sí, esta es una simple búsqueda y reemplazo, pero no realmente. La herramienta (o regexp) debe ser consciente del lenguaje de manera que sepa convertir "x = 5" pero no "foo (x = 5)". También sería muy agradable no solo reemplazar el símbolo, sino también asegurar un espacio en blanco en ambos lados del operador de asignación.

  • Cambio de nombre de variable, particularmente a través de funciones y archivos. Por ejemplo, supongamos que una lista tiene un elemento "foo", me encantaría poder cambiarlo a "foobar" una vez y no tener que rastrear cada uso de esa lista en todo el flujo de código. Me imagino que esto requeriría que la herramienta fuera capaz de todo el flujo de control para identificar cosas como la lista existente como otro nombre en una función diferente.

  • Convenciones de nombres. Me encantaría poder definir alguna convención de nomenclatura estándar (por ejemplo, Google''s o lo que sea) y hacer que identifique todas las funciones, variables, etc. y las convierta. Tenga en cuenta que esto se vincula con la entrada anterior para elementos como elementos de lista.

Siéntase libre de enumerar los comandos básicos de procesamiento de Unix (por ejemplo, sed) siempre que sea lo suficientemente inteligente como para al menos no arruinar las cosas (por ejemplo, convertir "foo (x = 5)" a "foo (x <-5) ").

Supongo que si esa herramienta ya existiera en un estado perfecto, ya la habría escuchado, y también me estoy dando cuenta de que con un lenguaje como R es difícil realizar algunos de estos cambios de forma automática. Pero uno puede soñar, ¿verdad? ¿Alguien tiene punteros en algunos / todos estos?


En mi humilde opinión, escribe tu propia. Escribir una impresora bonita es bastante difícil. Requiere comprensión de tokenización, análisis, creación de AST u otros IR, seguimiento de tablas de símbolos y ámbitos, plantillas, etc.

Pero si puede hacerlo, realmente aprenderá mucho sobre los lenguajes de programación en general. También se verá bastante impresionante para sus compañeros de trabajo y es increíble presentar un currículum. También es muy divertido.

Recomiendo " Patrones de implementación de idioma: Cree sus propios lenguajes de programación generales y específicos de dominio " por Terence Parr. Es un poco difícil de leer, pero el contenido es bastante bueno. Está escrito a nivel introductorio para analizadores y es bastante corto, pero contiene todas las partes que necesitaría para escribir esta herramienta usted mismo.

Si lo construyes, hazlo de código abierto, vuelve aquí y cuéntanos sobre él, y crea un sitio con algunos anuncios para hacerte unos cuantos dólares. De esa manera, todos pueden usar tu increíble creación y obtendrás unos cuantos dólares en el proceso.

La mejor de las suertes...