Pregunta

La mayoría del código que escribo está en Ruby, y de vez en cuando, hago un error tipográfico que solo se detecta después de un tiempo. Esto es irritante cuando mis scripts ejecutan tareas largas y vuelvo para encontrar que tuve un error tipográfico.

¿Existe una herramienta de pelusa desarrollada activamente para Ruby que podría ayudarme a superar esto? ¿Sería posible usarlo en un sistema que funcione con muchos archivos de origen, algunos de ellos cargados dinámicamente?

Toma este fragmento de código como ejemplo:

a = 20
b = 30
puts c

Para ganar recompensas, muéstrame una herramienta que detectará la variable c como no creada / no definida.

¿Fue útil?

Solución

Puede probar Diamondback Ruby . Hace una comprobación de tipo estática del código de Ruby, y por lo tanto te culpará por usar una variable no definida.

Si bien DRuby es un proyecto de investigación en curso, ya funciona bastante bien para scripts de Ruby pequeños y autocontenidos. Actualmente, no puede analizar gran parte de la biblioteca estándar de Ruby & # 8220; lista para usar & # 8221 ;. Actualmente están trabajando para escribir Ruby on Rails (consulte sus documentos más recientes ).

Otros consejos

  • ruby ??-c myfile.rb comprobará la sintaxis de Ruby correcta.
  • Reek comprueba el código de Ruby en busca de olores de códigos comunes.
  • Roodi comprueba el código Ruby en busca de problemas comunes de diseño orientados a objetos.
  • Flog puede advertirle acerca de códigos inusualmente complejos.

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

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.

  • NetBeans Ruby pack
  • Aptana RadRails
  • gVIM (con complemento sintáctico por scrooloose)

Cada uno de estos tiene la capacidad de identificar errores de sintaxis, como un número incorrecto de paréntesis, demasiadas definiciones, finales, llaves, etc. Pero ninguno identificará las 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 debería tener una gran parte del entorno completo cargado y múltiples Las rutas de flujo del programa se prueban constantemente para obtener resultados de 'validez' precisos. Esto es mucho más difícil que en Java, donde casi toda la programación es estática (al menos fue cuando dejé de usar ese sombrero).

Esta capacidad para generar fácilmente métodos sobre la marcha es una de las razones por las que la comunidad considera que las pruebas son tan importantes. Realmente recomiendo que intentes probar también.

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

Sí. Test::Unit

Bien, sé que ya sabes esto y que, en cierto sentido, esta es una respuesta que no es útil, pero traes la consecuencia negativa de la tipificación del pato, que en este momento no hay manera (simplemente) de hacerlo. escribiendo más pruebas de las que podría necesitar Java.

Por lo tanto, para el registro, consulte Test :: Unit en la Biblioteca estándar de Ruby o en uno de los otros marcos de prueba.

Tener pruebas de unidad 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 ...

nitpick puede 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!

No lo he usado todavía, pero suena prometedor (se actualizará cuando haya probado esto).

https://github.com/michaeledgar/laser

Análisis estático e indicador de estilo para el código Ruby.

Pelusa es agradable, pero solo funciona en Rubinius. Sin embargo, esto no debe ser un problema para las 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
>>

Ahí tienes, la herramienta se llama " IRB " ;. ¿Obtengo la recompensa?

Sólo estoy bromeando a medias. Escribí esta segunda respuesta para, con suerte, aclarar que, en Ruby, si quieres saber si algo está definido o no, tienes que ejecutar el código .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top