現在開発されている Ruby 用の lint ツールはどこで見つけられますか?
-
05-07-2019 - |
質問
私が書いているコードのほとんどは Ruby で作られていますが、時々タイプミスをすることがありますが、それはしばらくしてから発見されます。これは、スクリプトで長いタスクを実行していて、戻ってみるとタイプミスがあったことにイライラするものです。
これを克服するのに役立つ、現在開発されている Ruby 用の lint ツールはありますか?多くのソース ファイル (一部は動的にロードされる) を扱うシステム全体でこれを使用することは可能でしょうか?
このスニペットを例として取り上げます。
a = 20
b = 30
puts c
賞金を獲得するには、 c
変数は作成されていない/未定義です。
解決
Diamondback Ruby を試してみてください。 Rubyコードの静的型チェックを実行するため、未定義の変数を使用したことであなたを責めます。
DRubyは現在進行中の研究プロジェクトですが、小さな自己完結型のRubyスクリプトに対してはすでに非常にうまく機能しています。現在、Ruby標準ライブラリの多くをすぐに分析することはできません“すぐに使える”。現在、Ruby on Railsの入力に取り組んでいます(最新の論文)。
他のヒント
ルビーマイン (http://www.jetbrains.com/ruby) 効果があります:
代替テキスト http://img707.imageshack.us/img707/5688/31911448.png
以下のいずれも、RubyMine が行うすべての分析を行うわけではありません。
- NetBeans Ruby パック
- アプタナ RadRails
- gVIM (scrooloose による構文プラグインを使用)
これらのそれぞれには、括弧の数が間違っている、defs、ends、中括弧が多すぎるなどの構文エラーを識別する機能があります。ただし、RubyMine のように無効なメソッド呼び出しを識別するものはありません。
その理由は次のとおりです。それは難しい。
Ruby は非常に動的であるため (および「c」のようなメソッドはその場で簡単に生成できます)、存在しない変数/メソッドを識別しようとするエディターでは、環境全体の大部分をロードし、複数のプログラム フロー パスを用意する必要があります。正確な「妥当性」の結果を得るために常にテストされています。これは、ほとんどすべてのプログラミングが静的である Java よりもはるかに困難です (少なくとも私が帽子を脱いだときはそうでした)。
オンザフライでメソッドを簡単に生成できるこの機能が、コミュニティがテストをこれほど高く評価している理由の 1 つです。ぜひテストしてみることをお勧めします。
RuboCop をご覧ください。これは、 Ruby Style Guide に基づくRubyコードスタイルチェッカーです。それはかなり積極的に維持され、すべての主要なRuby実装をサポートしています。 Ruby 1.9およびRuby 1.9でうまく動作し、Emacsとの統合が優れています。
はい。 Test :: Unit
OK Javaのようなものが必要とするよりも多くのテストを書く。
したがって、記録については、Ruby標準ライブラリまたは他のテストフレームワークの Test :: Unit
を参照してください。
実行および再実行できる単体テストを用意することは、エラーをキャッチするための最良の方法です。Rubyなどの動的言語では、エラー(テストではなくテスト:-)がさらに必要になります...
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!
Pelusa は便利ですが、Rubiniusでのみ動作しています。ただし、これは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
>>
やっぱり、このツールは「IRB」と呼ばれています。賞金はもらえますか?
私は半分冗談を言っています。 Rubyで、何かが定義されているかどうかを知りたい場合は、コードを実行する必要があります。