有没有快速找到Ruby中缺失的结尾的方法?

时间:2012-10-12 01:10:52

标签: ruby syntax

  

语法错误,意外$ end,期待keyword_end

我们都去过那儿!假设有足够的代码改变了,快速浏览一下git diff或类似内容并没有显而易见,是否有一种简单的方法可以找到缺少end(缺少切换到基于缩进的语言,如Python )?

FWIW,我使用Sublime Text 2作为我的编辑。

3 个答案:

答案 0 :(得分:33)

如果您使用的是Ruby 1.9,请在运行ruby程序时尝试-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

答案 1 :(得分:1)

如果您正在使用rails,则可以使用-w标志专门运行有问题的文件。

如果你仍然找不到令人讨厌的不匹配,那么解决这个问题的首要方法就是注释掉代码块,直到我能隔离出有问题的区域。

在OS X上,您可以使用命令+ /注释掉突出显示的文本。

答案 2 :(得分:1)

自 2020 年 12 月起,还有 dead_end gem 可帮助您检测丢失的 end

最简单的入门方法是安装 gem:

gem install dead_end

并直接从您的控制台运行它,提供要扫描的文件名:

dead_end myfile.rb

这将为您提供更有用的错误消息:

  43          if (col_idx - 1) % 3 == 0
  50            if !contains?(doc, node)
❯ 51              doc.add_child(node)
❯ 52              tree.
  53            end
  54          end

有关更多选项,请参阅 documentation