ruby code-analysis static-analysis lint

¿Dónde puedo encontrar una herramienta de pelusa desarrollada activamente para Ruby?



code-analysis static-analysis (9)

Sí. Test::Unit

Ok, sé que ya sabes esto y que en cierto sentido esta es una respuesta no útil, pero sacas la consecuencia negativa de la mecanografía de pato, que de alguna manera (de momento) no hay forma de evitar escribir más pruebas que algo como Java podría necesitar.

Entonces, para el registro, vea Test::Unit en Ruby Standard Library o uno de los otros frameworks de prueba.

Tener las pruebas unitarias que puede ejecutar y volver a ejecutar es la mejor manera de detectar errores, y necesita más de ellos (pruebas, no errores :-) en lenguajes dinámicos como Ruby ...

La mayor parte del código que escribo está en Ruby, y de vez en cuando hago algún error tipográfico que solo queda atrapado después de un tiempo. Esto es irritante cuando tengo mis scripts ejecutando tareas largas, y regreso para encontrar que tuve un error tipográfico.

¿Hay alguna herramienta de pelusa desarrollada activamente para Ruby que pueda ayudarme a superar esto? ¿Sería posible usarlo en un sistema que funciona con una gran cantidad de archivos fuente, algunos de ellos cargados dinámicamente?

Tome este fragmento como un ejemplo:

a = 20 b = 30 puts c

Para ganar recompensa, muéstreme una herramienta que detectará la variable c como no creada / indefinida.


Eche un vistazo a RuboCop . Es un comprobador de estilo de código de Ruby basado en la RuboCop . Se mantiene bastante activo y es compatible con todas las principales implementaciones de Ruby. Funciona bien con Ruby 1.9 y 2.0 y tiene una gran integración de Emacs.


Podría darle una oportunidad a Diamondback Ruby . Realiza una comprobación de tipo estático del código de Ruby y, por lo tanto, le culpará por utilizar una variable no definida.

Si bien DRuby es un proyecto de investigación en curso, ya funciona bastante bien para guiones de Ruby pequeños y autónomos. Actualmente, no puede analizar gran parte de la biblioteca estándar de Ruby "out-of-the-box". Actualmente están trabajando para tipear Ruby on Rails (ver sus trabajos más recientes ).


Todavía no lo he usado, pero parece prometedor (se actualizará cuando lo haya probado).

https://github.com/michaeledgar/laser

Análisis estático y linter de estilo para código Ruby.


nitpick podría ser lo que estás buscando.

Con este código:

class MyString < String def awesome self.gsub("e", "3").gsub("l", "1").uppercase end end puts MyString.new("leet").awesome

... produce:

$ nitpick misspelling.rb *** Nitpick had trouble loading "misspelling.rb": NoMethodError undefined method `uppercase'' for "133t":MyString Nothing to report boss! He''s clean!


RubyMine ( http://www.jetbrains.com/ruby ) hace el truco:

texto alternativo http://img707.imageshack.us/img707/5688/31911448.png

Ninguno de los siguientes hará todo el análisis que hace RubyMine.

  • Paquete NetBeans Ruby
  • Aptana RadRails
  • gVIM (con plugin sintáctico por scrooloose)

Cada uno de estos tiene la capacidad de identificar errores de sintaxis, como el número incorrecto de paréntesis, demasiados defs, ends, llaves, etc. Pero ninguno identificará llamadas a métodos no válidos como lo hace RubyMine.

He aquí por qué: es difícil.

Dado que Ruby es extremadamente dinámico (y los métodos como ''c'' podrían generarse fácilmente sobre la marcha), cualquier editor que intente identificar variables / métodos inexistentes necesitaría tener una gran parte de todo el entorno cargado y múltiples rutas de flujo de programas. constantemente probado para obtener resultados precisos de ''validez''. Esto es mucho más difícil que en Java, donde casi toda la programación es estática (al menos lo era cuando dejé caer ese sombrero).

Esta capacidad de generar métodos fácilmente sobre la marcha es una de las razones por las que la comunidad realiza pruebas con tanta estima. Realmente te recomiendo que intentes probar también.


Pelusa es agradable, pero solo funciona en rubinius. Sin embargo, esto no debería ser un proplem para personas familiarizadas con RVM.


avdi@lazarus:~$ irb >> a = 20 => 20 >> b = 30 => 30 >> puts c NameError: undefined local variable or method `c'' for main:Object from (irb):3 >>

Ya ve, la herramienta se llama "IRB". ¿Recibo la recompensa?

Solo estoy medio bromeando. Escribí esta segunda respuesta para recordar que en Ruby, si quieres saber si algo está definido o no, debes ejecutar el código .


  • ruby -c myfile.rb comprobará la sintaxis correcta de Ruby.
  • Reek revisa el código de Ruby para detectar olores de códigos comunes.
  • Roodi comprueba el código de Ruby para Roodi comunes de diseño orientado a objetos.
  • Flog puede advertirte sobre códigos inusualmente complejos.

[Plug] Si su proyecto está en un repositorio público de Github, Caliper puede ejecutar las últimas tres herramientas y otras en su código cada vez que se compromete. (Descargo de responsabilidad: yo trabajo en Caliper)