Где я могу найти активно разработанный инструмент Lint для Ruby? - PullRequest
38 голосов
/ 26 ноября 2009

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

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

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

a = 20
b = 30
puts c

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

Ответы [ 9 ]

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

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

13 голосов
/ 07 декабря 2009

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

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

11 голосов
/ 05 декабря 2009

RubyMine (http://www.jetbrains.com/ruby) делает свое дело:

альтернативный текст http://img707.imageshack.us/img707/5688/31911448.png

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

  • Пакет Ruby NetBeans
  • Aptana RadRails
  • gVIM (с синтетическим плагином от scrooloose)

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

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

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

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

7 голосов
/ 17 апреля 2013

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

5 голосов
/ 26 ноября 2009

Да. Test::Unit

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

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

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

2 голосов
/ 28 октября 2010

Нитпик может быть то, что вы ищете.

С этим кодом:

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!
0 голосов
/ 29 августа 2012

Пелуса это хорошо, но работает только в рубине. Это не должно быть проблемой для людей, знакомых с RVM.

0 голосов
/ 24 декабря 2011

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

https://github.com/michaeledgar/laser

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

0 голосов
/ 02 декабря 2009
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, если вы хотите знать, что-то определено или нет, вы должны запустить код .

...