如何检查整个rails项目是否存在编译错误

时间:2013-11-17 16:21:08

标签: ruby-on-rails ruby static-analysis

我是ruby和rails的新手。我习惯于在IDE(Xcode,Visual Studio等)中工作,在那里我可以执行项目范围/工作区范围的“构建/编译”操作。

假设我在rails项目中修改了一些ruby文件。我还没有编写能够完成所有修改的测试。

有没有办法确保我的所有* .rb文件在运行时不直接运行它们进行编译?我真的只想执行“编译所有我的ruby / erb文件”操作,以便我知道我目前没有任何语法错误。

更新

我可能应该提到我已经专业编写了20年的代码。我意识到Ruby不像C ++那样编译,但这并不意味着它的语法无法检查。就我而言,我决定使用ruby-lint来捕获基本的语法错误,而不必在运行时运行代码。

5 个答案:

答案 0 :(得分:12)

如果您使用的是Linux或Mac或带有gnu find命令的搞笑Windows框,您可以执行以下操作:

find /your/application_directory -name=*.rb -exec ruby -c {} \;

这将在app目录中找到所有ruby脚本并在其上运行ruby -c,如果脚本中存在错误,将运行语法检查并使用Syntax OK或错误消息进行响应。

您还可以为编辑器创建一个宏,这样当您保存或按下组合键时,它将在文件上运行ruby -c并为您提供结果。在vim中,您可以在.vimrc中使用它:

map <Leader>c :w !ruby -c<cr>

使用ruby -c映射Leader-c来编写文件并检查其语法。

验证rake-tasks和视图的语法错误可能有点棘手,但许多像haml这样的模板引擎都有类似的-c语法检查参数。

答案 1 :(得分:2)

为什么不能继续使用像RubyMine(或其父,IntelliJ)这样的IDE?

还有一些文本编辑器插件可以突出显示语法问题,但是谁知道你在使用什么。我使用Sublime Text 2进行非IDE开发,它支持多种自动linting。和Emacs一样,但我猜你不会去那里。

无论你是否使用“真正的”TDD,你需要加强你的代码编写周期并逐步增加工作,这样你就没有机会在第一次累积这样的高级(低级别?)错误但是,地方。无论语言或环境如何,都是如此。

答案 2 :(得分:1)

你甚至可以做

find . -type f -name '*.rb' -or -name '*.ru' -or -name '*.rake' > /tmp/list.txt while read file ; do ruby -c $file done < /tmp/list.txt

检查整个项目

答案 3 :(得分:1)

这是来自@Zac评论的单行答案,我已将其作为答案包括在内,因为并非所有时间我们都阅读了评论

find . | grep ".*\.rb$" | xargs -L 1 ruby -c

答案 4 :(得分:-4)

Ruby是一种解释性语言。没有编译步骤。请在编写代码之前按照TDD并编写测试。

<强>更新 由于这个答案被接受,我不能删除它,除非OP接受另一个答案但是人们通过谷歌搜索登陆这里,请看其他答案。这更像是一句诙谐的言语而不是答案。 Ruby社区拥有很棒的工具,可以进行各种静态代码分析,比如Rubocop和朋友。至少,ruby -c将完成OP想要的目标。