Question

La plupart du code que j'écris est en Ruby, et de temps en temps, je fais des fautes de frappe qui ne sont attrapées qu'après un certain temps. C’est irritant lorsque mes scripts exécutent de longues tâches et que j’ai eu une faute de frappe.

Existe-t-il un outil anti-peluche activement développé pour Ruby qui pourrait m'aider à surmonter ce problème? Serait-il possible de l'utiliser sur un système fonctionnant avec de nombreux fichiers source, dont certains chargés de manière dynamique?

Prenez cet extrait comme exemple:

a = 20
b = 30
puts c

Pour gagner des primes, montrez-moi un outil qui détectera la variable c comme non créée / non définie.

Était-ce utile?

La solution

Vous pouvez essayer Diamondback Ruby . Il effectue une vérification statique du code Ruby, et vous blâmera donc d'utiliser une variable non définie.

Bien que DRuby soit un projet de recherche en cours, il fonctionne déjà très bien pour les petits scripts Ruby autonomes. Actuellement, il est impossible d'analyser une grande partie de la bibliothèque standard Ruby prête à l'emploi & # 8221 ;. Ils s’emploient actuellement à taper Ruby on Rails (voir leurs documents les plus récents ).

Autres conseils

  • ruby ??-c monfichier.rb va vérifier la syntaxe correcte de Ruby.
  • Reek recherche dans le code Ruby les odeurs courantes.
  • Roodi vérifie le code Ruby à la recherche de problèmes courants de conception orientée objet.
  • Flog peut vous avertir d'un code inhabituellement complexe.

[Plug] Si votre projet se trouve dans un référentiel Github public, Caliper peut exécuter les trois derniers outils et d'autres. sur votre code chaque fois que vous vous engagez. (Avertissement: je travaille sur Caliper)

RubyMine ( http://www.jetbrains.com/ruby ) fait le tour:

texte de remplacement http://img707.imageshack.us/img707/5688/31911448. png

Aucun des éléments ci-dessous ne fera toute l'analyse que RubyMine effectue.

  • NetBeans Ruby Pack
  • Aptana RadRails
  • gVIM (avec le plugin syntastic de scrooloose)

Chacun de ceux-ci a la capacité d'identifier des erreurs de syntaxe telles qu'un nombre incorrect de parenthèses, un trop grand nombre de définitions, d'extrémités, d'accolades, etc. Mais aucun ne permettra d'identifier les appels de méthode non valides comme RubyMine.

Voici pourquoi: c'est difficile.

Puisque Ruby est extrêmement dynamique (et que des méthodes telles que "c" peuvent facilement être générées à la volée), tout éditeur essayant d'identifier des variables / méthodes inexistantes aurait besoin de charger une grande partie de l'environnement entier et d'en créer plusieurs. les chemins de flux de programme sont constamment testés pour obtenir des résultats de «validité» précis. C'est beaucoup plus difficile qu'en Java, où presque toute la programmation est statique (du moins c'était le cas lorsque j'ai laissé tomber ce chapeau).

Cette capacité à générer facilement des méthodes à la volée est l’une des raisons pour lesquelles la communauté tient à tester de telles valeurs. Je recommande vraiment d'essayer les tests également.

Consultez RuboCop . Il s'agit d'un vérificateur de style de code Ruby basé sur le Guide de style Ruby . Il est maintenu assez activement et supporte toutes les implémentations majeures de Ruby. Cela fonctionne bien avec Ruby 1.9 et 2.0 et a une excellente intégration Emacs.

Oui. Test :: Unit

Ok, je sais que vous le savez déjà et que, dans un certain sens, cette réponse n’est pas utile, mais vous soulignez les conséquences négatives de la frappe à la machine, qu’il n’ya pas de solution (pour le moment) écrire plus de tests que ce dont Java aurait peut-être besoin.

Donc, pour l'enregistrement, voir Test :: Unit dans la bibliothèque Ruby Standard ou l'un des autres frameworks de test.

Avoir des tests unitaires que vous pouvez exécuter et réexécuter est le meilleur moyen de détecter les erreurs, et vous en avez besoin de plus (de tests, pas d'erreurs :-) dans des langages dynamiques comme Ruby ...

nitpick est peut-être ce que vous cherchez.

Avec ce code:

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

puts MyString.new("leet").awesome

... il génère:

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

Je ne l'ai pas encore utilisé, mais cela semble prometteur (la mise à jour le sera lorsque j'aurai testé cela).

https://github.com/michaeledgar/laser

Analyse statique et style linter pour le code Ruby.

Pelusa est agréable, mais ne fonctionne que dans rubinius. Cela ne devrait pas être un problème pour les gens familiers avec RVM cependant.

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

Voilà, l'outil s'appelle "IRB". Est-ce que je reçois la prime?

Je plaisante à moitié. J’ai écrit cette deuxième réponse pour faire bien comprendre que si vous voulez savoir si quelque chose est défini ou non, vous devez exécuter le code .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top