Frage

Die meisten der Code, den ich schreibe, ist in Ruby, und jeder einmal in eine Weile, ich einige Tippfehler machen, die erst nach einer Weile verfängt. Das ist ärgerlich, wenn ich meine Skripte laufen lange Aufgaben haben, und kehre ich einen Tippfehler zu finden hatte.

Gibt es ein aktiv entwickelten Flusen Werkzeug für Ruby, die mich zu überwinden helfen könnten? Wäre es möglich, sie über ein System zu verwenden, die mit einer Menge von Quelldateien arbeiten, einige von ihnen dynamisch geladen?

Nehmen Sie diesen Schnipsel als Beispiel:

a = 20
b = 30
puts c

Bounty Um zu gewinnen, zeigen Sie mir ein Werkzeug, das die c Variable erkennt als nicht erstellt / nicht definiert.

War es hilfreich?

Lösung

Sie können Diamond Rubin versuchen. Es macht einen statischen typecheck von Ruby-Code, und Sie werden somit für die Verwendung eine undefinierte Variable schuld.

Während DRuby eines laufenden Forschungsvorhabens ist es, es funktioniert schon ganz gut für kleine, in sich geschlossene Ruby-Skripte. Derzeit ist es nicht mehr viel von der Ruby-Standard-Bibliothek analysieren „out-of-the-box“. Derzeit in Richtung sie arbeiten Ruby on Rails eingeben (siehe ihre jüngsten Papiere ).

Andere Tipps

  • ruby -c myfile.rb für die korrekte Ruby-Syntax überprüfen.
  • Reek prüft Ruby-Code für gemeinsamen Code riecht.
  • Roodi für gemeinsame objektorientierte Design-Fragen Ruby-Code überprüft.
  • Flog können Sie über ungewöhnlich komplexen Code warnen.

[Plug] Wenn Ihr Projekt ist in einem öffentlichen Github-Repository, Caliper können die drei zuletzt genannten Werkzeuge und andere laufen jedes Mal auf dem Code, den Sie begehen. (Disclaimer: Ich arbeite auf Caliper)

RubyMine ( http://www.jetbrains.com/ruby ) funktioniert der Trick:

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

Keine der unten wird alles tun, um die Analyse, dass RubyMine der Fall ist.

  • NetBeans Ruby-Pack
  • Aptana RadRails
  • gVim (mit syntastic Plugin von scrooloose)

Jeder von ihnen hat die Fähigkeit, Syntaxfehler wie falsche Anzahl von Klammern, zu viele defs zu identifizieren, endet, Klammern, etc. Aber keiner wird ungültig Methode identifizieren ruft die Art und Weise RubyMine der Fall ist.

Hier ist der Grund: es ist schwierig,

.

Da Rubin extrem dynamisch ist (und Methoden wie ‚c‘ leicht on the fly erzeugt werden könnten), mit einem beliebigen Editor, der zu identifizieren, nicht vorhandene Variablen versucht / Methoden müßten einen großen Teil des gesamten evironment haben geladen und mehrere Programmablaufpfade ständig getestet, um Ergebnisse genau ‚Gültigkeit‘ zu erhalten. Das ist viel schwieriger als in Java, wo fast alle Programmier statisch ist (zumindest war es, als ich den Hut fallen gelassen).

Diese Fähigkeit, leicht Methoden on the fly zu erzeugen, ist einer der Gründe, die Tests der Community zu so hohen Wertschätzung hält. Ich wirklich empfehlen Sie versuchen auch zu testen.

Hier finden Sie aktuelle RuboCop . Es ist ein Kontrolleur Ruby-Code-Stil basiert auf dem Ruby-Style Guide . Es ist ziemlich aktiv gepflegt und unterstützt alle gängigen Ruby-Implementierungen. Es funktioniert gut mit Ruby 1.9 und 2.0 und hat eine große Emacs Integration.

Ja. Test::Unit

Ok, ich weiß, du dies bereits weißt, und dass in einem gewissen Sinne ist dies eine nicht-zweckdienliche Antwort, aber Sie tun bringen die negative Folge von Duck Typing auf, dass es Art ist (zu dieser Zeit) keine Möglichkeit, um nur mehr Tests als so etwas wie Java zu schreiben brauchen könnte.

Also, für die Aufzeichnung, siehe Test::Unit in dem Ruby-Standard Library oder eines des anderen Test-Frameworks.

Mit Unit-Tests, die Sie ausführen können und Rerun ist der beste Weg, um Fehler zu fangen, und Sie brauchen mehr von ihnen (Tests, keine Fehler :-) in dynamischen Sprachen wie Ruby ...

nitpick könnte sein, was Sie lookng.

Mit diesem Code:

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

puts MyString.new("leet").awesome

... es gibt:

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

Hat es noch nicht benutzt, aber klingt vielversprechend (wird aktualisiert, wenn ich das getestet habe).

https://github.com/michaeledgar/laser

Statische Analyse und Stil Linter für Ruby-Code.

Pelusa schön, aber ist in Rubinius arbeiten nur. Diese shouln't obwohl ein proplem für Menschen vertraut mit RVM sein.

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

Es ya geht, wird das Werkzeug "IRB" genannt. Muss ich die Prämie bekommen?

Ich scherze nur die Hälfte. Ich schrieb diese zweite Antwort auf hoffentlich zu Hause den Punkt zu fahren, die in Ruby, wenn Sie wissen wollen, dass etwas definiert ist oder nicht, Sie haben den Code auszuführen .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top