Domanda

La maggior parte del codice che scrivo è in Ruby, e ogni tanto faccio qualche errore di battitura che viene catturato solo dopo un po '. Questo è irritante quando i miei script eseguono compiti lunghi e torno a scoprire che avevo un refuso.

Esiste uno strumento di lanugine sviluppato attivamente per Ruby che potrebbe aiutarmi a superare questo? Sarebbe possibile usarlo su un sistema che funziona con molti file sorgente, alcuni dei quali caricati in modo dinamico?

Prendi questo frammento come esempio:

a = 20
b = 30
puts c

Per vincere la taglia, mostrami uno strumento che rileverà la variabile c come non creata / non definita.

È stato utile?

Soluzione

Puoi provare Diamondback Ruby . Esegue un controllo di tipo statico del codice Ruby e pertanto ti incolperà per l'utilizzo di una variabile non definita.

Sebbene DRuby sia un progetto di ricerca in corso, funziona già abbastanza bene per script Ruby piccoli e indipendenti. Attualmente, non è in grado di analizzare gran parte della libreria standard di Ruby "out-of-the-box". Attualmente stanno lavorando per scrivere Ruby on Rails (vedi i loro articoli più recenti ).

Altri suggerimenti

  • ruby ??-c myfile.rb verificherà la corretta sintassi di Ruby.
  • Reek controlla il codice Ruby per odori di codice comuni.
  • Roodi controlla il codice Ruby per problemi di progettazione orientati agli oggetti comuni.
  • Flog può avvisarti di un codice insolitamente complesso.

[Plug] Se il tuo progetto si trova in un repository Github pubblico, Caliper può eseguire questi ultimi tre strumenti e altri sul tuo codice ogni volta che ti impegni. (Dichiarazione di non responsabilità: lavoro su Caliper)

RubyMine ( http://www.jetbrains.com/ruby ) fa il trucco:

alt text http://img707.imageshack.us/img707/5688/31911448. png

Nessuna delle opzioni seguenti eseguirà tutte le analisi eseguite da RubyMine.

  • NetBeans Ruby pack
  • Aptana RadRails
  • gVIM (con plugin sintetico di scrooloose)

Ognuno di questi ha la capacità di identificare errori di sintassi come un numero errato di parentesi, troppi def, finali, parentesi graffe, ecc. Ma nessuno identificherà le chiamate di metodo non valide come fa RubyMine.

Ecco perché: è difficile.

Poiché Ruby è estremamente dinamico (e metodi come 'c' potrebbero essere facilmente generati al volo), qualsiasi editor che tenta di identificare variabili / metodi inesistenti dovrebbe avere una gran parte dell'intero evironment caricato e multiplo percorsi di flusso del programma costantemente testati per ottenere risultati accurati di "validità". Questo è molto più difficile che in Java, dove quasi tutta la programmazione è statica (almeno quando ho lasciato cadere quel cappello).

Questa capacità di generare facilmente metodi al volo è uno dei motivi per cui la community tiene così tanto in considerazione i test. Ti consiglio vivamente di provare anche tu.

Dai un'occhiata a RuboCop . È un controllo dello stile del codice Ruby basato sulla Guida allo stile di Ruby . È mantenuto piuttosto attivamente e supporta tutte le principali implementazioni di Ruby. Funziona bene con Ruby 1.9 e 2.0 e ha un'ottima integrazione con Emacs.

Sì. Test :: Unit

Ok, lo so che lo sai già e che in un certo senso si tratta di una risposta non utile, ma fai emergere le conseguenze negative della tipizzazione delle anatre, che non c'è (in questo momento) nessun modo per aggirare scrivere più test di quanti potrebbero essere necessari qualcosa come Java.

Quindi, per la cronaca, vedi Test :: Unit nella Ruby Standard Library o in uno degli altri framework di test.

Avere test unitari che è possibile eseguire e rieseguire è il modo migliore per rilevare gli errori e ne occorrono di più (test, non errori :-) in linguaggi dinamici come Ruby ...

nitpick potrebbe essere quello che stai cercando.

Con questo codice:

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

puts MyString.new("leet").awesome

... genera:

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

Non l'ho ancora usato, ma sembra promettente (verrà aggiornato quando l'ho provato).

https://github.com/michaeledgar/laser

Analisi statica e linter stile per il codice Ruby.

Pelusa è carino, ma funziona solo su rubinius. Questo non dovrebbe essere un sostegno per le persone che hanno familiarità 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
>>

Ecco, lo strumento si chiama " IRB " ;. Ricevo la taglia?

Sto solo scherzando a metà. Ho scritto questa seconda risposta per spero di portare a casa il punto che in Ruby, se vuoi sapere che qualcosa è definito o meno, devi eseguire il codice .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top