Есть ли быстрый способ найти недостающие концы в Ruby?

синтаксическая ошибка, неожиданный конец $, ожидающий keyword_end

Мы все были там! Если предположить, что достаточно кода изменилось, что быстрый взгляд на git diff или тому подобное не делает его очевидным, есть ли простой способ найти отсутствующий end (не дожидаясь перехода на язык с отступом, например Python)?

FWIW, я использую Sublime Text 2 в качестве моего редактора.

Ответы

Ответ 1

Если вы используете Ruby 1.9, попробуйте флаг -w при запуске рубиновой программы.

# t.rb
class Example
  def meth1
    if Time.now.hours > 12
      puts "Afternoon"
  end
  def meth2
    # ...
  end
end

ruby t.rb  
=> t.rb:10: syntax error, unexpected $end, expecting keyword_end

ruby -w t.rb
=> t.rb:5: warning: mismatched indentations at 'end' with 'if' at 3
   t.rb:9: warning: mismatched indentations at 'end' with 'def' at 2
   t.rb:10: syntax error, unexpected $end, expecting keyword_end

Источник:

http://pragdave.blogs.pragprog.com/pragdave/2008/12/ruby-19-can-check-your-indentation.html

Ответ 2

Если вы используете рельсы, вы можете запустить проблемный файл специально с флагом -w.

Если вы все еще не можете найти несоответствующее несоответствие, то мой путь к решению этой проблемы - это просто комментировать фрагменты кода, пока я не смогу выделить проблемную область.

В OS X вы можете использовать команду +/для комментирования выделенной части текста.