18

语法错误,意外的 $end,预期为 keyword_end

我们都去过!假设更改了足够多的代码,快速浏览git diff或类似的东西并不明显,是否有一种简单的方法可以找到缺失end的内容(没有切换到像 Python 这样的基于缩进的语言)?

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

4

3 回答 3

36

如果您使用的是 Ruby 1.9,请-w在运行 ruby​​ 程序时尝试使用该标志。

# 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

于 2012-10-12T01:19:07.193 回答
3

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

最简单的入门方法是安装 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

有关更多选项,请参阅文档

于 2021-03-23T20:30:51.633 回答
2

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

如果您仍然找不到有问题的不匹配,那么我解决此问题的首选方法就是注释掉代码块,直到我可以隔离有问题的区域。

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

于 2015-09-26T14:11:49.303 回答