Я - большой поклонник Resharper в Visual Studio. Это имеет некоторые потрясающие инструменты рефакторинга, подобные тому, что Вы входите в Eclipse для Java. Есть ли что-нибудь как это для Ruby? Еще лучше есть ли плагин или что-то в Vim, который делает рефакторинг для кода Ruby как переименование всех экземпляров метода или переменной, переименование классов по всему сайту, и т.д.?
Проблема с некоторыми рефакторингами в Ruby и других языках с динамической типизацией заключается в отсутствии информации о реорганизуемом типе.
Из записи блога Седрика Буста:
Несколько месяцев назад я предложил следующий фрагмент кода автору браузера Ruby Refactoring:
def f1(o)
o.init
end
def f2(o)
o.init
end
class C
def init
...
end
end
И я спросил его: «Если я переименую C.init в C.init2, как узнать, какой o.init нужно переименовать в f1 и f2? ".
Его ответ был однозначным:
«Эта проблема сложна для динамически типизированного языка. Я думаю, компьютер не может определить, нужно ли их переименовывать или нет».
«Таким образом, Ruby Refactoring Browser предоставляет две функции, одну. переименовывает все методы с одинаковыми именами, а другой переименовывает только те методы и вызовы, которые принадлежат классу cleary. Первый переименовывает o.init в f1 и f2, а второй не переименовывает их ».
Прочитать все запись здесь: Динамический язык, рефакторинг IDE. Выбери один.
При этом у Jetbrains есть Ruby Mine IDE , в которой имеется большое количество рефакторингов . Я не уверен, как они справляются с этим сценарием.
Рефакторинг Ruby Mine http://img709.imageshack.us/img709/917/refactoringsonrubymine.png
Насколько мне известно, для VIM нет ничего похожего.
Мне также нравится Resharper для разработки на C# - я знаю, что Jetbrains выпустила Ruby IDE под названием RubyMine, которая включает инструменты рефакторинга и т.д. Я хотел попробовать ее, но предпочитаю Textmate на Mac. Не уверен насчет инструментов VIM.
Jetbrains выпускает IDE RubyMine, в которой есть базовая функциональность рефакторинга, но она и близко не стоит по мощности с resharper (удивительно, ведь обе программы выпускает одна и та же компания). Я обычно использую только rubymine после того, как наткнулся на него несколько месяцев назад.