Где я могу найти активно разрабатываемый инструмент lint для Ruby?
-
05-07-2019 - |
Вопрос
Большая часть кода, который я пишу, написана на Ruby, и время от времени я допускаю какую-нибудь опечатку, которая обнаруживается только через некоторое время.Это раздражает, когда мои скрипты запускают длинные задачи, а вернувшись, я обнаруживаю, что допустил опечатку.
Существует ли активно разрабатываемый инструмент lint для Ruby, который мог бы помочь мне преодолеть это?Можно ли было бы использовать его в системе, которая работает с большим количеством исходных файлов, некоторые из которых загружаются динамически?
Возьмем этот фрагмент в качестве примера:
a = 20
b = 30
puts c
Чтобы выиграть награду, покажите мне инструмент, который определит c
переменная как не созданная / неопределенная.
Решение
Вы можете попробовать Diamondback Ruby . Он выполняет статическую проверку типов кода Ruby и поэтому обвиняет вас в использовании неопределенной переменной.
Хотя DRuby является продолжающимся исследовательским проектом, он уже довольно хорошо работает для небольших автономных скриптов Ruby. В настоящее время он не может проанализировать большую часть стандартной библиотеки Ruby & # 8220; "из коробки". В настоящее время они работают над вводом Ruby on Rails (см. Их самые последние статьи а>). р>
Другие советы
ruby -c myfile.rb
проверит правильность синтаксиса Ruby.- Вонючий проверяет Ruby-код на наличие общих запахов кода.
- Руди проверяет код Ruby на наличие распространенных проблем объектно-ориентированного проектирования.
- Выпороть могу предупредить вас о необычно сложном коде.
[Подключайте], если ваш проект находится в общедоступном репозитории Github, Штангенциркуль вы можете запускать последние три инструмента и другие в вашем коде каждый раз, когда вы фиксируете.(Отказ от ответственности:Я работаю на суппорте)
Рубимин (http://www.jetbrains.com/ruby) делает свое дело:
альтернативный текст http://img707.imageshack.us/img707/5688/31911448.png
Ни один из приведенных ниже методов не будет выполнять весь анализ, который выполняет RubyMine.
- Пакет NetBeans Ruby pack
- Рельсы Aptana RadRails
- gVIM (с синтаксическим плагином от scrooloose)
Каждый из них способен выявлять синтаксические ошибки, такие как неправильное количество круглых скобок, слишком много определений, концов, фигурных скобок и т.д.Но ни один из них не идентифицирует недопустимые вызовы методов так, как это делает RubyMine.
И вот почему:это сложно.
Поскольку Ruby чрезвычайно динамичен (и методы, подобные 'c', могут быть легко сгенерированы "на лету"), любому редактору, который пытается идентифицировать несуществующие переменные / методы, потребуется загрузить большую часть всей среды и постоянно тестировать несколько путей потока программы, чтобы получить точные результаты "валидности".Это намного сложнее, чем в Java, где почти все программирование статично (по крайней мере, так было, когда я снял эту шляпу).
Эта способность легко генерировать методы "на лету" является одной из причин, по которой сообщество так высоко ценит тестирование.Я действительно рекомендую вам также попробовать тестирование.
Посмотрите RuboCop . Это средство проверки стиля кода Ruby, основанное на руководстве по стилю Ruby . Он поддерживается довольно активно и поддерживает все основные реализации Ruby. Он хорошо работает с Ruby 1.9 и 2.0 и имеет отличную интеграцию с Emacs.
Да. <Код> Test :: Unit код>
Хорошо, я знаю, что вы уже знаете это, и что в некотором смысле это бесполезный ответ, но вы упоминаете негативные последствия типизации утки, которые (в настоящее время) никак не могут обойти написание большего количества тестов, чем может потребоваться что-то вроде Java.
Итак, запись приведена в разделе Test :: Unit
в стандартной библиотеке Ruby или в одной из других тестовых сред.
Наличие модульных тестов, которые вы можете запускать и перезапускать, - лучший способ отловить ошибки, и вам нужно их больше (тесты, а не ошибки :-) в динамических языках, таких как 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!
Еще не использовал, но звучит многообещающе (будет обновлено, когда я проверю это).
https://github.com/michaeledgar/laser
Статический анализ и стиль для кода Ruby.
Pelusa хороша, но работает только на рубине. Это не должно быть проблемой для людей, знакомых с 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, если вы хотите знать, что что-то определено или нет, вы должны запустить код .