web-dev-qa-db-ja.com

Ruby用に活発に開発されているlintツールはどこにありますか?

私が書いたコードのほとんどはRubyで書かれており、たまにタイプミスをして、しばらくするとキャッチされてしまいます。スクリプトで長いタスクを実行しているときに、タイプミスがあったことに気付くと、これはイライラします。

これを克服するのに役立つ、活発に開発されたRuby用のlintツールはありますか?多くのソースファイルを処理するシステム全体で使用できますか?それらの一部は動的にロードされますか?

このスニペットを例として取り上げます。

a = 20
b = 30
puts c

賞金を獲得するには、c変数を未作成/未定義として検出するツールを見せてください。

39
Geo

Diamondback Ruby 試してみてください。 Rubyコードの静的タイプチェックを行うため、未定義の変数を使用したことで非難されます。

DRubyは進行中の研究プロジェクトですが、小さな自己完結型のRubyスクリプトに対しては、すでに非常にうまく機能しています。現在、Ruby =標準ライブラリ「すぐに使える」。現在、彼らは入力に向けて取り組んでいますRuby on Rails(彼らの 最新の論文を参照) )。

13
akuhn
  • Ruby -c myfile.rbは正しいRuby構文をチェックします。
  • Reek チェックRuby一般的なコードの臭いのコード。
  • Roodi チェックRuby一般的なオブジェクト指向設計の問題のコード。
  • Flog 異常に複雑なコードについて警告することができます。

[プラグ]プロジェクトがパブリックGithubリポジトリにある場合、 Caliper は、コミットするたびに、コードで後者の3つのツールなどを実行できます。 (免責事項:私はキャリパーに取り組んでいます)

24
Avdi

RubyMinehttp://www.jetbrains.com/Ruby )はトリックを行います:

代替テキストhttp://img707.imageshack.us/img707/5688/31911448.png

以下のいずれも、RubyMineが実行するすべての分析を実行するわけではありません。

  • NetBeans Rubyパック
  • Aptana RadRails
  • gVIM(scroolooseによるsyntasticプラグイン付き)

これらはそれぞれ、括弧の数が間違っている、定義、終了、中括弧が多すぎるなどの構文エラーを識別する機能があります。ただし、RubyMineのように無効なメソッド呼び出しを識別するものはありません。

理由は次のとおりです。難しいです。

Rubyは非常に動的であるため(そして 'c'のようなメソッドはその場で簡単に生成できます)、存在しない変数/メソッドを識別しようとするエディターは、正確な「有効性」の結果を得るために、環境全体がロードされ、複数のプログラムフローパスが常にテストされています。これは、ほとんどすべてのプログラミングが静的であるJavaよりもはるかに困難です(少なくとも、私はその帽子を落としました)。

その場でメソッドを簡単に生成できるこの機能は、コミュニティがこのように高い評価を得ている理由の1つです。テストもお勧めします。

11
btelles

RuboCop をご覧ください。これはRuby Rubyスタイルガイド に基づくコードスタイルチェッカーです。かなり積極的に維持され、すべての主要なRuby実装をサポートします。 Ruby 1.9および2.0でうまく機能し、Emacsとの統合が優れています。

7
Bozhidar Batsov

はい。 Test::Unit

わかりました、あなたはすでにこれを知っていて、ある意味ではこれは役に立たない答えですが、ダックタイピングの否定的な結果を引き起こします。(現時点では)テストを追加するだけではどうしようもありません。 Javaのようなものが必要になるかもしれません。

したがって、記録については、Ruby標準ライブラリまたは他のテストフレームワークの1つにあるTest::Unitを参照してください。

実行して再実行できる単体テストを用意することがエラーをキャッチするための最良の方法であり、Rubyのような動的言語ではさらに多くの単体テスト(エラーではなくテスト:-)が必要です...

5
DigitalRoss

nitpick あなたが探しているものかもしれません。

このコードで:

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

puts MyString.new("leet").awesome

...出力:

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

Pelusa は素晴らしいですが、rubiniusでのみ動作しています。ただし、これはRVMに精通している人にとっては問題にはならないはずです。

0
phil pirozhkov

まだ使用していませんが、有望に聞こえます(これをテストすると更新されます)。

https://github.com/michaeledgar/laser

Rubyコードの静的分析とスタイルリンター。

0
cvshepherd