2012-02-02 17 views
22

Recientemente me encontré trabajando con el código R que está en todo el mapa en términos de estilo de codificación: varios autores y autores individuales que no son rigurosos en apegarse a una sola estructura. Hay ciertas tareas que me gustaría automatizar mejor de lo que lo hago actualmente.R ¿herramientas para reformatear/refactorizar códigos?

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

  • Formato básico. Cosas como convertir "if (foo)" a "if (foo)" y lograr la uniformidad en cuanto a la ubicación de la abrazadera y ese tipo de cosas.

  • Convirtiendo "foo $ blah" a "foo [[" "blah"]] para acceder a la lista. Lo ideal es que al menos adivine si un objeto es realmente una lista y no un data.frame y solo convierte listas.

  • Conversión '=' a '< -'. Sí, esta es una simple búsqueda y reemplazo, pero no realmente. La herramienta (o regexp) debe tener en cuenta el idioma de modo 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 garantizar un único espacio en blanco en ambos lados del operador de asignación.

  • Cambio de nombre de la variable, particularmente a través de las funciones & 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 a lo largo de todo el flujo de código. Me imagino que esto requeriría que la herramienta tenga todo el flujo de control para identificar cosas como esa lista existente como otro nombre en una función diferente.

  • Convenciones de nomenclatura. 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 convertirlas. Tenga en cuenta que esto se relaciona con la entrada anterior para cosas como elementos de lista.

Siéntase libre de ver los comandos básicos de procesamiento de Unix (por ejemplo SED) con tal de que realmente será lo suficientemente inteligente como para, al menos, por lo general no tornillo cosas (por ejemplo, la conversión de "foo (x = 5)" a " foo (x < -5) ").

Supongo que si tal 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 hacer algunos de estos tipos. de cambios automágicamente, pero uno puede soñar, ¿verdad? ¿Alguien tiene consejos sobre algunos/todos estos?

+2

El cambio de formato se discutió aquí: http://stackoverflow.com/questions/5117359/any-r-style-guide-checker –

+4

IIRC 'formatR' es un paquete que limpia Código R y cubre algunos puntos en su lista. – baptiste

+1

El segundo objetivo podría ser un poco complicado: un data.frame devuelve TRUE para 'is.list()'. Podría intentar algo como 'is.list (myObject) & (! Is.data.frame (myObject))'. – Iterator

Respuesta

2

EN MIEMBRO, escriba el suyo. Escribir una linda impresora es realmente bastante difícil. Requiere comprensión de tokenización, análisis, creación de AST u otros IR, seguimiento de tablas y ámbitos de símbolos, plantillas, etc.

Pero si puede hacerlo, 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 poner un currículum. También es muy divertido.

Recomendaría "Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages" de Terence Parr. Es un poco difícil de leer, pero el contenido es bastante bueno. Está escrito en un nivel introductorio para los analizadores y es bastante corto, pero contiene todas las partes que necesitarías para escribir esta herramienta.

Si lo construye, ábralo, vuelva aquí y cuéntenos sobre él, y cree un sitio con algunos anuncios para ganar unos pocos dólares. De esa forma, todos pueden usar su increíble creación y obtendrá unos dólares en el proceso.

mejor de la suerte ...

+0

Construí linópteras con precisión de lenguaje para docenas de idiomas haciendo exactamente lo que dices (bueno, uso DMS en lugar de ANTLR). Puedo decirte por amarga experiencia que a menos que tu formateador incluya todas las opciones de formato imaginables, sea gratuito y se ejecute en Mac/Linux/Windows, la gente lo cerrará por todos estos motivos. La mejor de las suertes de hecho. –

+0

Lamento escuchar eso. La gente puede ser coja a veces. ¿Estaría de acuerdo, sin embargo, en que es un ejercicio de programación útil para el aprendizaje? Por cierto, Ira es uno de los padrinos de los analizadores sintácticos y las traducciones de idiomas. Su opinión tiene más peso que Gates o Torvalds en este tema. Honestamente. – Homer6

+0

Ira, ¿tiene alguna otra recomendación de libro? – Homer6

Cuestiones relacionadas