Где я могу найти активно разрабатываемый инструмент lint для Ruby?

StackOverflow https://stackoverflow.com/questions/1805146

Вопрос

Большая часть кода, который я пишу, написана на Ruby, и время от времени я допускаю какую-нибудь опечатку, которая обнаруживается только через некоторое время.Это раздражает, когда мои скрипты запускают длинные задачи, а вернувшись, я обнаруживаю, что допустил опечатку.

Существует ли активно разрабатываемый инструмент lint для Ruby, который мог бы помочь мне преодолеть это?Можно ли было бы использовать его в системе, которая работает с большим количеством исходных файлов, некоторые из которых загружаются динамически?

Возьмем этот фрагмент в качестве примера:

a = 20
b = 30
puts c

Чтобы выиграть награду, покажите мне инструмент, который определит c переменная как не созданная / неопределенная.

Это было полезно?

Решение

Вы можете попробовать Diamondback Ruby . Он выполняет статическую проверку типов кода Ruby и поэтому обвиняет вас в использовании неопределенной переменной.

Хотя DRuby является продолжающимся исследовательским проектом, он уже довольно хорошо работает для небольших автономных скриптов Ruby. В настоящее время он не может проанализировать большую часть стандартной библиотеки Ruby & # 8220; "из коробки". В настоящее время они работают над вводом Ruby on Rails (см. Их самые последние статьи ).

Другие советы

[Подключайте], если ваш проект находится в общедоступном репозитории 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, если вы хотите знать, что что-то определено или нет, вы должны запустить код .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top