Подтвердить что ты не робот

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

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

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

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

a = 20
b = 30
puts c

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

4b9b3361

Ответ 1

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

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

Ответ 2

  • ruby -c myfile.rb проверит корректный синтаксис Ruby.
  • Reek проверяет код Ruby для общих запахов кода.
  • Roodi проверяет код Ruby для общих объектно-ориентированных проблем дизайна.
  • Flog может предупредить вас об необычно сложном коде.

[Plug] Если ваш проект находится в публичном репозитории Github, Caliper может запускать последние три инструмента и другие на вашем коде каждый время, которое вы совершаете. (Отказ от ответственности: я работаю на суппорте)

Ответ 3

RubyMine (http://www.jetbrains.com/ruby) делает трюк

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

Ни один из ниже не выполнит весь анализ, который делает RubyMine.

  • Рубиновый пакет NetBeans
  • Aptana RadRails
  • gVIM (с синтаксическим плагином с помощью scrooloose)

Каждый из них имеет возможность идентифицировать синтаксические ошибки, такие как неправильное количество скобок, слишком много defs, end, braces и т.д. Но никто не будет идентифицировать неверные вызовы методов, как это делает RubyMine.

Вот почему: это сложно.

Поскольку Ruby чрезвычайно динамичен (и методы, подобные "c", могут быть легко сгенерированы "на лету" ), любой редактор, который пытается идентифицировать несуществующие переменные/методы, должен будет иметь значительную часть всей загруженной среды и несколько программные пути потока, которые постоянно тестируются, чтобы получить точные результаты "валидности". Это намного сложнее, чем на Java, где почти все программирование статично (по крайней мере, когда я сбросил эту шляпу).

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

Ответ 4

Посмотрите RuboCop. Это проверка стиля кода Ruby, основанная на Руководстве по стилю Ruby. Он поддерживается довольно активно и поддерживает все основные реализации Ruby. Он хорошо работает с Ruby 1.9 и 2.0 и имеет отличную интеграцию Emacs.

Ответ 5

Да. Test::Unit

Хорошо, я знаю, что вы уже знаете это, и в некотором смысле это не очень полезный ответ, но вы вызываете негативное последствие утиной печати, что есть (в это время) никоим образом не только написав больше тестов, чем может понадобиться Java.

Итак, для записи см. Test::Unit в стандартной библиотеке Ruby или в одной из других тестовых фреймворков.

Тестирование модулей, которые вы можете запускать и повторять, - лучший способ поймать ошибки, и вам нужно больше их (тесты, а не ошибки:-) в динамических языках, таких как Ruby...

Ответ 6

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 clean!

Ответ 7

Не использовал его еще, но звучит многообещающе (обновится, когда я проверил это).

https://github.com/michaeledgar/laser

Статический анализ и стиль linter для кода Ruby.

Ответ 8

Pelusa приятно, но работает только в rubinius. Однако это не будет проблемой для людей, знакомых с RVM.

Ответ 9

[email protected]:~$ irb
>> a = 20
=> 20
>> b = 30
=> 30
>> puts c
NameError: undefined local variable or method `c' for main:Object
        from (irb):3
>>

Там ya go, инструмент называется "IRB". Получаю ли я награду?

Я только наполовину шучу. Я написал этот второй ответ, надеясь, что вернусь домой, что в Ruby, если вы хотите знать, что что-то определено или нет, вам нужно запустить код.