语法错误,意外$ end,期待keyword_end
我们都去过那儿!假设有足够的代码改变了,快速浏览一下git diff
或类似内容并没有显而易见,是否有一种简单的方法可以找到缺少end
(缺少切换到基于缩进的语言,如Python )?
FWIW,我使用Sublime Text 2作为我的编辑。
答案 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。