Ruby 有没有一种快速的方法可以找到缺失的端点’;什么是红宝石?

Ruby 有没有一种快速的方法可以找到缺失的端点’;什么是红宝石?,ruby,syntax,Ruby,Syntax,语法错误,意外的$end,应为关键字\u end 我们都去过!假设更改了足够多的代码,快速浏览一下git diff或诸如此类的东西并不能让它变得明显,那么有没有一种简单的方法可以找到缺少的end(除了切换到基于缩进的语言(如Python)之外) FWIW,我使用Sublime Text 2作为编辑器。如果您使用的是Ruby 1.9,请在运行Ruby程序时尝试使用-w标志 # t.rb class Example def meth1 if Time.now.hours > 12

语法错误,意外的$end,应为关键字\u end

我们都去过!假设更改了足够多的代码,快速浏览一下git diff或诸如此类的东西并不能让它变得明显,那么有没有一种简单的方法可以找到缺少的
end
(除了切换到基于缩进的语言(如Python)之外)


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

如果您使用的是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
资料来源:


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

如果您仍然找不到令人不快的不匹配,那么我解决这个问题的方法就是注释掉代码块,直到我可以隔离出问题区域


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

自2020年12月以来,还有一个gem可以帮助您检测缺失的
结束

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

gem安装死胡同
并直接从控制台运行,提供要扫描的文件名:

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

有关更多选项,请参阅。

这是否仅在使用一致缩进时有效?(+1)我删除了所有的空格,它没有给我任何不匹配的识别错误,所以看起来答案是肯定的。奥古斯丁,不要认为有一种简单的方法可以做到这一点。@Augustin riedinger我发现,至少在某些情况下,您可以使用-w选项从命令行运行Rails类,它将在陷入Rails细节之前找到不匹配的地方。例如,ruby-w app/controllers/foo_controller.rb。注意:
ruby t.rb-w
不工作。vim语法突出显示,快速重新格式化代码缩进的能力已经消除了我所有的痛苦:-)升华文本很可能有类似的东西,对吧?那块宝石需要更受欢迎,我刚刚省下的精神痛苦是巨大的