【问题标题】:How to check entire rails project for compilation errors如何检查整个 Rails 项目的编译错误
【发布时间】:2013-11-17 16:21:07
【问题描述】:

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

假设我在我的 rails 项目中修改了一些 ruby​​ 文件。我还没有编写可以执行所有更改的测试。

有没有办法确保我的所有 *.rb 文件在运行时无需直接执行它们就可以编译?我真的很想执行“编译我所有的 ruby​​/erb 文件”操作,这样我就知道我目前没有任何语法错误。

更新

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

【问题讨论】:

  • Ruby 不是编译语言。
  • ruby-lint 是一个不错的选择 - lint 对于像 Javascript 这样通常在运行时解释的语言(特别是 jslint)很有用。
  • 感谢 Bert 真正回答了我的问题 - 这正是我最终所做的。请添加您的评论作为答案,以便我接受。

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


【解决方案1】:

如果你在 Linux 或 Mac 或一些有趣的 windows 上使用 gnu find 命令,你可以这样做:

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>

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

验证您的 rake 任务和视图的语法错误可能有点棘手,但许多模板引擎(如 haml)都有类似的 -c 语法检查参数。

【讨论】:

  • 在 Windows 下? :oops:
  • 我在 Mac OS 上遇到了 find 参数问题。我选择使用 grep 来过滤:find . | grep ".*.rb$" | xargs -L 1 ruby -c
  • @Zac find 命令应该可以在 OS X 下工作,方法是删除 -name 之后的 =。例如:find . -name *.rb -exec ruby -c {} \;
  • @Zac 谢谢,但你可能有一个错误:grep ".*.rb$" 应该是 grep ".*\.rb$,正则表达式中的 . 应该被转义。
【解决方案2】:

这是来自@Zac 评论的单行答案,我已将其作为答案包含在内,因为我们并非一直在阅读 cmets

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

【讨论】:

    【解决方案3】:

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

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

    无论您是否使用“真正的” TDD,您都需要收紧代码编写周期并以增量方式进行工作,这样您就没有机会在一开始就积累如此高级别(低级别?)的错误地方,虽然。无论语言或环境如何,都是如此。

    【讨论】:

      【解决方案4】:

      你甚至可以做

      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

      检查您的整个项目

      【讨论】:

      • 我们有没有此类活动的工具
      【解决方案5】:

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

      更新: 由于此答案已被接受,因此除非 OP 接受另一个答案但人们通过 Google 搜索登陆此处,否则我无法删除它,请查看其他答案。这与其说是回答,倒不如说是在开玩笑。 Ruby 社区拥有出色的工具,可以像 Rubocop 和朋友一样进行各种静态代码分析。至少,ruby -c 将完成 OP 想要的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-01
        • 2017-08-23
        • 2022-01-03
        • 2021-07-25
        • 1970-01-01
        • 2023-03-28
        • 2022-01-17
        • 1970-01-01
        相关资源
        最近更新 更多